基于人脸识别的考勤系统的设计与实现

2021-08-05 21:19王维杨路
软件工程 2021年7期
关键词:人脸识别

王维 杨路

摘  要:针对传统考勤系统考勤效率低下等问题,开发了人脸识别考勤系统。该系统使用Linux操作系统,选用Qt Creator 4.3.0开发平台,使用SQLite记录后台数据库相关信息,基于OpenCV,实现了人脸识别、用户基本信息管理、人脸识别打卡、查询考勤记录等功能。经测试,该系统正常运行,较好地完成了考勤工作。

关键词:人脸识别;OpenCV;考勤系统;Qt Creator

中图分类号:TP391.41     文献标识码:A

Design and Implementation of Attendance System based on Face Recognition

WANG Wei, YANG Lu

(College of Computer Science, Xianyang Normal University, Xianyang 712000, China)

wangw850@126.com; 1913205489@qq.com

Abstract: Aiming at low attendance efficiency of traditional attendance systems, this paper proposes to develop a face recognition attendance system. The system adopts the Linux operating system and Qt Creator 4.3.0 development platform, and uses SQLite to record background database related information. Based on the OpenCV library, it realizes functions such as face recognition, user basic information management, face recognition clock-in, and attendance record query. Test results show that the proposed system works normally and the attendance work is well completed.

Keywords: face recognition; OpenCV; attendance system; Qt Creator

1   引言(Introduction)

当前考勤管理系统应用十分广泛,主要借助RFID技术、指纹识别技术及人脸识别技术等识别方式。RFID考勤签到是利用RFID自动识别技术、红外对射,及后台管理软件集成的一种考勤签到方案,但该技术不能保证证件与持卡人的绝对统一,识别精度较低[1-2]。指纹识别技术通过采集指纹,保存特征码到指纹数据库,进行身份识别时,通过特征匹配算法将采集到的指纹和指纹数据库中的指纹进行匹配,从而进行身份的验证[3]。但指纹数据被盗后,会造成信息的丢失[4]。而人脸识别技术能够有效地避免以上问题,同时识别精度较高,安全性也较高。因此,人脸识别技术成为考勤系统最为合适的选择。

人脸识别技术是以生物特征为基础,借助计算机技术,通过对人脸的特征进行分析与确认,实现对不同人脸的精确识别。人脸识别技术包含三个步骤,即人脸图像采集、人脸检测及人脸识别。人脸图像采集是借助摄像头采集人脸的图像,比如静态图像、动态图像,不同位置、不同表情等方面的图像;人脸检测主要用于人脸识别的预处理,即在图像中准确定位人脸的位置和大小,主流的人脸检测算法是采用Adaboost学习算法;人脸识别是将检测到的人脸与已存的人脸库中的人脸进行对比,得出两者的相似度值[5-6]。

2   系统总体设计(Overall system design)

整个系統使用Linux操作系统,基于Qt Creator 4.3.0开发平台,选用SQLite数据库管理系统,使用OpenCV完成开发工作。其中,OpenCV为开源且跨平台的计算机视觉和机器学习软件库,由C语言和少量的C++语言实现,属于轻量级并且运行效率较高的软件库,能够运行在Windows、Linux等操作系统上,可移植性好。OpenCV向上层提供大量的函数接口,不仅包括C++接口,同时也有Java、Python、C#等许多语言接口,主要功能是实现计算机对图像数据的处理,以及计算机视觉方面的相关算法,在物体识别、图像分割、人脸识别等领域应用广泛[7]。

人脸识别考勤系统的设计与实现的总体功能模块如图1所示。

用户系统功能详细介绍如下:

(1)实时显示时间:在用户界面实时显示当前的时间,用户可以看到当前打卡的时间是否迟到。

(2)显示公告信息:根据时间滚动查询公告信息表中的内容,将公告的内容和时间显示在界面中。

(3)人脸识别打卡:通过采集用户的人脸图像信息打卡成功,并且在考勤信息表中添加用户的考勤信息。

(4)查询考勤记录:用户可以通过工号查询自己的考勤记录,使得考勤信息透明化。

管理员系统功能详细介绍如下:

(1)管理员注册:管理员注册时需要添加自己的基本信息,也要采集面部信息才能完成注册。

(2)管理员登录:管理员通过账号和人脸识别进入系统,如果两者任意一个与数据库的内容不匹配将登录失败。

(3)用户信息管理:系统管理员可以对用户基本信息进行录入和面部图像信息采集以及查询、删除用户信息。

(4)公告信息管理:管理员可以发布、删除或者修改自己权限内所管理的通知内容。

(5)考勤信息统计:当用户打卡成功后,管理员登录管理员系统进入考勤信息模块,该模块将会展示所有用户的考勤状态,并且以饼状图和数字的形式显示考勤信息。

(6)管理员信息管理:管理员分为普通管理员和超级管理员,将管理员的权限划分等级,不同的权限处理不同的事务。

3   系统具体实现(System implementation)

3.1   用户信息管理模块算法设计

该模块是在menu.ui界面完成主要工作。信息录入,主要录入姓名、工号、性别等信息。录入好用户信息后点击addbt按钮触发on_addbt_clicked()槽函数,该函数使用insert into语句将用户的基本信息插入用户信息表中。点击select按钮触发on_selectbt_clicked()槽函数,完成对用户信息的查询功能。采集人脸信息时点击openbt按钮,触发on_openbt_clicked()槽函数,完成打开摄像头并截取十张人脸图像信息,并进行处理。点击“开始训练”按钮触发on_starttrainbt_clicked()槽函数,在函数中启动线程完成对采集信息的训练。

用户信息添加流程图如图2所示。

3.2   人脸识别打卡模块算法设计

人脸识别打卡模块先采集人脸照片训练人脸模型,然后进行人脸检测,实现打卡功能,具体算法如下:

(1)准备人脸数据集:

通过摄像头采集不同的人脸照片,对照片进行处理,将处理好的照片全部放到指定文件夹中存储。人脸检测模型由OpenCV官方提供,但面部信息识别模型需要自己训练。

图像采集部分负责采集图像,将来自外部设备的图像转换成可处理的数字图像格式。选用Z301P芯片的USB摄像头,驱动程序采用Linux下常用的通用驱动spca5xx。Linux通过读写设备文件的方式访问和控制USB摄像头,使用统一程序设计接口V4L(Video4Linux)实现视频图像的采集[8]。

(2)数据标记好后,使用OpenCV提供的相关训练模型接口进行模型的训练:

Ptrmodel=createEigenFaceRecognizer();

Model->train(images,labels);//将采集的图片路径和标签传参,训练人脸模型。

Model->save("MyFaceFisherModel.xml");//训练模型是xml文件,将文件保存起来。

(3)训练好文件后进行人脸检测。通过摄像头打卡进行人脸信息的采集,框出人脸的位置:

CascadeClassifier cascade;

cascade.load("haarcascade_frontalface_alt.xml");//加载人脸检测的模型。

cascade.detectMultiScale(gray,faces,

1.1,2,0,CV_HAAR_SCALE_IMAGE,Size(30,30));//检测人脸的方法

(4)将检测到的人脸信息进行识别:

Ptrmodel=createEigenFaceRecognizer();

modelPCA->load("MyFaceFisherModel.xml");//加载刚才训练好的人脸模型

predict=model->predict(image);//返回预测的标签

(5)人脸识别后用户信息插入功能:

如果五次预测的标签相同,说明识别正确。当识别出正确人脸信息之后使用select语句查询SQLite数据库中考勤信息表的用户信息。如果用户信息可以查询到已经打卡则调用QMessageBox::about(this,"提示",message);显示已经打卡,如果用户信息查询不到信息则调用QMessageBox::about(this,"提示",message)显示打卡成功,并且将打卡信息使用insert into语句插入考勤信息表中。

人脸识别打卡模块流程图如图3所示。

4   系统测试(System testing)

系统经过测试,能够正常运行。其中,用户信息管理模块实现了普通管理员对自己所管理用户的个人基本信息进行录入,同时实现了对用户面部图像信息的采集和识别模型的训练。单击“打开摄像头”按钮,摄像头获取图像信息,并且输出到屏幕;单击“采集头像”按钮,通过摄像头截取十张人脸图片信息,放入指定文件夹;选择训练生成的文件和训练文件,单击“开始训练”,在指定文件夹下生成训练好的模型。用户信息管理模块测试运行界面图如图4所示。

用户人脸识别打卡模块的主要功能是打开摄像头采集用户面部图像信息,与之前训练好的模型进行对比,对比成功则将用户基本信息插入考勤信息表中并显示打卡成功。用户人脸识别打卡模块测试运行界面图如图5所示。

5   结论(Conclusion)

该系统基于Linux操作系统,使用Qt Creator 4.3.0开发平台进行开发,使用OpenCV当中的人脸识别相关接口实现人脸识别打卡模块,使用SQLite数据库存储和统计系统需要的所有信息。系统能够正常工作,界面交互性好,操作简单,而且具有一定的可移植性,能够完成公司或者学校考勤工作的基本业务流程,更有效地完成了考勤工作,提高了管理者的工作效率。

参考文献(References)

[1] 张智文.射频识别技术理论与实践[M].北京:中国科学技术出版社,2008:286-305.

[2] 代懋玥.基于Web和RFID技术的人事考勤管理系统的设计与实现[D].成都:电子科技大学,2019.

[3] 刘晓莉,刘晓静.基于指纹识别技术的考务管理系统[J].办公自动化,2021(04):61-62.

[4] 季善东.指纹识别技术与考勤系统应用研究[D].南京:南京邮电大学,2017.

[5] 梁文莉.基于獨立成分分析的人脸识别算法研究[D].西安:西安科技大学,2012.

[6] 朱伟.OpenCV图像处理编程实例[M].北京:电子工业出版社,2016:3-19.

[7] LI Y, LI Y H, LI H R. Face check in system based on OpenCV[J]. International Core Journal of Engineering, 2021, 7(4):274-278.

[8] 周锦阳,吴哲,宋广.基于嵌入式Linux的视频通信系统设计与实现[J].船舶电子工程,2019,39(10):101-105.

作者简介:

王  维(1981-),女,硕士,讲师.研究领域:智能信息处理,嵌入式系统.

杨   路(1996-),男,本科生.研究领域:软件开发.

猜你喜欢
人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
基于(2D)2PCA-LBP 的人脸识别方法的研究
人脸识别在高校安全防范中的应用
基于类独立核稀疏表示的鲁棒人脸识别
基于K-L变换和平均近邻法的人脸识别