Face-api.js是一个JavaScript API,是基于tensorflow.js核心API的人脸检测和人脸识别的浏览器实现。它实现了一系列的卷积神经网络(CNN),针对网络和移动设备进行了优化。
在InfoQ的访谈中,face-api和 face-recognition.js的创造者文森特•穆勒解释了他们的动机:
其实,我有另一个类库face-recognition.js,它能够检测脸部和用node.js进行人脸识别。在某个时候,我发现了tensorflow.js,并对浏览器中的机器学习产生了浓厚的兴趣。
因此,我很好奇如果可以移植现有的人脸检测和人脸识别模型到tensorflow.js,它能否可以依然运转如常。
这一切怎么开始呢。
对于人脸检测来说,face-api.js实现了模型SSD Mobilenet V1,这是个微小的人脸检测器,是个实验性的暂态混沌神经网络(MTCNN)。
SSD(单发多盒探测器)MobileNet V1是一个基于MobileNet V1的模型,旨在获得高精度检测边界框。这个模型主要计算每张脸在图像中的位置,并返回边界框以及每个脸的检测概率。
这个微小的人脸检测器是个实时人脸检测的模型,相比于SSD Mobilenet V1,它更快,更小,消耗的资源更少。这个模型已经在14 千张标记有边界框的图像上做过训练了。据穆勒说,只有有限资源的客户使用这个模型应该不会有问题的。
MTCNN(多任务级联卷积神经网络)是一种实验模型,以另一种人脸检测器SSD MobileNet V1和Tiny Yolo V2的面貌出现,从而提供了更多配置的可能性。
对于68点人脸标记检测,有两个轻量级和快速模式,face_landmark_68_model只需要350 kb, 而face_landmark_68_tiny_model则只要求80 kb。两种模型都采用了深度可分离卷积和紧密连接块的思想。该模型已经在大约35千张标有68脸部标记点的脸部图片集上训练过了。
对于人脸识别,是基于ResNet-34类架构的一个模型,提供以face.js从任何脸图像对脸部描述的计算。这个模型不仅限于用于训练的脸部集,这意味着开发人员可以用它对任何人做人脸识别。它可以通过比较脸部描述找出两个任意的相似面孔。
为从face-api.js开始着手,从dist/face-api.js或dist/face-api.min.js下载最新的构建,并引入这个脚本:
\u0026lt;script src=\u0026quot;face-api.js\u0026quot;\u0026gt;\u0026lt;/script\u0026gt;
为加载一个模型,必须提供模型文件作为资产,然后,假设模型驻留在/models下:
await faceapi.loadSsdMobilenetv1Model('/models')// accordingly for the other models:// await faceapi.loadTinyFaceDetectorModel('/models')// await faceapi.loadMtcnnModel('/models')// await faceapi.loadFaceLandmarkModel('/models')// await faceapi.loadFaceLandmarkTinyModel('/models')// await faceapi.loadFaceRecognitionModel('/models')
对于想在本地运行示例的开发人员来说,执行下面的步骤并浏览 http://localhost:3000/:
git clone https://github.com/justadudewhohacks/face-api.js.git cd face-api.js/examplesnpm inpm start
关于face-api.js的更多信息可以在GitHub库中找到,里面还有人脸识别教程和人脸跟踪教程。
查看英文原文:Face-api.js: JS Face Recognition Leveraging TensorFlow.js