Face-api.js是一个 JavaScript API,是基于tensorflow.js核心API的人脸检测和人脸识别的浏览器实现。它实现了一系列的卷积神经网络(CNN),针对网络和移动设备进行了优化。
在 InfoQ 的访谈中,face-api 和 face-recognition.js的创造者文森特•穆勒解释了他们的动机:
其实,我有另一个类库face-recognition.js,它能够检测脸部和用node.js进行人脸识别。在某个时候,我发现了tensorflow.js,并对浏览器中的机器学习产生了浓厚的兴趣。
因此,我很好奇如果可以移植现有的人脸检测和人脸识别模型到tensorflow.js,它能否可以依然运转如常。
这一切怎么开始呢。
(图片来自 github.com)
对于人脸检测来说,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下载最新的构建,并引入这个脚本:
为加载一个模型,必须提供模型文件作为资产,然后,假设模型驻留在/models 下:
对于想在本地运行示例的开发人员来说,执行下面的步骤并浏览 http://localhost:3000/:
关于 face-api.js 的更多信息可以在GitHub库中找到,里面还有人脸识别教程和人脸跟踪教程。
查看英文原文:Face-api.js: JS Face Recognition Leveraging TensorFlow.js
评论