如何在面部识别中区分真实面孔和假面孔

图片



简短的介绍



在控制系统和进入场所中,真实人的脸与照相机中的假人之间的区别仍然是最困难的问题之一。提出了一种算法,用于从标准摄像机实时检测视频序列中的眨眼,这给我们一个事实,即摄像机中的人是真实的。在现场数据集上训练的最新地标探测器对头部相对于摄像机的方向,变化的照明条件和面部表情具有出色的抵抗力。我们表明,对地标的检测足够准确,可以可靠地估计睁眼的程度。因此,所提出的算法估计界标的位置,提取一个标量-眼底比率(EAR)-表征每帧中的眼睛睁开。最后,SVM分类器在短时间内将眨眼检测为EAR值的模式。简单的算法在两个标准数据集上的表现优于现代结果。



Dlib库



在本文中,我将面部索引用于dlib面部区域在dlib库中实现的面部界标检测器生成68(x,y)坐标,这些坐标被映射到特定的面部结构。通过在标记的iBUG 300-W数据集上训练形状预测器来获得这68个点映射



下面我们可以直观地看到这68个坐标中的每个坐标所映射到的对象:图1-渲染iBUG 300-W数据集中的68个面部坐标点中的每一个通过 检查图像,我们可以看到可以通过简单的Python索引访问面部区域(假设使用Python作为上图的零索引是一个索引):













  • 可以通过点[49,68]进入嘴。
  • 右眉通过点[18,22]。
  • 左眉通过点[23,27]。
  • 右眼通过点[37,42]。
  • 左眼通过点[43,48]。
  • 鼻子穿过穴位[28,36]。
  • 和下巴通过点[1、17]。


了解眼睛比例(EAR)。我们可以应用面部界标检测来定位面部重要区域,包括眼睛,眉毛,鼻子,耳朵和嘴巴:





图2-实时检测图片中的面部界标



这也意味着我们可以通过了解某些面部的指标来提取某些面部结构脸部:





图3-应用脸部标志物来定位脸部的不同区域,即右眼和嘴巴



眨眼检测



从眨眼检测的角度来看,我们只对两套面部结构感兴趣-眼睛。 :每只眼睛由6(X,Y)开始在眼睛的左上角(就像你看一个人),然后顺时针方向绕工作区域的其余坐标表示





6个与眼睛有关的脸部标志-图4



基于在此图像中,我们必须从关键点着手:这些坐标的宽度和高度之间存在关系。基于Soukupova和Cech在其2016年的论文“使用面部地标检测实时眨眼”的工作基础上,我们可以得出一个反映这种关系的方程,称为眼睛纵横比(EAR):





图5-眼睛比例方程



其中p1,…,p6是脸部的2D界标。该方程式的分子计算垂直眼的界标之间的距离,而分母计算水平眼的界标之间的距离,从而对分母进行加权,因为只有一组水平点,但有两组垂直点。



众所周知,睁大眼睛时眼睛的纵横比大约是恒定的,但是当眨眼时眼睛的纵横比会迅速降至零。使用这个简单的

方程式,我们可以避免使用图像处理技术,而只需依靠距离与眼睛视点的比率来确定人是否眨眼。为了更加清楚,请考虑下图:





图6-眼睛界标的可视化



在左上角,我们完全睁开了眼睛-此处的纵横比将很大,并且随着时间的推移相对恒定。但是,一旦眨眼(右上),眼睛的长宽比就会急剧下降,接近零。上面的图显示了视频剪辑的眼睛纵横比。如我们所见,眼睛的纵横比是恒定的,然后迅速下降到接近零,然后再次增加,这表示眨眼。





图7-眨眼检测



例外情况



但是,由于视频流中的噪声,对面部标志的检测不足或视角的快速变化,简单的眼睛宽高比阈值可能会导致误报检测,这表明当对象实际上没有眨眼时就会出现眨眼。正如我们在一篇医学文章中所读到的,一个人每分钟平均眨眼20次,这告诉我们他每3秒眨眼一次。



基于此,为了使我们的眨眼检测器更能抵抗这些问题,我们在读取眨眼之前设定了时间间隔,必须经过3秒,并且在检测到眨眼时必须拍摄至少3帧。我们的研究结果非常好。探测器工作正常。在二十项测试中,十八项测试为阳性。



这种方法的问题



这种方法还存在未解决的问题。如果通过技术手段在摄像机上显示视频以显示眨眼的人的脸部,则系统可能会导致检测到假阳性。这个问题的解决可以借助图像固定器来完成,其中使用两个摄像机,我们可以获得深度图并计算到物体的距离。



解决问题



这显示了立体对摄像机的操作。校正图像后,从两个图像中搜索相应的点对。最简单的方法如图8所示,如下所示。对于具有坐标(x0,y0)的左图片的每个像素,在右图片中搜索一个像素。假定右图片上的像素应具有坐标(x0-d,y0),其中d是称为视差的量。通过计算响应函数的最大值来执行对相应像素的搜索,该函数可以是例如像素附近的相关性。





图8-深度图计算



All Articles