本文章介绍由opnecv+qt实现的人脸识别考勤系统/门禁系统(ubuntu/arm),
是一个完整人脸识别系统,具有人脸录入、删除、人脸检测、识别、用管理等完整功能。
开发环境说明:虚拟机Ubuntu-18.04 + Opencv-4.2 + Qt-5.12.8 + Sqlite3数据库
所需工具:PC机、摄像头、开发板(可选)
所需第三方库:Opencv、Qt、Sqlite3
毕设课题选题参考:
帮助/答疑/辅导...等请联系博主,请点如下链接:
linux_face.txt · zengzr/share_contact - Gitee.com
系统运行人脸识别效果图:
系统主要功能实现介绍:
OPENCV库:用于人脸检测、人脸识别、人脸库训练等;
QT库:用于界面显示、包括摄像头图像显示、功能按钮等;
SQLITE库:数据库,存储用户信息、考勤数据等;
以下展示的为考勤系统,同时支持门禁系统,支持在PC端运行,也可ARM上运行。
在PC端运行,系统框架如下:
在PC+ARM端运行,系统架构如下:
实现效果图:
识别成功画面:
考勤表:
ARM板运行:(未打开摄像头)
工程介绍:
框架:采用 “前台foreground_APP + 后台background_APP”的架构来实现,两个程序(进程)。
前台foreground_APP:界面显示、用户交互(录入、删除人脸等)等功能;
后台background_APP:数据/图像处理,包括人脸检测、识别、用户管理等;
前后台通信方式:网络套接字socket、私有协议;
工程源码目录:
目录/文件名称 | 说明 | 备注 |
foreground_app | 前台应用程序工程目录 |
|
background_app | 后台应用程序工程目录 |
|
common | 公共模块目录 |
|
README.md | 项目简要介绍/说明 |
系统涉及的图像格式有:
V4L2采集的JPEG/MJPEG、QT的QImage、OPENCV的cvMat。
三者之间各不相识,三者需相互转换才能被利用,转换过程如下:
人脸图像处理,分为两个阶段:人脸检测、人脸识别。
人脸检测和人脸识别分别由两个的线程来处理,工作流程:
图像来源:由后台主动向前台获取图像,前台通过socket发送到后台。
后台获取的图像,先经过人脸检测线程进行检测,若检测到有图像,则传递给识别线程处理,不管有无检测到人脸,检测完一帧图像后,继续获取下一帧进行检测,这样循环。
人脸检测线程:opencv_face_detect_thread()
由opencv_face_detect()检测到人脸后,分为两种情况:
(1). 正常使用:检测到人脸则将人脸结果(人脸位置、大小)发送至前台,前台会将人脸框出来;
(2). 录入人脸:检测到人脸,则将人脸截取出来保存成图片并存放于对应的用户目录下,目录为faces,存放人脸的目录为faces/编号_姓名,如编号为123姓名为ABC的用户,其人脸位于faces/123_ABC目录。
人脸识别线程:opencv_face_recogn_thread()
人脸识别的图像来源于经人脸检测得到的人脸图(只截取出人脸部分),因此,人脸识别要处理的图像比人脸检测的少得多。
更多具体细节不细说...
教程文档:
搭建环境(安装OPENCV和QT):一步一步手把手教你如何安装,如下截图文档;
工程源码:详细注释,详细设计文档,详细说明如何实现,还有github提交记录,教你如何从0开始逐个功能一一实现。
源码详解:
整理有文档如下:
以上项目资料文档均开源共享,如有需要请加群下载。
帮助/答疑/辅导...等请联系博主,请点如下链接:
linux_face.txt · zengzr/share_contact - Gitee.com
如有任何问题,可私信博客,将竭力解决。