高艳,徐丽丽
(山西农业大学信息学院,太谷030800)
随着人工智能技术的不断发展,人脸识别技术应用到了生活中的方方面面,如安防、会议、交通等[1]。目前,很多高校仍然采用传统的点名方式来完成学生考勤,本文采用人脸识别技术应用到课堂签到中,不仅可以有效提高考勤的效率,同时可以避免出现学生代替考勤等情况[2-3]。
人脸识别技术包含人脸检测和人脸识别。人脸识别的基本原理是将摄像头捕捉到的图像进行人脸检测,将检测到的人脸特征与系统库中的人脸的特征进行对比,达到一定的相似度(阈值)则人脸识别成功,否则识别失败[4]。本文采用face_recognition 库完成人脸识别。
face_recognition 库是基于Python 语言开发的开源人脸识别项目,是基于dlib 开源库的深度学习模型进行构建,在LFW 数据集上测试的成功率高达99.38%[5]。在人脸识别过程中,face_recognition 会采用人脸的68个特征点与库中人脸特征点进行对比来完成人脸识别过程,特征点坐标如图1 所示,包含脸的轮廓,眉毛、眼睛、鼻子、嘴的特征。
图1 人脸特征坐标
基于C/S 架构以及Python 语言的GUI 有PyQt5、Tkinter 等,本系统界面的设计采用Python 标准库Tkinter 完成。界面如图2 所示。界面中摄像头实时捕捉并完成人脸检测的图像显示在画布中,并完成人脸检测及人脸定位。除此之外包括人脸采集及签到按钮,以及签到时会显示“签到成功”或者“签到失败”的标签和学号、姓名、班级、签到时间的输入框。画布中实时显示摄像头图像部分代码如下:
图2 人脸签到系统界面
人脸检测及定位使用dlib 库完成,具体的代码如下:
系统中的数据库采用MySQL 数据库,需要安装PyMySQL 驱动才能进行数据库的连接。数据库中包含两张表,分别是学生基本信息表(见表1)和学生签到表(见表2)。学生基本信息表包含学号、姓名、班级以及学生照片。签到表包含学号和签到时间。
表1 学生基本信息表
表2 学生签到表
数据库连接及游标定义代码如下:
点击人脸采集功能时,会出现一个新的窗口,在新的窗口中需要输入学号,输入学号之后点击保存按钮(见图3),可以将点击时刻摄像头捕捉到的图像,并完成人脸定位裁剪后返回的人脸图像进行保存,保存的人脸图像的名称为“学号.jpg”,这样命名的原因是在实现签到成功时,根据库中匹配成功的人脸的学号进行该学生其他信息的查询及显示功能的实现。
图3 人脸采集界面
签到流程如图4 所示,点击签到按钮,会检测当前摄像头人脸图像,并确定人脸位置进行裁剪,返回裁剪后的图像,采用face_recognition 库的face_encodings 函数对该图像和人脸库中的图像进行编码,再利用com⁃pare_faces 函数将库中图像编码与该图像编码进行特征比对,tolerance 设置为0.4。当匹配的结果为True时,将库中匹配的人脸图片的学号以及签到时间加入到数据库,并根据学号在数据库中找到学号、姓名、编辑、当前签到时间,显示在窗口对应的文本框中,并在标签上显示“签到成功,欢迎**”,并进行播报,否则在标签中显示“签到失败”并进行播报,完成整个人脸识别签到过程。人脸识别过程代码如下:
图4 签到流程图
无论签到成功与否,都进行语音播报,语音播报功能的完成调用百度的API 来,即先用百度API 生成mp3 格式音频文件,利用playsound 库的playsound 函数进行语音播报即可。首先需要在百度云的官网申请AppID、API Key 以及Secret Key,调用pip install baiduaip 进行API 的安装及使用。播报功能实现的代码如下:
本文采用人脸识别技术进行课堂签到,可以有效解决传统人工点名效率低下以及别人代替签到等问题。系统设计相对简单,主要是针对确定课程的学生完成人脸识别的签到功能即可。要进行大规模的应用,还需要对系统进行进一步完善,如需要加上课程的信息、教师的信息、学生上课的信息以及相关界面的设计等。