人脸landmark介绍
人脸landmark在人脸对齐、人脸重建、身份鉴别、人脸编辑与人脸AR等方面都有重要作用。人脸landmark是在检测人脸白色矩形框的基础上,通过OpenVINO™自带的人脸landmark模型实现了对人脸区域关键部位35个点位的标记,它就是典型的人脸landmark提取。在深度学习没有那么流行之前,传统的人脸landmark提取有两个让人吐槽的痛点:
1. 人脸的landmark中128个点位与68个点位提取是高耗时操作;
2. 人脸landmark提取算法的抗干扰能力与普适性很差。
自从深度学习方式在计算机视觉领域大显身手之后,人脸landmark算法通过卷积神经网络实现了稳定性与精准度双提升,现在已经是很多应用标配中间步骤。根据提取的人脸landmark点数的不同,最常见分为:
5点提取最简单人脸对齐
35点提取常见人脸对齐、人脸比对、人脸AR
68点提取场景适用人脸对齐、人脸比对、人脸AR等
128点提取场景适用人脸对齐、人脸比对、人脸AR等
192及更多点提取,场景适用人脸对齐、人脸比对、人脸AR、人脸3D重建
更多点位的人脸landmark提取这里就不再列出了。
300W是人脸landmark提取最常用的一个基准数据集,支持68个点位与51个点位的人脸landmark数据标注与训练。
人脸landmark实现疲劳检测基本原理
我们首先使用人脸检测模型,检测得到人脸ROI区域,然后使用一个人脸landmark预测模型得到人脸区域的68个点位,其中对我们最有用的是分别来自图-2中的左右眼睛周围的38、39、41、42与44、45、47、48八个点位。人的疲劳最明显的特征之一就是会闭上眼睛,要打瞌睡,我们通过上述八个点来求解,它们的横纵比就可以度量眼睛的闭合程度,辅助一个阈值就可以很好过滤,达到根据眼睛的闭合程度实现睡意/疲劳检测的目的。
网络模型
OpenVINO™ 中有两个自带的landmark预测模型,分别支持5点与35点定位,不符合我们期望的68个点定位的landmark模型预测。所以这里使用Github上一个开源的基于Pytorch版本实现的68个点位预测模型,它支持OpenVINO™ 加速,工程地址如下:
https://github.com/github-luffy/PFLD_68points_Pytorch
我git clone了上述的工程地址,然后通过下面的脚本把其中mobilenetv2的PFLD的预训练模型转换为OpenVINO™可以正确读取与解析的ONNX格式。
代码实现与运行演示
在代码实现与运行演示环节,参考之前的对象检测部分,我们可以实现人脸检测,然后从人脸检测输出中得到人脸的ROI区域,这部分的代码实现在前面的文章中已经详细分享过,这里就不再赘述,我们把代码实现主要放在如何提取landmark的68个点位预测与眼睛疲劳检测部分,这部分的代码实现主要分为以下几个部分:
Step1:加载人脸landmark网络,设置输入与输出
代码(省略)
Step2:提取人脸ROI区域,并实现输入预处理
代码(省略)
Step3:解析预测68个定位点并计算眼睛四个点的横纵比
代码(省略)
原文链接:https://mp.weixin.qq.com/s/zv57IGZawDJXO0Zgv-5EbQ