刘 杰, 孙立民
(烟台大学 计算机与控制工程学院, 山东 烟台 264005)
近年来,建立和健全会议考勤制度是当下大部分企业和相关单位所关注的,因为一套完整的、行之有效的会议考勤制度不仅有利于企业管理者更好地去管理企业的职工,而且对于职工个人来说,一套完善的会议考勤也能够对其自身起到约束作用,从而使企业和相关用人单位得到良好的发展[1-2]。会议考勤是企业召开会议的一个重要组成部分,考勤效率能够影响到会议的整体效果。传统的会议考勤主要通过手动签到的方式来实现,但这种方式往往会浪费大量的时间,不仅占用了宝贵的会议时间,考勤效率较低,还影响了与会人员的热情和积极性。代替传统人工考勤的是电子化考勤,与会人员可借助带有个人身份信息的IC卡以刷卡的方式进行签到考勤[3],这种方式比传统的手动签到考勤更加地自动化,但是,对于代签和早退现象,却不能够及时地做出识别。
随着科学技术的发展,虹膜识别技术出现了,虽然该技术具有较高的安全系数,但是该技术具有设备昂贵、成本高、特征图像不方便采集等特点[4-5],而且与传统考勤方式相似,同样不能对会议的考勤情况做到实时监控,早退、缺勤等问题依然得不到有效的解决。
本项目开发的基于人脸识别技术的考勤系统不仅可以提高考勤效率,使考勤人员摆脱繁重的工作任务,而且实施方便,更具自动化和人性化;此外,可以有效地解决代签和早退问题,弥补上述考勤方式的不足之处。
该系统由会议室里安装的云平台摄像机捕捉与会人员的图像,并将其发送给后台人脸识别系统进行处理和识别。在后台,服务端按照一定的时间间隔从会议室监控视频中捕获与会人员的图像,并对图像进行预处理,再对图像中的人脸进行人脸检测,此后由系统对检测到的人脸图像做人脸识别,最后根据识别结果在数据库中录入与会人员的出勤情况。
该系统主要由4个模块组成:与会人员人脸图像信息采集模块、人脸检测模块、人脸识别模块和会议考勤管理模块。系统的设计架构如图1所示。
图1 系统功能图
在员工入职时需要采集员工信息,包括员工的工号以及人脸图像等,然后将采集到的人脸图像预处理后保存至员工人脸特征数据库中。当进行会议时,把会议室捕获到的监控视频上传至人脸识别系统,利用OpenCV将视频处理成每一帧图像,并对处理后的图像做人脸检测和人脸识别,将识别结果记录在数据库中,以此来统计出会议考勤信息。在会议开始后,整个系统将自动启动考勤流程进行人脸识别,自动获取考勤记录,节省了传统签到等方式所浪费的时间,此外,系统每隔一定时间间隔就将监控视频上传至人脸识别服务端,这就能够自动判别早退等虚假情况的出现。
人脸识别是一种提取人脸图像特征信息进行分类识别的生物特征识别技术。由于其方便、友好,随着信息技术的发展,在安全、航天、医疗等领域得到了广泛的应用[6]。Viola等人[7-9]提出的结合AdaBoost级联分类器的Haar特征可以快速检测人脸。从那时起,许多研究者致力于使用更高级的特征来提高人脸检测的准确性,如局部二进制模式(LBP)[10]、方向梯度直方图(HOG)[11]、尺度不变特征变换(SIFT)[12]。人脸识别已成为计算机视觉领域的研究热点。
深度学习主要是神经网络算法的扩展。神经网络的层是由深度来描述的,利用深度学习多层感知器可以解决线性不可分的问题[13],针对浅层学习的弊端可以得到有效的弥补。深度学习的常见类型有循环神经网络、卷积神经网络和受限玻尔兹曼机[14-15]。
整个系统通过强大的计算机视觉开源工具包OpenCV和深度学习主流框架TensorFlow相结合的方法实现系统核心模块人脸检测和人脸识别功能。此外,还通过Kurento媒体服务器完成了视频传输部分的功能,Kurento媒体服务器具有基于插件的可扩展体系结构,能够与深度学习框架完美契合,可用于计算机视觉、增强现实、视频索引和语音分析等[16],不需要第三方插件,可降低开发和维护成本,便于维护工作。
系统整体采用B/S结构设计,考勤管理人员通过浏览器登录系统查看与会人员的考勤信息,相比较C/S,这种设计更具安全性、且方便升级和维护。系统的网络架构设计,如图2所示。
图2 系统的网络架构设计
由图2分析可知,人脸图像采集模块是系统的数据采集层,这一模块的主要功能是采集人脸信息并将每一张人脸图像做标签后存入本地数据库中;人脸检测和人脸识别模块共同构成了整个系统的服务层,在这一层使用OpenCV这一强大的计算机视觉开源工具包做人脸检测,使用卷积神经网络来实现人脸识别;会议考勤管理模块是系统的呈现展示层,这一层的主要功能是将服务层的识别结果通过浏览器显示到Web界面,管理员可以通过登录该系统实时查看会议的考勤情况;最后,系统的数据层的功能主要是存储人脸图像信息以及部分监控视频信息,可以起到存储备份的作用。
当员工入职时都会在公司或者单位录入个人信息,包括工号、姓名以及人脸图像等,本系统将这些采集好的人脸图像存储到人脸图像特征库中,根据个人工号给采集到的人脸图像做手动标注,从而实现会议考勤的人脸特征识别库。
会议室内智能云台摄像机可以全景采集和周期性地巡航,通过对室内环境的全方位覆盖,从而实现对会议室内与会人员的人脸图像抓取。系统每隔一定时间间隔将通过云台摄像机捕获一段实时视频上传至人脸识别服务端,采用这种方式,系统可以自动辨别出缺勤或者早退现象,从而得到较为真实考勤记录。
在这一部分,采用OpenCV这一开源的计算机视觉工具包来对从视频流中分割出的帧图像进行人脸的检测。首先通过调用VideoCapture函数来进行视频流到多帧图像的处理,使用dlib工具包中的frontal_face_detectorh函数作为本次研究的特征提取器,然后实现图像中的人脸检测功能。
本模块是整个系统的核心部分。该模块主要功能是识别人脸检测模块中检测到的人脸图像。首先对上一模块检测到的人脸图像做归一化处理,接下来提取这些人脸图像的特征并与考勤人脸图像特征库逐一进行比较,就可以识别出其身份,同时在会议考勤管理系统中记录下相关的出勤情况,人脸识别模块的设计流程如图3所示。
图3 人脸识别流程图
该模块采用的是深度学习中的卷积神经网络实现的人脸识别的功能。卷积神经网络(Convolutional Neural Network,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks)[17-18],是深度学习(deep learning)的代表算法之一。卷积神经网络主要由输入层、卷积层、池化层、全连接层和输出层组成,卷积神经网络的典型结构如图4所示。
图4 卷积神经网络的结构图
在这一部分当中,通过5个步骤来搭建研究需要的卷积神经网络,对此可阐述分述如下。
步骤1先把数据加载到内存,即将图片预处理之后的图片集以多维数组的形式加载到内存,并且为每一类样本数据标注标签值。
步骤2划分数据集,即按照交叉验证的原则划分数据集、验证集、训练集。交叉验证是机器学习中常用来精度测试的一种方法,使用大部分数据作模型训练,少部分数据用于模型验证,验证结果与真实值计算出差平方和,以上过程重复进行,直至差平方和趋于0,模型稳定,训练完毕。而在此模型中,导入了sklearn库的交叉验证模块,将会利用train_test_split()函数来划分训练集、验证集和测试集。train_test_split()函数中的test_size参数用来指定划分的比例,另一个参数random_state是用来指定一个随机数种子,从全部数据中随机选取数据建立自己的数据集、验证集和训练集。
步骤3采用one-hot编码,因为本次研究的卷积神经网络采用了categorical_crossentropy作为本文的损失函数,而这个函数要求标签集必须采用one-hot编码。one-hot编码是一种状态位编码,one-hot采用状态寄存器编码,每一个状态值对应一个寄存器,且任意时刻,只有一位是有效的。假设,研究中的类别有2种,分别为0和1,0代表自己,1代表others。如果标签为0,编码为[1 0]表示的是第一位有效;如果标签为1,编码为[0 1]表示的是第二位有效。这样做的原因是为了方便CNN操作。
步骤4归一化图像数据,目的是提升网络收敛速度,减少模型的训练时间,同时适应值域在(0,1)之间的激活函数,增大区分度。此外,还能够确保特征值权重一致。
步骤5确定优化器,在最开始使用的是SGD优化器,SGD优化器随机梯度下降算法参数更新针对每一个样本集x(i) 和y(i) 。批量梯度下降算法在数据集规模较大时会产生大量的冗余计算,比如:每次针对相似样本都会重新计算。这种情况时,SGD算法每次则只更新一次。因此SGD算法效率更高,并且适合online。但是SGD以高方差进行快速更新,这会导致目标函数出现严重抖动的情况。虽然抖动可以让梯度计算跳出局部最优,最终到达一个更好的最优点;但另一方面,SGD算法也会因此产生过调。之后改进使用了Adam,Adam算法是另一种自适应参数更新算法,能够规避SGD算法的不足。
至此,通过多次修改batch size、迭代次数等参数更新权重,找到损失函数的最优解,使得训练出来的模型测试样本数据的准确率达到初期设定的阈值,模型训练结束后会在本次研究的项目根目录下生成一个后缀为data的文件,这就是训练出来的模型,最后通过读取这个文件,加载模型,进行人脸识别。
本模块是整个系统的最后一个部分。在使用人脸识别进行会议考勤时,系统将检测到的与会人员人脸图像特征与对应的人脸图像特征库特征逐个自动进行比较验证,并在服务器上的考勤登记管理中登记与会人员的出勤情况。识别出的人脸将登记为出勤,没有识别到的人脸将登记为缺勤,把所有人员的出勤情况记录到表格中以Web界面展现给考勤管理人员,方便工作人员及时掌握会议的考勤情况。
本模块对所开发的基于人脸识别技术的考勤系统的各项功能进行验证。这里给出研究论述详情如下。
将摄像机采集到的人脸图像标注后存储到指定文件夹中。研究时,采集了15个人的人脸图像以及从人脸识别领域知名数据集LFW上选取了部分人脸图像组成了系统的样本数据集,效果如图5所示。
每一类样本采集了180个人脸图像共同构成了系统的样本数据集,效果如图6和7所示。
图5 样本数据集类别图
图6 单样本数据集1
图7 单样本数据集2
在采集人脸图像过程中,研究时随机增加了光照强度的变化,使得样本集更具表征能力,进而提高模型的鲁棒性和泛化能力。
深度学习框架TensorFlow提供了一个可视化工具TensorBoard,通过TensorBoard不仅可以更好地管理、调试和优化神经网络的训练过程,而且可以可视化神经网络模型训练过程中各种指标的变化趋势,直观地了解神经网络的训练情况。可视化效果如图8和图9所示。
图8 模型训练准确率曲线图
由图8、图9分析后可知,利用TensorBoard能够查看到训练时的人脸识别准确率和损失曲线,而通过这些曲线图推理可知模型训练的准确率达到了96.3%。
人脸识别系统准确性测试结果见表1。
图9 模型训练Loss曲线图
表1 人脸识别模块测试结果
Tab. 1 Test results of face recognition module
测试序号样本容量正确识别人数准确率/%1161487.502161593.753151493.334151386.675151493.33总计777090.91
本文基于人脸识别技术实现了会议考勤系统。相对于传统签到考勤系统,本系统有着实时性、稳定性等优势,并成功研发出自动识别、自动考勤等功能,解决了传统签到考勤流程复杂、耗费时间、不能识别代签以及缺勤早退现象等问题。
此外,整个系统是B/S架构,相较于C/S架构设计,在系统维护方面不仅开销小,而且升级也很方便,这能够极大降低维护成本;基于浏览器的B/S架构设计还具备业务扩展简单方便,通过增加网页即可增加服务器功能等优势。
对仿真实验结果研究分析可知,由于人脸图像在采集过程中发生的抖动、光照、以及表情变化等,导致图像模糊或者图像不完整造成了误识别现象,如何解决此类现象的发生,提高整个系统在非限制条件下人脸识别的准确率将会是下一步研究工作的重点。