当前位置:首页 期刊杂志

基于深度学习的人脸识别会议考勤系统开发

时间:2024-05-04

徐建峰,孙浩,陆萍,董虎胜

(苏州经贸职业技术学院,苏州 215009)

0 引言

考勤签到是企事业单位日常管理的重要组成部分,当前常用的考勤方式有签名、点名、刷卡签到、指纹识别等。其中签名与点名的效率很低,数据统计汇总也相当麻烦;采用刷卡的方式需要额外携带磁卡;采用了生物特征识别技术的指纹签到仍存在可被复制的问题。与上述考勤签到方式相比,人脸作为人的另一种生物特征,具有很强的外观稳定性与个体差异性,是实现身份验证的最理想的方式,考勤时也无需携带其他额外物品,具有方便、直观、易于普及等优点。

本文基于深度卷积神经网络设计开发了一款人脸识别会议考勤管理系统,该系统采用了多任务卷积神经 网 络(Multi- Task Convolutional Neural Network,MTCNN)[1]+深度残差网络(Residual Network,ResNet)[2]的人脸检测与识别模型,使用OpenCV 对视频流数据进行处理,实现了对单位部门、员工、会议、参会等信息的管理,能够方便地进行人脸注册、人脸识别、考勤签到与数据汇总处理等工作,能够有效地满足小型单位或部门的会议考勤需求。

1 系统总体设计

本文设计开发的人脸识别会议考勤签到系统采用了PyQT 开发图形用户界面,使用了第三方包Py⁃MySQL 连接MySQL 数据库实现人员、会议及考勤信息的存储与检索,在人脸识别模块中使用了MTCNN 与ResNet 实现了多人实时人脸检测与人脸识别,在考勤记录分析与数据导出时分别使用了QtChart 与xlswings第三方库。

人脸识别会议考勤系统由人员管理、会议管理、人脸识别考勤、考勤记录统计分析四个主要模块组成。其中人员管理模块除了实现对员工编号、姓名、部门、职务等人员基本信息的管理外,还包括人脸图像注册、部门与职务的管理等功能;在会议管理模块中可以对会议进行安排,主要包含会议时间、会议时间、会议地点、会议主题与参会人员等信息;人脸识别考勤模块的主要功能是调用人脸识别引擎从摄像头捕捉到的视频流中识别参会人员的身份,同时记录考勤时间信息;在考勤记录统计分析模块中,能够根据指定的日期范围检索出个人、部门与单位全体人员的出勤信息,并自动绘制出相关的统计分析图表。

2 主体功能的实现

在工作流程上,考勤管理员登录系统后需要首先录入本单位各部门信息、职务信息及工作人员的基本信息,在注册人脸图像时即可以通过摄像头现场拍摄一张正面照片,也可以使用员工提供的指定大小的电子版个人证件照。系统在每次启动时都将会检测注册员工的照片信息,如果发现有员工没有照片将会弹出警告信息。在员工信息录入后,考勤管理员即可安排会议,设置会议时间、主题、地点与参会人员,系统将自动为每个参会人员添加待参会的记录,参会人员可在系统参数设置的考勤时间范围通过刷脸完成签到,系统会自动实现考勤记录的添加。

2.1 人脸检测

人脸检测是对人脸进行识别与处理的基础,其目标是从视频流中检测并定位出人脸图像,返回人脸边界框(Bounding box)坐标及人脸特征点的坐标。本文选用了当前使用比较广泛的MTCNN 网络作为人脸检测的模型,MTCNN 不仅能够检测出画面中的人脸,还具有人脸对齐的功能,能够帮助寻找出人的眼睛、嘴与鼻子位置。MTCNN 中含有 P-Net、R-Net 和 O-Net 三层级联的网络结构。一层都在对输入作卷积运算处理后进行边界框回归(Bounding box regression)与非极大值抑制(Non-Maximal Suppression,NMS)处理,在经过P-Net 处理后获得 24×24 大小的特征图(feature map);然后送入第二层R-Net 网络获得48×48 大小的特征图;最后通过第三层O-Net 处理后获得人脸边界框及面部标签输出。MTCNN 中 P-Net、R-Net 和 O-Net 的具体网络结构如图1 所示。

MTCNN 网络接收的输入是将原始图像作不同尺度缩放后获得的图像金字塔,这样的处理有助于在NMS 阶段丢弃掉一些响应值不够高的内容。在P-Net网络中,主要负责快速粗略地检测出一些可能会出现人脸的候选框,R-Net 网络对这些候选框进一步检测并排除掉一些置信度比较低的对象,最后通过O-Net生成精确的候选框与位置坐标。在损失函数的选择上,由于人脸检测可归属为一个二分类问题,MTCNN在人脸检测中采用了交叉熵损失函数,而在人脸边界框回归与关键点坐标检测中采用的都是欧氏距离损失函数,最后根据将每个阶段中的损失函数进行加权组合获得总的损失函数。

在人脸识别会议考勤系统的开发中,采用了在WIDER_FACE[3]数据集上已经训练好的 PyTorch 模型。在使用OpenCV 捕捉视频帧后,为了提升检测效率,采用了将视频帧缩小至原尺寸的1/4 再检测的策略,系统在运行时基本上达到实时检测的性能。

2.2 人脸识别

在从视频流中检测出人脸后,需要进一步给出该人脸图像的标签,即根据人脸识别出该员工的姓名及其他相关信息,本文采用了ResNet 从人脸图像获得特征表达向量并进行匹配。ResNet 网络采用了如图2 所示的一种“短路”的形式将网络的输入与输出相加,实现了对输入内容的重用。若将网络输入设为x、某一网络层为H,以x作为输入后该层的输出为H(x) ,ResNet 在输出时采用作为下一层的输入。这样的处理能够有效地抑制随着网络加深所带来的梯度弥散与梯度爆炸问题,获得图像更为抽象的特征表达。

ResNet 中的残差块有图2 所示的基本块结构与被称为“Bottleneck”的块结构两种,与基本块结构相比,Bottleneck 块结构中将两个3×3 的卷积层替换为1×1+3×3+1×1 的结构,首先通过 1×1 的卷积降低了通道数,减少了运算量,在通过3×3 卷积后再使用一个1×1 卷积实现通道数的还原,在减少计算量的同时保持了精度。

本文在人脸识别模块选择了dlib 库中已经训练好的ResNet 模型接口,该接口接收人脸图像后将其首先缩放为224×224 的大小,通过前向运算返回一个128维的人脸特征向量。由于在系统中已经保存了所有员工的人脸图像,可以使用ResNet 模型接口提取这些图像的特征向量并存储在文件中。在人脸识别考勤阶段,只需要在从视频帧中检测到的人脸图像提取特征向量,与载入的特征向量计算欧氏距离即可实现匹配识别,本文采用最近邻分类器返回的标签作为视频中人脸图像的标签。

2.3 其他模块的开发

在人脸识别会议考勤系统其他模块的开发中采用了模型-视图-控制器(Model View Controller,MVC)开发模式。其中模型对象(Model)负责在数据库中存取的数据,在本系统中主要涉及员工、部分、职务、会议、参会等对象,在开发时他们均被封装为实体类,各个属性变量与数据库中的字段一一对应。视图(View)对应于应用程序中数据的展示,在本系统中采用QT 实现各个GUI 窗口。为了便于使用Python 开发,在开发各个模块时首先采用了QtDesigner 首先完成控件的布局,然后使用uic 将获得的.ui 文件编译为.py 文件。控制器(Controller)负责从视图读取数据控制用户输入并向模型发送数据,在本系统的开发中,只需要引入编译为.py 文件的界面类,进一步实现各个控件的响应槽函数,并为各个控件绑定响应事件或添加信号即可。

在人脸识别会议考勤系统的开发中,系统配置与常用工具类被单独放置于两个Python 包中。系统配置采用.ini 文件实现,在该文件中分组实现对数据库地址、用户名、密码、数据库名、以及其他系统级参数的设置。在工具类中采用静态方法实现各常用功能,如:配置文件的加载、数据库的连接与关闭、文本内容的分析、用户名及密码等输入内容的校验等。

由于系统开发中采用MVC 分层开发模式实现了界面与业务逻辑的分离,本系统可以方便地进行后期的维护与功能扩展。

3 系统测试运行

人脸识别会议考勤系统的核心模块为视频流画面中的人脸检测与识别,其余模块为一般的信息管理系统功能。在人脸识别考勤时,需要尽可能地实现实时的人脸检测与识别。尽管本系统在开发中应用了MTCNN 与ResNet 深度学习模型,但是由于运用的均为训练好的模型,在系统运行测试时仅需要对视频帧画面进行前向运算,基本上能达到实时检测识别的性能。由于MTCNN 能够支持画面中的多张人脸的检测,本会议考勤系统还能够实现多人同时刷脸考勤,当在画面中同时检测识别出多张人脸图像时,系统采用了延迟5 秒刷新展示的方式,以便能够留下足够的时间进行语音播报。图3 给出了本系统运行时的刷脸签到画面。

图3 人脸识别会议考勤签到系统运行界面

4 结语

借助MTCNN 与ResNet 深度学习人脸检测与识别模型,本文设计实现了一款人脸识别会议考勤系统,该系统能够实时地检测与识别出参会人员并记录考勤信息,克服了传统考勤方式的不足。该系统现已运用于所在单位的会议考勤,大大提高了日常会议考勤及出勤统计的效率。但同时,本系统仍有一些不足需要进一步改进,如系统对硬件配置要求仍比较高,今后将进一步优化压缩检测与识别模型,并考虑向移动端移植。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!