一种复杂光照条件下人脸识别签到系统的设计
2021-06-29宁波开放大学周敏维
宁波开放大学 周敏维
考勤是人力资源管理的重要组成部分,而签到是人们在日常办公、学习场所中最常用的考勤方式。传统的纸质签到会消耗许多笔墨和纸张,且容易被模仿。随着科技的发展,各种基于自动识别技术被引入到日常签到中。其中,人脸识别技术作为人类辨认同类最直接的方式,也最易被用户接受,成为了目前签到中身份验证最理想的依据。
近年来,人脸识别技术越来越成熟,很多新的人脸识别算法也被提出来。但是在某些场景应用中,这些算法还不能完全适应。例如,对光照变化的耐受性差、人脸姿态变化时的识别率低、人脸数据库用户过多时的图像搜索与匹配灾难、人脸被遮挡时的不可识别(口罩)、孪生问题、人脸面具问题、长时间的深度学习等复杂问题。
基于上述问题,本文提出一个基于树莓派(ARM-Linux)的人脸识别签到系统解决方案,通过对现有的人脸识别技术的改进,在较低的成本下,改善传统人脸识别中光线变化影响识别成功率的问题,以及改善代签问题。
1 系统硬件设计
整个系统硬件由核心运算模块、图像采集模块、GUI显示模块以及用户操作模块四部分组成,系统硬件整体框图如图1所示。
图1 系统硬件整体框图
核心运算模块采用Raspberry Pi4B作为嵌入式硬件基础,并内嵌Raspbian操作系统系统。Raspberry Pi4B的核心微处理器采用博通1.5GHz的四核ARM Cortex-A72,搭载了4GB内存,并引入USB3.0接口,同时支持双屏4K输出和H.265硬件解码。Raspbian是一款面向ARM基于Debian的Linux系统,通过优化在Raspberry Pi上具有极好的的兼容性。
图像采集模块采用Logitech C170摄像头。这款摄像头采用500万像素的CMOS感光元件,支持XVGA(1024×768)分辨率视频,可通过自带的驱动直接与树莓派连接。用户操作模块采用Logitech MK245 Nano蓝牙鼠标键盘,支持Linux系统,可以直接通过USB蓝牙接收器与树莓派连接使用。GUI显示模块采用7寸的LED显示屏,分辨率为1024×600,可直接通过HDMI接口与树莓派连接。
2 人脸检测算法及人脸识别流程
2.1 OpenCV人脸检测算法基本原理
OpenCV库提供的目标检测方法是一种高效的基于“Haar级联分类器”的目标检测法,通过构建基于大量正负面图像训练的级联函数来检测图像中的被检对象。OpenCV库支持开发者训练自己的目标检测分类器,但是这需要大量的正面负面图像去训练,非常耗时,且自己训练的分类器常常出现不稳定的检测问题。所幸,OpenCV库也提供了训练好的人脸级联分类器。本设计使用的是OpenCV提供的haarcascade_frontalface_alt.xml人脸分类器,其算法的原理描述如下:
(1)Haar-like特征
Haar-like特征包括边缘、线性、中心三大特征,若将其分别表示为黑白两色的矩形,则可将Haar特征值定义为黑白两形像素之差,即灰度值的分布情况。所以,每个物体都有自己的特征值矩阵,人脸也是如此。
图2 级联分类器训练模型
图3 系统软件整体框图
(2)图像积分图
为了提高Haar-like特征值的计算速度,图像积分法正式出现。如果没有图像积分法,由于运算速度的限制,实时人脸检测将无法实现。
不同于在Haar-like算法的训练和检测中当前子图像特征值都要被不断重复计算,利用积分图算法求出的图像中,只需要遍历一次得到所有区域像素之和,算法的效率的到了极大地提高。
(3)AdaBoost算法
AdaBoost算法是一种基于级联分类器模型的级联算法,可以在Haar-like特征上构建多个简单分类器,使系统可以不断地加入新的弱分类器。具体过程如下:首先基于Haar-like算法得到许多弱分类器,在每次运算的过程中给予每个弱分类器不同的权重值(权重值的大小取决于样本是否已被准确分类)。然后这些不同权重的分类器都会用于下一次的分类器训练,整个过程不断迭代。最后,若干个训练后的弱分类器就可以组合成一个强分类器。而这些强分类器就可以组成一个级联分类器。级联分类器训练模型如图2所示。
2.2 人脸识别流程
本系统基于Python编程语言,采用OpenCV库提供的人脸特征法进行人脸识别,并对所有人脸图像增加一个预处理的过程提高人脸识别稳定性,在一定程度上解决光照变化问题。系统主要程序包括人脸信息录入、人脸信息预处理、人脸信息训练、签到记录的读写四个部分,软件整体框图如图3所示。
(1)人脸信息录入
人脸录入模块的主要功能是录入新的用户信息和对应的人脸图像。本系统使用OpenCV提供的人脸检测器进行人脸分类器,实现这个功能的主要函数是cv2.CascadeClassifier(),其输入变量haarcascade_frontalface_alt.xml是OpenCV库提供的预先训练好的人脸分类器。
录入正式开始时,系统首先会以60帧的速度调用摄像头模块去不断地抓取实时影像中的人脸,当分类器检测到人脸时,系统会用矩形框把人脸部分框起来,而这个矩形框内的图像将被转化成灰度图并通过分类器函数cv2.imwrite()保存到数据文件夹中。人脸录入需要抓取60张照片,如果这个参数过大,人脸录入时间和训练时间都会增加,参数如果过小,则会影响人脸识别的准确率。经过测试,当参数为60时,可在30s内完成人脸录入,且能保证较高的人脸识别成功率。
(2)人脸信息预处理
当保存够60张人脸图像后,系统需要对这60张图像照片进行预处理。这一步预处理是系统解决光线问题的关键。预处理的过程主要分为两步:第一,随机生成一个-60到60的随机数(这个范围是多次调试后选择的结果);第二,调整保存的灰度图的明亮度,即把图像中所有像素的灰度值加上一个刚才生成的随机数。整个过程就是对60张的照片都做这样的预处理,使这些照片呈现出不同的明亮度,这样的图像在训练使就可以使模型在不同的明暗度下进行识别,从而提升模型在不同光照条件下的准确性。
本设计采用的方法主要基于分类器函数cv2.convertScaleAbs()。这是一个位深转化函数,可将任意类型的数据转化为8位无符号整型单通道矩阵。函数中的参数包括缩放因子alpha和增量beta,可以在转换数据类型的同时控制图像(目标矩阵)的对比度和明亮度。该函数可在1s内进行大量图像的转换操作,且可以很好地适应灰度图的处理,所以本设计在预处理过程中使用此函数,而不是用传统方法,在3重for循环中修改像素RGB值。函数的具体操作过程可用下面的公式表示:
(3)人脸信息训练
人脸训练模块的功能是训练人脸识别器。在这个模块中,通过特定的OpenCV内置函数将所有的用户面部图像用于OpenCV人脸识别器的训练工作并将训练的结果保存。
其中一个重要函数是由OpenCV提供的LBPH人脸识别器,实现这个功能的主要函数如下:
recognizer=cv2.face.LBPHFaceRecognizer_create()。
(4)签到记录
签到模块的功能是通过人脸识别判断出正在签到的用户信息,并保存用户的签到时间和签到画面。
在人脸识别环节,利用OpenCV提供的专用函数recognizer.predict(),通过输入待检测的人脸信息,可得到被检测人脸可能匹配的id以及该id被匹配的置信度(如果完全匹配,置信度为零。)
然后,设匹配成功值=100-confidence(置信度指数),如果识别器返回的匹配成功值大于等于40,则会显示出用户的姓名和匹配成功值;如果系返回的匹配成功值小于40,则会显示“unknown”。系统需要持续识别出用户人脸2s以上才能签到成功。签到成功后,系统会显示“Hello,‘用户名’”,持续3s,然后重新启动签到功能。
3 系统测试
3.1 识别正确率和签到成功率测试
通过搭建硬件系统和运行环境,实现了人脸识别签到系统的设计,其运行界面如图4所示。为测试系统的识别正确率和签到成功率,预先保存了10位学生的人脸信息,然后让10位学生随机进行了50次签到。其中,有43次正确识别出了学生的身份,识别正确率为86%;49次能够在5s内签到成功,签到成功率为98%。
图4 程序运行界面图
3.2 图像预处理效果调试
调试里图像预处理的实际效果时,首先测试没有预处理过程的识别情况,再测试加入预处理过程的识别情况。具体设置方案如下:
对于没有预处理过程的识别情况,首先删去系统的预处理过程,在亮光条件下录入人脸,分别在亮光条件和暗光条件下识别;然后同样不加入预处理过程,在暗光条件下录入人脸,分别在亮光条件和暗光条件下识别。
对于加入预处理过程的识别情况,首先在亮光条件下录入人脸,分别在亮光条件和暗光条件下识别,然后保留预处理过程,在暗光条件下录入人脸,分别在亮光条件和暗光条件下识别。
识别置信率测试结果如表1所示。
表1 识别置信率测试结果
由表1可见,如果不加入预处理过程,在同样的光照条件下,系统可以正常识别,但是如果光照条件变化时,识别率会大大降低,有时甚至无法识别出用户信息。如果加入预处理过程可以大大增加系统在各种光照条件下的识别成功率,尤其是在亮光录入、暗光识别的情况下的识别成功率,使系统可以在一天24h光照条件变化的情况下正常使用。预处理过程测试结果良好,符合预期效果。
结束语:本文描述了一种基于ARM-Linux的人脸识别签到系统的设计方案,其重要特点是尝试用图像预处理的方法解决光照条件变化下的人脸识别问题。预处理过程主要是给予所有抓捕的面部图片不同的明亮度,使系统适应不同亮度下的人脸图片,以提高系统在光照条件变化下的识别稳定性。这样的人脸识别签到系统不仅可以大大提高用户的签到效率,还能保证较高的环境适应能力,具有较高的稳定性,使用户有更便捷、更安全的签到体验。同时,本系统具有计算量小、安装简便、成本低等优点,并且使用的树莓派开发板可以进行很多额外的功能拓展,在原有的系统上有着极大的提升空间,具有较强的实际使用价值。
在防止“代签”问题上,传统的解决方法主要有给系统增加红外测温模块或双摄像头识别3D人脸模型,但这些方法都需要较高的经济预算。本设计在保持低成本开发的前提下,只能从功能策划的角度去解决这个问题。本设计的解决方法是,保存每次签到时的图像,这样在检查签到记录的时候,就可以发现哪些签到是正常签到,哪些签到是图片视频代签,从提供人工检查途径的角度解决了“代签”问题。
为进一步完善签到系统的功能,后期拟通过树莓派良好的无线网络接入能力引入数据远程查询功能,并利用树莓派强大的计算能力增加数据分析功能。