该项目是一个基于人脸识别的课堂考勤系统,使用Python开发,结合了多种技术实现考勤功能。要开发类似的基于人脸识别的考勤系统,可参考以下步骤:
- 环境搭建:利用Anaconda创建虚拟环境,指定Python版本为3.8,命令为
conda create -n fr python==3.8
,之后激活虚拟环境conda activate fr
。通过requirements.txt
或environment.yaml
安装项目所需的包,若选择requirements.txt
,在命令行切换到该文件所在根目录后执行pip install -r requirements.txt
;若使用environment.yaml
,则执行conda env create -f environment.yaml
。安装dlib
库,安装前需先安装Visual Studio C++的Community版本或专业版、企业版,安装命令为pip install dlib
。 - 数据库配置:使用Navicat等工具创建MySQL数据库,创建数据库时设置好连接名、主机、端口、用户名和密码等信息,数据库名为
facerecognition
。在数据库中创建students
、checkin
、studentnums
等表格,明确各表格字段含义,如students
表包含学生ID、姓名、班级、性别、生日等字段。使用PyMySQL
进行数据库连接和操作,在execute.py
文件中修改数据库连接代码,如db = pymysql.connect("localhost", "root", "mysql105", "facerecognition")
。 - 人脸识别与活体检测:人脸检测使用OpenCV提供的训练好的ResNet - SSD模型(
model_face_detection/res10_300x300_ssd_iter_140000.caffemodel
),通过该模型找出人脸坐标。利用人脸校正算法对人脸进行校正,将非正视角的人脸校正到使两眼处于同一水平位置。采用Google在2015年提出的FaceNet算法进行特征提取,将人脸编码为128维向量,使用OpenFace提供的基于Inception的训练好的FaceNet模型权重(model_facenet/openface_nn4.small2.v1.t7
) 。使用支持向量机(SVM)对各人脸128维向量进行分类,需注意人脸数据库中至少包含两个人。活体检测利用开源的dlib
库实现人脸特征点的标定,依据眨眼的阈值和时长确定是否为活体,相关模型为model_blink_detection/shape_predictor_68_face_landmarks.dat
。 - 系统功能实现:通过信息采集界面采集学生人脸图片建库,支持手动添加和自动采集,采集的图片会存放在
face_dataset/XX
路径下,XX
为学号。在主界面设置考勤时间,开启相机后定时从摄像头获取教室内学生的照片进行人脸识别。识别出在场学生后,与数据库中的学生信息对比,统计缺勤、早退和迟到情况,如在checkin
表中记录考勤时间和状态。在主界面添加查看结果功能,点击后在左侧文本框显示包含迟到和旷课的学生信息。实现补签及请假登记功能,通过主界面的补签和请假按键,输入学号进行操作,并将信息写入数据库。 - 系统优化与扩展(可选):解决现有系统存在的闪退、考勤逻辑、多人脸处理等问题,提升系统运行效率与稳定性。考虑加密存储学生人脸数据和考勤信息到数据库,保护隐私。实现自动统计每个班级的考勤信息并生成日志功能。从教务系统导入教室课表,根据课表统计考勤,使考勤判定更人性化。优化人脸识别算法,提升识别效率,实现同时多人考勤。开发上传图片识别功能,方便老师在系统故障时用手机拍摄照片存档并上传系统进行人脸识别考勤。探索使用前沿的人脸识别和人脸检测算法,如InsightFace、ArcFace、MTCNN等 ,提升系统性能。