Face-api.js:利用 TensorFlow.js 的 JavaScript 人脸识别

阅读数:1737 2018 年 11 月 18 日 08:00

Face-api.js:利用TensorFlow.js的JavaScript人脸识别

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:利用TensorFlow.js的JavaScript人脸识别

(图片来自  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下载最新的构建,并引入这个脚本:

复制代码
<script src="face-api.js"></script>

为加载一个模型,必须提供模型文件作为资产,然后,假设模型驻留在 /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/

复制代码
cd face-api.js/examples
npm i
npm start

关于 face-api.js 的更多信息可以在 GitHub 库中找到,里面还有人脸识别教程人脸跟踪教程

查看英文原文: Face-api.js: JS Face Recognition Leveraging TensorFlow.js

评论

发布