这是一个简单的基于Qt和虹软公司的人脸识别sdk的人脸考勤系统,但是由于开发时间较短,且开发目的仅用于学习。所以目前的版本效率不是太高。
用到了虹软的人脸识别引擎,Qt Creator,SQLite
人脸考勤系统主要包括七大模块:
-
主界面模块 主界面模块作为数据逻辑处理
-
人脸识别模块 人脸识别模块开辟独立线程,对于主界面传输过来的图像进行处理,检测,提取人脸特征,并将人脸特征保存在本地。
-
人脸检索模块 人脸检索模块开辟独立线程,并使用线程池管理多个子线程读取本地特征文件并与采集人脸特征进行比对,找到相似度最高的人脸图像并向主界面发送信号。
-
人员信息数据模块 人员信息显示模块,
-
签到数据模块 人员签到信息显示模块
-
数据库模块 该系统维护一个数据库,包括两个表,人员信息表和签到数据表,数据库模块主要是对两个表的增删改查的接口的实现。
-
摄像头模块 摄像头模块将摄像头采集图像进行缩放处理后放置主界面进行显示,并在需要进行图像采集时保存当前帧图像。
人脸考勤系统的使用流程大概是这样的:
-
1、用户点击录入按钮进行人员的信息录入,录入过程中包括,提取人脸照片特征值,将人脸特征及采集照片保存在本地。同时将地址与人员信息写入数据库。
-
2、在人员信息管理模块中可以查找对应人员的信息及采集图像。
-
3、点击一键签到,触发人脸检索模块的人脸检索功能,将本地的人脸特征进行遍历比对,找到相似度最高的人脸信息进行显示。
-
4、在签到信息管理模块中可以找到人员签到的详细情况。
-
信息录入 从摄像头模块获取一帧的图像,在弹出的窗口中用户输入相关的信息,窗口检查信息是否填写完整,完整则将所填信息存入一个结构体中。触发人脸识别模块的开始,在线程中对采集的人脸图像进行人脸检测,特征提取,人脸截取。最后由主界面显示人员信息并存入数据库。
-
一键签到 从摄像头模块获取一帧图像,在线程中开辟4个子线程由线程池管理,4个子线程读取本地特征数据,与采集的人脸进行比对,找到相似度最高人脸进行信息显示并存入数据库。
- 1、人脸识别模块可与人脸检索模块进行整合,避免代码的冗余。
- 2、将人脸特征值保存在本地是因为特征长度太长,若读入内存会造成内存不足的情况,但是从磁盘中读取速度过慢,要找到一个能够平衡的方法,提高检索速度。
- 3、线程池中管理的内存在每次比对时都要对人脸识别引擎进行初始化和销毁引擎造成检索速度过慢。
- 4、没有理解线程管理的方法,仅使用简单的线程池来管理,使得线程的使用受到限制,效率过低。
这个小项目还存在很多不足,如果有幸能够被大佬阅读,希望能够得到指导,联系方式:[email protected]