基于OpenCV的活体检测
2020-07-04侍新兰杜友福王同喜
侍新兰 杜友福 王同喜
摘要:由于人脸极易用照片、视频等方式进行复制,对人脸识别与认证系统安全造成威胁,使用dlib人脸识别与关键点检测,实时追踪视频中人脸关键点,进行人脸活体检测(Face Anti-spoofing),以此来抵御照片、换脸、面具、遮挡以及屏幕翻拍等常见的攻击手段,保障用户的利益。
关键词:人脸关键点;dlib;活体检测;深度学习
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2020)15-0211-03
1引言
随着人脸识别系统在日常生活中更加普遍的应用,从智能手機上的人脸识别解锁、到人脸识别打卡、门禁系统等等。活体检测是在一些身份验证场景确定对象真实生理特征的方法,在人脸识别应用中,活体检测能通过眨眼、张口、摇头、点头等组合动作,使用人脸关键点定位和人脸追踪等技术,验证用户是否为真实活体本人操作。本次实验主要针对眨眼和张口检测。
2相关技术
2.1Dlib
一个很经典的用于图像处理的开源库,shape_predictor_68_face_landmarks.dat是一个用于人脸68个关键点检测的dat模型库,使用这个模型库可以很方便地进行人脸检测,并进行简单的应用。脸部特征图如图1。
2.2眨眼检测原理
在进行眨眼检测之前,首先需要确定眼睛的位置,在确定眼睛位置之后,选择6个点来表示眼睛。如图2所示,基于人脸特征图从眼睛的左角开始,顺时针绕着眼睛进行编号。
根据图2标定的6个点来表示眼睛睁开和闭上的状态。当睁眼时,上图中垂直方向的黄色箭头会变得伸长;闭眼时,这个箭头相应缩短。由于观看的距离、角度的不同,单从这一点来判断人眼的状态容易出现误差,所以借助Soukupov6和cech在其2016年的论文“Real-Time Eye Blink D~ecfion using FacialLandmarks”中推导出反映这种关系的方程,称为眼睛纵横比EAR(Eve Aspect Ratio)。如下所示:
其中p1,……,p6是2D眼睛地标位置。
由图2所示的EAR曲线图可知,当人眼睁开时,EAR在某个值上下波动;当人眼闭合时,EAR迅速下降,理论上会接近于零。鉴于当时的技术限制,人脸检测模型不是很精确,所以认为当EAR低于某个阈值时,眼睛处于闭合状态。由于眨眼速度比较快,完成眨眼动作一般需要1-3帧,所以为检测眨眼次数,需要设置同一次眨眼的连续帧数。关于阈值的设置要根据实际情况来定。
2.3张口检测原理
张口检测原理类似于眨眼检测。如图3所示,同样选择6个关键点编号。
3人脸活体检测实现
3.1提取脸部特征部位
基于dlib的shape_predictor 68 face landmarks模型检测出人脸的68个特征点,获取面部标志的索引,由特定面部的索引来提取特定的脸部结构。
实现过程中对于输入图像,先做人脸检测,再做关键点定位。首先检测人脸所在位置(人脸框),再检测关键点相对于人脸框的位置,用回归算法去预测每一个点在图像当中的位置,得到坐标点。进而对检测到的框进行遍历,对人脸框进行关键点定位,根据位置画点,获得凸包位置,并提取RIO区域,实验结果如图4所示。
考虑到多目标出现,关键点检测都是基于人脸框进行,对于出现的人脸,遍历每一个人脸框,得到坐标,检查定位。
3.2人脸检测
人脸特征点检测用到了两个关键函数:dlib.get_fton-tal_face_detectorO和dlib.shape_predictor(predictor_path)。前者是内置的人脸检测算法,使用HOGpyramid,检测人脸区域的界限(bounds)。后者是用来检测一个区域内的特征点,并输出这些特征点的坐标。使用开源模型shape_predictor 68 face land-marks.dat,可以得到68个特征点位置的坐标,效果如图5所示。
3.3人脸活体检测实现
3.3.1眨眼检测
首先初始化DLIB的人脸检测器(HOG),然后创建面部标志物预测,分别获得脸部位置检测器和脸部特征位置检测器以及左右眼面部标志的索引。调用摄像头,从视频流循环帧,读取图片,对图片做维度扩大,并进灰度化,使用detector(gray,0)进行脸部位置检测,循环脸部位置信息,使用predictor(gray,rectl获得脸部特征位置的信息,将脸部特征信息转换为数组ar-ray的格式,提取左眼和右眼坐标,构造函数计算左右眼的EAR值,使用平均值作为最终的EAR。用cv2.convexHull获得凸包位置,使用drawContours画出轮廓位置,用矩形框标注人脸。分别计算左眼和右眼的评分求平均作为最终的评分,如果小于阈值,则加1,如果连续3次都小于阈值,则表示进行了一次眨眼活动,同时使用cv2.putText将眨眼次数进行显示。最后基于68个特征点标识,进行画图操作。
3.3.2张口检测
基于DLIB获取唇部标志的索引,对输入的视频流提取帧图像检测人脸,先对唇部粗定位进行肤色分割,然后精确定位,获取唇部特征值MAR,若MAR小于阈值,则加1,如果连续3次都小于阈值,则表示张口一次,同一次张口大约在3帧。
3.3.3实验结果
本次实验设置眼部阈值为0.2,唇部为0.5。但每个人的眼睛、嘴巴大小比例不同,应该采取平均值计算方法——阈值的获取方式是:先采集30次数据,取其平均值作为默认的值。为了数据的准确,采集数据时应该平视摄像头。实验结果如图6。
4总结
人脸识别系统逐渐向着自动化、无人监督化的趋势发展,然而目前人脸识别技术能识别人脸图像的身份但无法准确辨别所输人人脸的真伪。那么如何自动地、高效地辨别图像真伪抵抗欺骗攻击以确保系统安全已成为人脸识别技术中一个迫切需要解决的问题。本文基于dlib人脸检测和关键点获取的基础上对视频流中采集到的人脸进行追踪与判断,实验中采集到的人脸较多为平视摄像头,对于侧脸,遮挡等处理效果需要进一步设计与改进。