赵志强,袁恩昌,张智雄
(桂林电子科技大学 数学与计算科学学院,广西 桂林 541004)
考勤是基础管理,是大学日常教育管理工作的重要环节,也是学风建设的根本。目前,大多数大学课堂缺勤现象逐渐严重,现有的大学考勤管理制度大多以课堂纸质点名、微信公众号签到来完成考勤,但是存在无法杜绝他人代替考勤,耗费人力与财力等缺点,基于指纹识别的考勤虽然杜绝了代替考勤的发生,但是不卫生,且对于指纹破损等情况不能准确便捷识别。随着人脸识别技术的快速发展,基于人脸识别的考勤系统具有高效率、高准确度,可快速反应学生的出勤、缺勤情况,使出勤管理更加便捷、透明。
目前,存在许多不同技术的人脸识别考勤系统,例如,在人脸特征提取模块中采用了主成分分析的技术和系统整体采用Java语言编写,调用face++平台提供的Search API函数进行人脸识别。两者的系统都可以完成基本的人脸考勤功能,但是实现起来相对复杂。本系统调用dlib库中已极其成熟的人脸检测与识别技术,不需要极为复杂的代码即可完成人脸考勤功能,且采用了轻量级,无服务器,零配置的SQLite数据库来完成考勤数据及人脸特征信息的存储。
本文设计了一个人脸识别考勤系统来实现高校对学生的课堂考勤管理,本系统以人脸识别技术为基础,采用python开发语言、dlib第三方库、SQLite数据库来实现,经过调试与实验,考勤准确率符合预设要求且可高效完成考勤功能。
人脸识别是一种通过对静态或者动态图像进行人脸检测,检测出人脸后采集用户面部信息,提取人脸数据特征进行量化处理,再将处理后数据与人脸数据库进行匹配对比,从而完成身份识别与鉴定的一项技术[1],其具体技术流程如图1所示。
图1 技术流程
(1)人脸采集与检测:通过人脸检测技术对动态或者静态图像检测人脸所在位置与尺寸大小,从而获得面部信息。人脸检测的准确性对后续技术有着重要影响。
(2)人脸图像预处理:在获得人脸信息后,需要对图片进行必要的处理,从而使图像中的人脸特征更加明显并减少外部环境的影响,同时提高人脸识别的准确性。目前人脸预处理可以通过直方图均衡化、灰度化变换、二值化处理、几何校正等来实现。
(3)人脸图像特征提取:将人脸图像转化成一个多维向量,把人脸信息转化为特定数值进而来表示人脸的不同。目前可以通过人脸几何特征、代数特征、特征脸、云纹图等方法来提取出人的面部特征。
(4)人脸图像匹配与识别:通过人脸识别模型对待测对象特征值与数据库中已存储的人脸特征进行逐个匹配,当相似度大于设定的阈值时,确定为识别成功,并输出该对象的信息[2]。
本系统界面有菜单栏和图像采集区组成,系统界面右部分区域用于显示加工后的视频流信息,左区域做控制台输出、打印相关信息,比如显示学生面部信息添加成功、添加失败,显示学生打卡成功、打卡失败及打卡时间。系统的操作流程如下:运行程序后,学生首次登陆时需要通过菜单栏进行信息与人脸录入,录入信息后可以通过刷脸签到按键进行日常的考勤打卡,同时考勤结束后,系统会在考勤日志区显示出学生的考勤具体情况。具体工作原理如图2所示。
图2 工作原理
本系统主要分为4个模块:注册信息、人脸信息录入、实时考勤、考勤日志查看。注册信息是学生需要在首次使用时录入自己的班级、姓名等信息;人脸信息录入是学生录入自己人脸信息,系统通过人脸检测与人脸特征提取技术将该学生的人脸信息储存到本地数据库中;实时考勤是学生进行自己日常考勤打卡;考勤日志是对学生考勤情况的记录。功能结构图如图3所示。
图3 功能结构
本系统采用python语言,该语言易于维护、可移植、可扩展,可以提供所有主要的商业数据库的接口,数据库采用SQLite,人脸检测与人脸识别采用dlib库中官方提供的已经训练好的人脸关键点检测器与ResNet人脸识别模型[3]。
数据库:SQLite是一个进程内非常小的、轻量级的数据库,可以在UNIX与Windows中运行,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。人脸检测:本系统所使用的是dlib库中提供的人脸检测,dlib中使用的是HOG(histogram of oriented gradient)与级联分类器[3]的算法,其算法的实现过程如下。
(1)将检测的目标或扫描的窗口灰度化,目前图像灰度化处理有分量法,将三个灰度图像的灰度值用彩色图像中的三分量的亮度来代替,可根据需要选择一种灰度图像,公式为:
(1)
最大值法,即将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。公式为:
Gray(i,j)=max{R(i,j),G(i,j),B(i,j)}
(2)
平均值法,即将彩色图像中的三分量亮度求平均得到一个灰度值,公式为:
Gray(i,j)=(R(i,j)+G(i,j)+B(i,j))/3
(3)
加权平均值法,即根据重要性及其他指标,将3个分量以不同的权值进行加权平均,公式为:
Gray(i,j)=x*R(i,j)+y*G(i,j)+z*B(i,j)
(4)
其中x+y+z=1。
(2)通过采用Gamma校正法对输入图像进行颜色空间的标准化,Gamma压缩公式为:
I(x,y)=I(x,y)gamma
(5)
计算图像梯度,图像中像素点(x,y)的梯度为
Gx(x,y)=H(x+1,y)-H(x-1,y)
Gy(x,y)=H(x,y+1)-H(x,y-1)
(6)
式中Gx(x,y),Gy(x,y),H(x,y)分别为像素点的水平方向梯度,垂直方向梯度和像素值,像素点的梯度幅值与梯度方向为
(7)
将图像划分成小的单元格形成每个单元格的梯度直方图,目的是给局部图像区域提供编码,同时能够保持对图像中人体对象弱敏感性[4]。
将单元格形成一个块,并进行归一化梯度直方图,梯度强度会随着局部光照以及背景对比度的变化而变化,此时需要对梯度强度做归一化处理,归一化能够对光照和阴影进行压缩。生成HOG特征向量,收集图像中重叠块的HOG特征,并将它们形成最终的特征向量供分类使用。
人脸特征标记:本系统使用人脸landmark标记,landmark是一种人脸部特征点提取的技术,使用dlib库中shape_predictor_68_face_landmarks.dat,对人脸进行68特征点检测,供特征提取网络使用,人脸68特征点标记如图4所示。
图4 人脸68特征点标记
人脸特征提取:使用dlib库提供的深度残差神经网络ResNet输出人脸128特征向量,其工作原理如图5所示。
图5 特征提取工作原理
人脸识别:通过使用dlib中已经训练好的ResNet模型获取特征向量之后使用欧式距离与本地的人脸特征向量进行匹配,使用最近邻分类器返回样本的信息。欧式距离公式为:
(8)
系统的算法实现分为4步:(1)在数据库中建立学生表,考勤信息表来记录学生的基本信息与考勤结果。(2)调用dlib库中shape_predictor_68_face_landmarks.dat人脸68关键点检测器及dlib_face_recognition_resnet_model_v1.dat人脸识别模型将学生人脸特征值存入数据库[5]。(3)当学生通过界面中的刷脸考勤按键进行考勤时,系统再次根据人脸识别模型和人脸关键点检测器,计算出待识别人脸特征值;系统会计算出待识别人脸特征值与本地数据库中人脸特征值的欧式距离,将最小距离的学生信息显示在考勤日志中,同时记录该学生考勤时间并写入数据库。(4)在界面上输出考勤信息[6]。
本系统使用了目前很成熟的人脸检测与人脸识别算法进行系统的设计与实现,保证了该系统的可靠性,解决了当前高校课堂考勤存在的工作量大,耗费财力,物力等诸多问题,节约了课堂时间,提高了教学质量。经过反复的实验与调试,本系统能高效、准确地进行人脸识别考勤。