本文介绍一个运行在浏览器端的人脸识别框架,即Face-api.js。基于TensorFlow.js完成人脸检测、特征点提取、描述子计算、人脸匹配等一系列步骤。识别效果图由于该框架的易用性,端到端的识别只需几行JavaScript代码即可完成。下面介绍人脸识别的一般步骤:人脸检测首先,我们从图片或视频帧中定位人脸的位置。该框架为我们提供了三种人脸检测模型。TinyFaceDetectorTinyFaceDetector是一个非常高性能的实时人脸检测器,与SSDMobilenetV1人脸检测器相比,它更快、更小、资源消耗更少,作为回报它更擅长检测小脸,性能略差。该模型非常适合移动和网络友好,因此它应该是移动设备和资源有限的客户端上的首选人脸检测器。量化模型的大小仅为190KB(tiny_face_detector_model)。SSDMobilenetV1对于人脸检测,本项目基于MobileNetV1实现了SSD(SingleShotMultiboxDetector)。神经网络将计算图像中每个人脸的位置,并返回一个边界框以及每个人脸的概率。该人脸检测器旨在实现检测人脸边界框的高精度,而不是缩短推理时间。量化模型的大小约为5.4MB(ssd_mobilenetv1_model)。MTCNNMTCNN(多任务级联卷积神经网络)代表了SSDMobilenetv1和TinyYolov2的替代人脸检测器,它提供了更多的配置空间。通过调整输入参数,MTCNN应该能够检测各种面部边界框大小。MTCNN是一个3级级联CNN,它同时返回5个面部标志以及边界框和每张脸的分数。此外,模型大小仅为2MB。提取68个特征点该套件实现了一个非常轻巧、快速和准确的68点面部标志检测器。默认模型的大小只有350kb(face_landmark_68_model)而tiny模型只有80kb(face_landmark_68_tiny_model)。两种模型都采用了depthwiseseparableconvolutions和密集连接块的思想。此外,该模型已经在约35k面部图像的数据集上进行了训练,这些图像标记有68个面部标志。面部特征点图的计算描述符对于面部识别,实现类似ResNet-34的架构来计算面部描述符(具有128个值的特征向量),用于描述来自任何给定面部图像的人脸特征。该模型不仅仅用于面部训练集,这意味着您可以使用它对任何人(例如您自己)进行面部识别。您可以通过比较面部描述符来确定任意两个面部的相似性,例如通过计算欧氏距离或使用您选择的任何其他分类器。完成人脸识别基于描述符,可以构建人脸识别匹配器。将其与视频帧中的人脸描述符进行比较,如果存在,则可以输出名字和相似度。补充另外,该项目还有其独有的表情检测和年龄检测功能,具体代码可以查看github开源项目。https://github.com/justadudewhohacks/face-api.js下面是附加函数效果图:表情检测图年龄检测图
