具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
请参阅图1,本发明实施例一提供的人脸活体检测方法包括以下步骤:需注意的是,若有实质上相同的结果,本发明的人脸活体检测方法并不以图1所示的流程顺序为限。
S101、检测图像中的人脸。
在本发明实施例一中,S101具体可以包括以下步骤:
S1011、获取图像;
例如获取摄像机采集的一帧图像;摄像机可以是人脸识别设备自带的,也可以是与人脸识别设备连接的外置摄像机;人脸识别设备可以是移动终端(例如手机、平板电脑等)或台式电脑等;
S1012、检测图像中的人脸;
在本发明实施例一中,可以采用VJ算法进行人脸检测(请参考《Rapid objectdetection using a boosted cascade of simple features》(P.Viola,M.Jones,Proceedings of the 2001IEEE Computer Society Conference on Computer Visionand Pattern Recognition,2001),该算法结合Haar特征和Adaboost分类器进行人脸检测,采用积分图加速特征提取,通过将AdaBoost构建的强分类器进行级联的方式,可以在提高人脸检测性能的同时大幅加快检测速度,具有运算效率高、资源占用率较低的优点,适合在手机、平板电脑等嵌入式终端进行实时的人脸检测。
S1013、判断检测到的人脸的尺寸是否与预设窗口吻合,如果吻合,则执行S102。
为提高人脸活体检测的正确率,设置了预设窗口,要求用户将人脸放置在预设窗口内进行相关指令动作。预设窗口可以是圆形、椭圆形、矩形等。
预设窗口的外界矩形框的左上角的顶点坐标记为(X1,Y1),右下角的顶点坐标记为(X2,Y2)。在本发明实施例一中,X1=69,Y2=169,X2=254,Y2=408,当然也可以设置为其他值。假设检测到的人脸区域的人脸矩形框的左上角的顶点坐标记为(x1,y1),右下角的顶点坐标记为(x2,y2)。那么,检测到的人脸区域和预设窗口的重合区域面积A可以表示为:
A=(min(X2,x2)-max(X1,x1)+1)(min(Y2,y2)-max(Y1,y1)+1),其中,max和min分别表示取最大值和取最小值运算。
检测到的人脸区域和预设窗口的重合度I可以表示为:
如果I<预设值,则认为检测到的人脸的尺寸与预设窗口不吻合,返回S1011,否则,执行S102。预设值可以设为0.4,当然也可以为其他经验值。
S102、生成与人脸相关的随机动作指令。
在本发明实施例一中,与人脸相关的随机动作指令可以包括摇头、点头、眨眼、张嘴中的一种或任意组合。
S103、采集图像序列。
图像序列包含用户为配合随机动作指令所完成的动作对应的图像,考虑到动作等待及完成的大致时长,本发明实施例一采集的图像序列的长度为100帧,当然也可以是其他经验值。
S104、根据采集到的图像序列检测用户的人脸动作,根据人脸关键点的位置计算与每个随机动作指令相关的统计量,分别计算与每个随机动作指令相关的所有统计量的相对变化量,并根据相对变化量判断用户的人脸动作是否与随机动作指令一致,如果一致,则判定当前人脸为活体。
在本发明实施例一中,S104具体可以包括以下步骤:
S1041、读取采集到的图像序列中的一帧图像,然后执行S1042,如果图像序列中的图像全部读取完毕,则直接执行S1045。
S1042、定位人脸关键点。
目前,定位人脸关键点通常需要定位68个关键点,然而大部分关键点对于人脸活体检测没有意义,这些冗余关键点的定位增加了资源占用率,且降低了运算效率。也有仅需要定位12个关键点,但这些关键点对于眼睛和嘴巴区域的表达不够充分,譬如定位的上下眼睑和上下嘴唇部分都仅有一个关键点,而这些部分本身并没有特殊的定位特征,容易因定位误差而导致眼睛和嘴巴状态判断错误。这样,容易造成人脸活体检测的正确率下降。
本发明实施例一针对摇头、点头、眨眼和张嘴四个动作定位19个人脸关键点,其中左眼、右眼和嘴巴分别6个关键点,鼻尖1个关键点。具体为:左眼的上眼睑和下眼睑分别有2个关键点,左眼的两边眼角分别有1个关键点;右眼的上眼睑和下眼睑分别有2个关键点,右眼的两边眼角分别有1个关键点;上嘴唇和下嘴唇分别有2个关键点,嘴唇的两边嘴角分别有1个关键点。眼部和嘴部关键点多,主要是因为眨眼和张嘴动作幅度相对较小,对眼部和嘴部的关键点定位精度要求更高。其中,上下眼睑和上下嘴唇部分都有2个关键点,不仅可以避免单个关键点定位误差引起的眼睛或嘴巴状态误判,而且可以区分不同用户的眼睛、嘴巴形状差异引起的眼睛或嘴巴状态误判。鼻尖和眼睛、嘴巴的相对位置变化可以用于判决摇头和点头动作。也可以定位25个人脸关键点,即左眼、右眼和嘴巴分别8个关键点,鼻尖1个关键点。具体为:左眼的上眼睑和下眼睑分别有3个关键点,左眼的两边眼角分别有1个关键点;右眼的上眼睑和下眼睑分别有3个关键点,右眼的两边眼角分别有1个关键点;上嘴唇和下嘴唇分别有3个关键点,嘴唇的两边嘴角分别有1个关键点。当然也可以定位18个或24个人脸关键点,即不定位鼻尖上的关键点。也可以是其他数量的人脸关键点,只要保证左眼、右眼和嘴巴分别至少6个关键点。
本发明实施例一的人脸关键点的定位方法采用主动形状模型方法。本发明实施例一采用人工标记500张人脸图像的关键点位置,作为训练数据集。
由于人脸动作主要在预设窗口内进行,为了减少运算量,所述定位人脸关键点具体为:在预设窗口内定位人脸关键点。
S1043、根据人脸关键点的位置计算与当前生成的随机动作指令相关的统计量。
本发明仅计算与每一次生成的随机动作指令相关的统计量,不需要计算与其他随机动作指令相关的统计量,更不需要借助状态机等来描述不同的统计量。这样可以大幅降低运算量,提高运算效率。例如S102中,当前生成的随机动作指令是摇头,那么S1043中,只计算与摇头相关的统计量。
对于摇头和点头动作,常用的方法是计算人脸姿态信息相关的三个欧拉角(pitch,yaw,roll),这三个值的计算涉及复杂的角度计算、矩阵运算,计算复杂度高。由于本发明只需要判断用户的人脸动作是否与随机动作指令一致,而不需要判断当前人脸的具体动作。因此,本发明仅依据摇头或点头时五官位置来计算统计量,并根据相对变化量来判断用户的人脸动作是否与随机动作指令一致。
具体地,当前生成的随机动作指令是摇头时,根据人脸关键点的位置计算与摇头相关的统计量U1具体为:
其中,x1是右眼的右边眼角的x轴坐标值,x10是左眼的左边眼角的x轴坐标值,x13是鼻尖的x轴坐标值。当人脸姿态为准正面时,U1接近1,摇头时,U1远离1。
当前生成的随机动作指令是点头时,根据人脸关键点的位置计算与点头相关的统计量U2具体为:
其中,y13是鼻尖的y轴坐标值,y4是右眼的左边眼角的y轴坐标值,y7左眼的右边眼角的y轴坐标值,y14是嘴唇的右边嘴角的y轴坐标值,y17是嘴唇的左边嘴角的y轴坐标值。当人脸姿态为准正面时,U2接近1,点头时,U2远离1。
当前生成的随机动作指令是眨眼时,根据人脸关键点的位置计算与眨眼相关的统计量U3具体为:
其中,(x2,y2)和(x3,y3)分别是右眼的上眼睑的2个关键点的坐标值,(x5,y5)和(x6,y6)分别是右眼的下眼睑的2个关键点的坐标值,(x4,y4)是右眼的左边眼角的坐标值,(x1,y1)是右眼的右边眼角的坐标值,(x8,y8)和(x9,y9)分别是左眼的上眼睑的2个关键点的坐标值,(x11,y11)和(x12,y12)分别是左眼的下眼睑的2个关键点的坐标值,(x10,y10)是左眼的左边眼角的坐标值,(x7,y7)是左眼的右边眼角的坐标值,U3值越大,说明双眼的睁开程度越大;反之,说明双眼的睁开程度越小。
当前生成的随机动作指令是张嘴时,根据人脸关键点的位置计算与张嘴相关的统计量U4具体为:
其中,(x15,y15)和(x16,y16)分别是上嘴唇的2个关键点的坐标值,(x18,y18)和(x19,y19)分别是下嘴唇的2个关键点的坐标值,(x14,y14)是嘴唇的右边嘴角的坐标值,(x17,y17)是嘴唇的左边嘴角的坐标值。U4值越大,说明嘴巴的张开程度越大;反之,说明嘴巴的张开程度越小。
可见,本发明实施例一中,计算与当前生成的随机动作指令相关的统计量的计算复杂度低,运算量小,便于在手机等嵌入式终端上实现快速求解。
S1044、缓存所述与当前生成的随机动作指令相关的统计量。
S1045、待图像序列读取完毕后,读取缓存的所有与随机动作指令相关的统计量,分别计算与每个随机动作指令相关的所有统计量的相对变化量。
假设随机动作指令为k(k=1表示摇头,k=2表示点头,k=3表示眨眼,k=4表示张嘴),对应的统计量为Uk,缓存空间中统计量的数量为N(由于本发明中S103采集的图像序列的长度为100帧,而S1042可能存在关键点定位失败的情况,故N≤100)。针对每个随机动作指令的所有统计量可以连成一条曲线,记录了人脸动作过程中统计量的变化情况。其中,曲线的波峰和波谷反映了人脸动作的极限状态,譬如:摇头动作运动到最左侧时U1最小,到达波谷位置;摇头动作运动到最右侧时U1最大,到达波峰位置。点头动作运动到最上侧时U2最小,到达波谷位置;点头动作运动到最下侧时U2最大,到达波峰位置。眼睛睁开程度最大时U3到达波峰位置,眼睛闭合时U3到达波谷位置。嘴巴张开程度最大时U4到达波峰位置,嘴巴闭合时U4到达波谷位置。
为了降低数据计算误差,本发明实施例一先对统计量进行滤波处理,滤波窗口为3(当然也可以是其他经验值,例如4、5等),采用均值滤波方法(当然也可以采用其他滤波方法),滤波后的统计量为
N为缓存空间中统计量的数量;
考虑到人脸动作的连续性,为简便起见,本发明实施例一用最大值和最小值来代替波峰和波谷,分别记为和/>
考虑到不同用户准正面正常姿态下的眼睛睁开程度、嘴巴闭合程度以及五官相对位置都有差异,本发明实施例一将与每个随机动作指令相关的所有统计量的均值,作为用户的基准值
计算与每个随机动作指令相关的所有统计量的相对变化量ΔUk为
该相对变化量的物理意义在于,人脸的动作越显著,那么和/>的差越大,相对变化量ΔUk也就越大。因此,可以将相对变化量ΔUk作为动作判决的依据。
S1046、当与随机动作指令相关的所有统计量的相对变化量大于或等于与所述随机动作指令对应的动作的预设阈值时,判定用户的人脸动作与随机动作指令一致,并判定当前人脸为活体,否则判定用户的人脸动作与随机动作指令不一致。
本发明实施例一采用简单的阈值判决策略来进行判断。设Tk为第k类动作的预设阈值,(k=1表示摇头,k=2表示点头,k=3表示眨眼,k=4表示张嘴),当相对变化量ΔUk大于或等于预设阈值Tk时,判定用户的人脸动作与随机动作指令一致,否则判定为不一致。Tk采用的是经验值,在本发明实施例一中,T1=T2=0.6,T3=0.3,T4=0.9。由于本发明根据相对变化量来判断用户的人脸动作是否与随机动作指令一致,避免了复杂的角度和矩阵运算,提高了运算效率。由于本发明实施例一仅需要计算各统计量的均值、最大值和最小值,采用简单的阈值判决策略来实现动作判决,相比分类器等机器学习方法而言,效率得到大幅提升,而且不需要训练数据,资源占用率也非常小。
实施例二:
本发明实施例二提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本发明实施例一提供的人脸活体检测方法的步骤。
实施例三:
图2示出了本发明实施例三提供的人脸识别设备的具体结构框图,一种人脸识别设备100包括:一个或多个处理器101、存储器102、以及一个或多个计算机程序,其中所述处理器101和所述存储器102通过总线连接,所述一个或多个计算机程序被存储在所述存储器102中,并且被配置成由所述一个或多个处理器101执行,所述处理器101执行所述计算机程序时实现如本发明实施例一提供的人脸活体检测方法的步骤。
在本发明实施例三中,人脸识别设备可以是移动终端(例如手机、平板电脑等)或台式电脑等。
在本发明中,由于根据人脸关键点的位置计算与每个随机动作指令相关的统计量,分别计算与每个随机动作指令相关的所有统计量的相对变化量,并根据相对变化量判断用户的人脸动作是否与随机动作指令一致,如果一致,则判定当前人脸为活体。因此本发明提供的人脸活体检测方法不需要借助状态机等来描述不同的统计量,可以大幅降低运算量,降低了算法的复杂度,提高了算法运算效率,可以在手机、平板等资源较少的嵌入式终端实现高效的人脸活体检测。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。