APP下载

基于人脸识别技术的考生身份验证系统的研究与实现

2020-06-06杨建华

合肥学院学报(综合版) 2020年2期
关键词:身份验证特征向量身份证

杨建华

(安徽广播电视大学 信息与建筑工程学院,合肥 230022)

0 引 言

考试是学校教育的重要组成部分,也是选拔优秀人才的主要途径。从类型来说主要分为升学考试与职位资格考试,考试结果关系到每位考生的切身利益,一些大型考试更会关系到考生的前途命运。在巨大的利益诱惑下,总有少数考生铤而走险,找体貌特征与自己相近的“枪手”来替考。在以往考生进场身份验证环节,监考教师通常根据考场名册上的照片,对其本人及身份证信息进行人工比对。[1]受情绪、主观、疲劳与经验不足等因素的影响,会让替考者蒙混过关,从而影响考试的公平、公正。要想从源头上杜绝替考的发生,引入智能化验证系统代替人工验证势在必行。

近年来,随着计算机硬件水平的提升与数据量的增长,人脸识别成为了计算机视觉领域的研究热点之一。[2]人脸识别以其非强制性、非接触性、并发性等便利优势,已广泛应用于金融、安保、通行等商用领域,但在教育考试的身份验证领域研究应用较少。因此,探讨基于人脸识别技术的考试身份验证系统,给出研究与实现过程,为合理科学的确定考生身份提供了一种有效方法,具有重要的现实意义。

1 考生身份验证系统架构

1.1 系统的软硬件环境

1.2 系统的主要框架结构

系统的主要框架结构如图1所示,主要分为人脸图像的采集、人脸检测、人脸校正、特征提取和相似度计算五个部分。

2 考生身份验证系统的关键技术与实现

图1 考生身份验证系统框架结构

人脸识别是基于人脸部特征信息进行身份识别的一种生物识别技术。[3]主要技术包括人脸检测、人脸关键点检测和人脸验证等。在深度学习出现之前,人脸识别主要通过高维人工特征提取和降维,其技术主要基于可见光图像的人脸识别,但这种方式缺陷较多,例如,同一个人面部表情发生变化、光照等发生变化时,识别率会大大降低。目前,人脸识别的主流技术是深度学习加海量的有标注的人脸数据,如LFW、Celeba、MegaFace等数据集。考生身份验证系统围绕人脸识别主要技术展开,增加了身份证阅读器进行人脸图像采集与相似度计算环节。

2.1 图像采集

图2 身份证阅读器读取信息

系统需要采集的考生图像分为三类:考生报名图像、身份证上的人脸图像与考生进入考场时的现场人脸图像。考生报名图像通常在考生报名时由专业人员拍摄,或考生通过网络上传自己证件头像照片,无需进行其他处理。为方便后面的图像比较,统一以考生的身份证号命名,保存类型为JPG格式。考生现场图像利用摄像头进行拍摄,通过OpenCV的VideoCapture类中的read()函数来获取连续的帧,作为下一步人脸检测的数据源。身份证上的人脸图像获取,需要用到身份证阅读机的接口文件,将与实验环境相符的64位IDR210的接口文件“Sdtapi.dll”复制到项目路径下,该文件是C++编译生成的DLL动态链接库,在Python语言中可用ctypes外部函数对DLL文件进行访问,调用方法为:ctypes.cdll.LoadLibrary(“Sdtapi.dll”),再调用接口文件提供的ReadBaseInfos()函数来获取二代证芯片中的姓名、性别、身份证号等文本信息;同时,身份证上的人脸图像会以“photo.bmp”形式存储在程序路径下,利用程序代码将其另存,命名规则为身份号.JPG,便于统一处理,系统读取效果如图2所示。

2.2 人脸检测

人脸检测是指在给定的图像中查找有无人脸,有则返回所有人脸框在图像中的精确坐标。人脸检测从20世纪60年代开始就作为计算机视觉领域的经典问题一直被研究。从时间跨度上可分为早期算法、AdaBoost框架、深度学习时代;从研究方法的角度可分为基于知识的方法、基于统计模型的方法、基于模板匹配的方法。[4]在轻量级系统中经常使用的人脸检测器有OpenCV的基于Harr[5]特征检测器与Dlib的基于HOG[6]特征检测器。

Dlib是一个现代化的C++工具箱,其中包含用于在C++中创建复杂软件以解决实际问题的机器学习算法和工具。包含机器学习、深度学习、图像处理模块,具有免费开源、使用方便等优势。其人脸检测与Harr检测相比,召回率更高,误检率更低,人脸框更准确,CPU上检测速度更快。

Python代码调用Dlib库实现人脸检测如表1所述,先获取人脸检测器,对灰度化后的图像进行检测,返回图像中所有人脸框的位置,参数(left,top)为人脸矩形框左上角坐标, (right,bottom)为人脸矩形框右下角的坐标。对单人图像与多人图像检测效果如图3所示。

表1 Python代码调用Dlib库实现人脸检测

图3 Dlib人脸检测效果

2.3 人脸校正

人脸校正是人脸特征提取前的预处理,将平面内倾斜的人脸变正,再进行人脸识别,识别效果将能得到极大提升。考生进场时虽然要求面对摄像头,但仍会采集到倾斜的人脸图像,系统需要对这部分人脸图像进行校正。校正的步骤有:

根据小波变换的原理,为了获得最优去噪质量,选取小波基函数时考虑其对称特点、紧支撑能力、正交性等原则[11],对比dbN、symN小波基,使用新阈值函数和引用的最优阈值规则,在不同分解层下,对模拟的高斯峰数据进行去噪,根据去噪后信噪比的评价指标,选择最佳的小波基和最合适的分解层数.

Step1:利用Dlib库的68个人脸特征点检测模型[7]获得当前人脸图像的关键点坐标,取双眼外眼角处坐标M1(x1,y1)、M2(x2,y2),分别对应检测结果中的第37、46坐标点;

Step2:求直线M1M2与水平线之间的夹角θ,其计算公式为:

(1)

Step3:利用OpenCV的getRotationMatrix2D()函数求得仿射矩阵,再用warpAffine()函数进行仿射变化,将人脸图像旋转θ度,得到校正后的人脸图像。效果如图4所示。

校正前 校正后

2.4 人脸特征提取

Dlib库的人脸特征提取,是在68个人脸特征点基础上,利用34层的残差网络 (ResNet[8])进行学习,得到人脸特征提取模型。ResNet34-layer是在普通平原网络的基础上,每两层间增加了短路连接(shortcut),构成残差块(residual block),其结构如图5所示。

图5 残差块结构

残差网络引入这种“捷径”解决了传统网络由于深度的增加导致梯度消失或爆炸问题,即网络功能随着网络深度的增加反而出现退化,残差网络其本质是解决了传统神经网络对于恒等映射的难以拟合问题。从数学角度来分析,残差单元可表示为:

yL=h(XL)+F(XL,WL)

(2)

XL+1=f(yL)

(3)

其中XL与XL+1表示网络中第L个残差单元的输入与输出,F为残差函数,表示网络学习到的残差,h为恒等映射,即h(XL)=XL,f为Relu激活函数max(0,X)。基于以上,可以递归求得浅层l与深层L的关系为:

(4)

假设损失函数为E,则反向传播公式为:

(5)

上式括号中的部分,它是1加上一个值,只要这个值不刚好为-1,那么梯度就不会为0,梯度会从L层向l层一直传递,神经网络的训练会变得有效,当网络深度变得非常深时,提取的特征会更高级、抽象。

Dlib库的“dlib_face_recognition_resnet_model_v1.dat”模型基于上述残差神经网络训练得到,系统加载模型后生成面部识别器,调用该面部识别器的compute_face_descriptor(img,shape)函数,参数img为灰度或RGB三通道人脸图像,参数shape为人脸68个特征点坐标,函数返回128维的人脸特征向量。

2.5 相似度计算

图像相似度计算主要用于对于两幅图像之间内容的相似程度进行打分,根据分数的高低来判断图像内容的相近程度。在人脸识别中,通常用人脸图像映射的特征向量之间的距离来衡量人脸的相似度。对同一个人脸图像来说,对应向量间的距离应该比较小;对不同的人脸图像来说,对应的向量间的距离应该比较大。

系统将上述人脸检测、人脸校正与人脸特征提取功能封装在一个函数中,参数为包含人脸的图像。利用该函数分别得到身份证人脸图像、学员报名图像的人脸特征向量,再用OpenCV打开摄像头,对拍摄的视频每隔30毫米取一帧图像进行人脸检测,将检测到的人脸图像转换为128维人脸特征向量。

128维人脸特征向量向量在程序中为形如(-0.111606,0.0982864,……0.0285877)的一组数值,用Xi(Xi1,Xi2,……Xi128)表示,X1、X2、X3表示三张人脸图像的128维人脸特征向量,用d(Xi,,Xj)表示两组人脸特征向量之间的空间距离,系统使用机器学习领域中的欧氏距离公式来计算,公式为:

(6)

Python求两个人脸特征向量之间的距离代码如表2所示,先将图像1与图像2的人脸特征向量转换为numpy的数组,便于快速运算,再使用numpy的square、sum、sqrt函数求公式(6)的值。

表2 Python代码调用numpy库实现向量距离计算

3 实验与分析

(1) 阈值K的取值测试

实验时先取一组100人的身份证照片与其报名照片,分别计算同一人的身份证人脸图像与报名图像的相似度,计算100次后,求得平均值为0.3414。其中少数几人的值较大,接近0.44,经分析为身份证办理时间较长,因脸部发胖而引起图像变化较大。再取另外一组100人的报名照片,分别与前面一组100人报名照片进行不同人脸相似度计算,计算一万次后,求得平均值为0.5384。取0.3414与0.5384的中间值0.44,作为系统判定阈值K的值。

(2) 系统运行时间测试

图6 人脸识别工作界面

经30次读卡实验,系统通过身份证阅读器读取身份证信息,再根据身份证号找到考生报名图像,最后在UI界面上显示两张图像的平均时间约为2.4秒。经200次人脸检测实验,对视频帧图像进行人脸检测、校正、特征提取,再求三张图像人脸特征值的空间距离均值,平均耗时约0.63秒。考虑现场操作时学员的取证耗时,预测顺利完人一人认证的时间约为6秒,考场按30人计算,采用本系统进行考生身份验证理论上只需3分钟。系统运行时效果如图6所示,系统会计算出三张图像人脸特征值向量间的平均距离,再与阈值比较,给出判定结果。

4 结束语

系统采用身份证阅读器读取考生身份证,解决了假证问题,使用人脸识别技术进行人证是否一致的判定,解决了替考者持考生真实身份证的问题。系统的核心是人脸检测、校正与特征提取,系统基于Dlib库已有模型实现,具有免费开源、开发快速的优势。在后继工作中将继续优化运算过程,提高系统验证响应速度。

猜你喜欢

身份验证特征向量身份证
二年制职教本科线性代数课程的几何化教学设计——以特征值和特征向量为例
都有身份证
克罗内克积的特征向量
一类三阶矩阵特征向量的特殊求法
据说最近流行晒身份证,各路大神都被炸了出来
声纹识别认证云落户贵州
趣说古人的“身份证”
人脸识别身份验证系统在养老保险生存核查中的应用
基于Windows下的文件保密隐藏系统的设计与实现
矩阵方法求一类数列的通项