1. 引言
对市场上的开源人脸关键点检测项目进行调研。
2. 要求
1. 点位高准确度
2. 预测关键点稳定,尽量少的抖动
3. 人脸关键点较密集(106点以上)
4. 实时运行(单帧检测耗时在40ms以下),支持多人脸检测
5. 能够实现跨平台(Windows, Linux 移动端适配等)
3. 开源项目调研与测试
3.1 人脸检测
3.1.1 Libfacedetection
链接:https://github.com/ShiqiYu/libfacedetection/
windows安装文档:https://github.com/ShiqiYu/libfacedetection/blob/master/COMPILE.md#windows-10-with-visual-studio-2019
摄像头Demo:
https://github.com/ShiqiYu/libfacedetection/blob/master/example/detect-camera.cpp
评价:
测试了下官方调用摄像头Demo,速度非常慢,对于Camera 480的图像,检测速录在160ms左右。精度上还是很给力,刚好后面的同事小人脸也能够检测到。
3.1.2 HyperFT 人脸跟踪
简介:开源视频人脸跟踪算法,基于mtcnn人脸加测+onet人脸跟踪,移动端速度可以达到150fps+。该项目基于Android工程,提供底层JNI实现,使用者可以自行编译移植到其他平台。算法依赖ncnn深度学习计算库,体积小,易于集成。
链接:https://github.com/zeusees/HyperFT/tree/master/Prj-Win
评价:
单帧检测耗时在:25ms以内,但人脸框存在一定抖动
3.1.3 MTCNN ncnn
链接:https://github.com/moli232777144/mtcnn_ncnn
评价:
可以设置检测最大人脸和多人脸,最大人脸的条件下,耗时稳定在30ms内。
3.1.4 Ultra-Light-Fast-Generic-Face-Detector-1MB
评价:
提供mnn,ncnn,onnxruntime等框架模型及推理代码,作者提供了两个模型(高精度及高速度),MNN框架针对240x320缩放尺寸,推理速度单帧25ms以内,检测精度较好,但人脸框存在一定抖动。
3.2 人脸关键点检测
3.2.1 pfld-ncnn 开源106点
链接:
评价:
单帧耗时在50ms以内,准确度上非常差,正脸表现较为一般,侧脸几乎全不准。
3.2.2 insightface开源106点
insightface安装:https://github.com/deepinsight/insightface/tree/master/python-package
官方Demo(106点):
https://github.com/deepinsight/insightface/tree/master/alignment/coordinate_reg
评价:
当人脸检测缩放尺度设置为130x130时,人脸检测+ 耗时在30ms以内,准确度很高,点位存在较小的抖动,对侧脸抬头仰头等较为鲁棒。
3.2.3 左庆博士开源106点
链接:
https://github.com/MirrorYuChen/ncnn_example/blob/master/examples/test_face.cpp
ncnn载入106点关键点检测模型_106关键点_MirrorYuChen的博客-CSDN博客
https://github.com/zuoqing1988/ZQCNN
评价:
Demo仅提供人脸关键点预测展示,未集成人脸检测,因此需要将人脸裁剪送入模型,得到最终结果。准确度较pfld开源的好,但对侧脸等相对仍不是很鲁棒:
3.2.4 开源68人脸关键点检测
评价:
效果上感觉抖动少挺多的。关键点预测耗时在7ms以内,对侧脸精度较为不准确。
3.2.5 阿里开源MnnKit人脸检测(仅移动端,且仅供学术范围使用)
链接:https://github.com/alibaba/MNNKit
PS:附有安卓测试Demo
评价:
速度、精确度及稳定性都是最好的,提供移动端SDK,便于快速集成,但开源协议不允许商用,仅用于学习和研究。
3.2.6 FaceMesh
简介:
MediaPipe Face Mesh 是一种解决方案,即使在移动设备上也能实时估计 468 个 3D 人脸地标。它采用机器学习 (ML) 来推断 3D 面部表面,只需要一个摄像头输入,而不需要专用的深度传感器。该解决方案在整个管道中利用轻量级模型架构和 GPU 加速,提供对实时体验至关重要的实时性能。
安装:
https://google.github.io/mediapipe/getting_started/python.htm
Demo:
评价:
支持468点位人脸关键点检测,速度极快20ms以内,对各个姿态都较为鲁棒,但是闭眼存在眼睛合不上,张嘴呈现嘴唇对不准等问题。