必须先转发,后关注,然后私信“人脸检测”即可免费获取源码
1. 简介
随着iphoneX的刷脸解锁,支付宝的刷脸支付,刷脸的时代已经到来。在通过人脸识别进行一系列的后续操作中,其中一个关键环节为活体检测。但是目前市场上活体检测算法不够完善,并且开源方面没有很好的实现,我们针对目前用户的需求,开源了一个活体检测的sdk。
我们采用基于人脸landmark的活体配合活体检测。这其中涉及到多个人脸相关的知识,包括:1.人脸检测;2.计算人脸landmark;3.根据landmark的人脸姿态估计;4.人脸表情识别(眨眼,张嘴等);5.合理的配合指令设计。
2. 开发步骤
2.1. 人脸检测
大部分人脸识别中,只针对一张人脸,这里我们优化的mtcnn完成人脸检测。原始的mtcnn算法不够高效,参考mtcnn优化提供的方式,用卷积替代pooling,进一步优化人脸检测的速度。
2.2. 人脸landmark计算
开源的算法已经有很多,包括3000fps,ert,SDM,TCDCN等,但是这些算法在精度、速度上或者模型体积上不能满足我们的需求,我们设计了一个人脸关键点拟合的网络,完成人脸68个关键点的计算。
人脸姿态估计,顾名思义,给定一张人脸图像,确定其姿态,姿态由什么构成呢?很简单(pitch,yaw,roll)三种角度,分别代表上下翻转,左右翻转,平面内旋转的角度。
目前,人脸姿态估计有多种方法,可以分为基于模型的方法,基于表观的方法,基于分类的方法。我之前做过 这方面的调研,调研的结果很明显,基于模型的方法得到的效果最好,因为其得到的人脸姿态是连续的,而另外两种,是离散的,并且很耗时间。基于模型的估计方法的前提是,手头必须具备两样东西,一个是人脸特征点(眼镜,嘴巴,鼻子等处的像素位置),另外一个,是需要自己制作一个3维的,正面的“标准模型”。算法最重要的还是思想,其余诸如流程什么的,都是实现思想的手段而已。人脸姿态估计的思想:旋转三维标准模型一定角度,直到模型上“三维特征点”的“2维投影”,与待测试图像上的特征点(图像上的特征点显然是2维)尽量重合。这时候我们脑海中就应该浮现出一种诡异的场景:在幽暗的灯光中,一个发着淡蓝色光芒的人皮面具一点点的“自我调整”,突然一下子“完美无缺”的“扣在了你的脸上”。这就是人脸姿态估计的思想。
2.4. 表情估计
眨眼以及张嘴等,相关研究可参考,我们基于landmark提供的五官位置,训练一个表情分类器,完成表情估计。
2.5. 合理的指令设计
基于我们已经提供的角度、表情的估计算法,我们设计几种合理的配合指令,并且随机下发,进一步防止被视频人脸欺骗。
3.代码
在移动端进行人脸识别应用开发的时候,往往存在用户会使用翻拍照片录像等来欺骗人脸识别系统,因此活体检测是人脸识别和人脸验证中非常重要的一个部分,介于目前开源活体检测代码的较少,但配合型活体检测实现相对比较简单,因此我们对其做了简单的实现, 并开源了所有的代码。
单目配合型活体检测
由于移动端传感器的有限性,在广泛只有单目前置摄像机的情况下,非配合型的人脸活体检测实现相对比较复杂。需要的数据成本也相对较高。而配合性活体检测仅需要通过用户简单的低头摇头操作即可极大降低用户的欺骗攻击成本。
基本设计思路参考
提供了简单的Demo工程 , 需要依赖OpenCV3.4 和安装NDK。若不想使用OpenCV3.4 和繁琐的编译步骤,提供了编译好的 so 库。必须先转发,后关注,然后私信“人脸检测”即可免费获取源码。