基于OpenCV的人脸 考勤系统

   
   
   
 

详细的设计流程点击链接:

https://wenku.baidu.com/view/871e4bb7974bcf84b9d528ea81c758f5f71f2952?fr=uc

 

 

修订记录

 

版本号

修改记录

修改者

修改日期

V1.0

初次编写

WenJie

2019.05.11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第一章 引言....................................................................................... 5

1 编写目的.................................................................................... 5

2 项目背景.................................................................................... 5

3 参考资料.................................................................................... 5

第二章 程序软件结构........................................................................ 6

1 程序整体结构............................................................................ 6

2 数据交互层Controller................................................................ 6

3 实体模型层Entity...................................................................... 7

4 图像处理层ImageProcess.......................................................... 8

5 界面显示层View....................................................................... 8

6 资源文件.................................................................................. 12

7 其他文件.................................................................................. 13

第三章 开发环境搭建...................................................................... 14

1 MSVC 2015编译器安装............................................................. 14

2 QT IDE安装............................................................................... 14

3 OpenCV人脸识别库安装.......................................................... 15

3.1 下载opencv3.4.1源码与opencv_contrib3.4.1................. 16

3.2 Cmake3.11编译Opencv3.4.1............................................ 16

3.3 MCVC 2015编译............................................................... 17

第四章 系统详细设计...................................................................... 20

1 数据库设计.............................................................................. 20

2 人脸检测流程.......................................................................... 20

3 人脸录入流程.......................................................................... 21

4 人脸模型训练流程................................................................... 23

5 人脸识别流程.......................................................................... 24

6、打卡记录导出........................................................................ 26

第五章 总结..................................................................................... 28

第六章 参考文献.............................................................................. 29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第一章 引言

1 编写目的

为明确软件需求,安排项目规划与进度、组织软件开发与测试,为后续软件维护、修改提供技术支持,方便项目经理、设计人员、开发人员更快对本软件熟练操作提供技术参考。

2 项目背景

随着安全入口控制需要的快速增长,生物统计技术得到了新的重视。目前,微电子和视觉系统方面取得新进展,使该领域中高性能自动识别技术的实现代价降低到了可接受的程度,人脸识别是所有生物识别方法中应用最广泛的技术之一。

人脸识别包括两个重要部分,即人脸检测部分和人脸识别部分。人脸检测是在人脸识别的一个共性特征操作样本模型的基础上,将待检测图像样本的任意子区域划分为人脸图像模式和非人脸图像模式,在所获取的图像上如果检测出存在人脸,则判断出人脸所在的位置及人脸的大小。人脸识别是以人脸样本模式个性特征为基础进行的模式识别操作,它首先将人脸的特征提取出来,然后将此特征与已知的标准样本特征进行匹配对比,从而识别及刻画人脸。人脸识别技术是一个非常活跃的研究领域,它覆盖了数字图像处理、模式识别、计算机视觉、神经网络、心理学、数学等诸多学科的内容。与此同时,人脸检测和识别技术也在不断的发展和进步,与指纹、虹膜等其他人体生物特征识别系统相比,人脸识别具有更加直接、友好、便捷等特点,因而容易为用户所接受,并且其在身份验证、公安刑侦、安全验证、智能视频监控等方面有着广泛的应用。

3 参考资料

  1. 《C++ GUI Programming with Qt5》

 

 

 

第二章 程序软件结构

1 程序整体结构

基于OpenCV的人脸 考勤系统_第1张图片

图1 程序整体结构图

如上图1程序整体结构图所示,系统程序代码分为数据交互层Controller、实体模型层Entity、图像处理层ImageProcess、界面显示层View以及资源文件resource.qrc和图标配置文件set_icon.rc。

下面分别介绍每层中所包括的类。

2 数据交互层Controller

基于OpenCV的人脸 考勤系统_第2张图片

图2 数据交互层结构图

如上图2中数据交互层结构图所示,在数据交互层中包括两个类:MainWindowController和SqlOperate。MainWindowController负责界面MainWindow类与图像处理类ImageProcess的数据交换;SqlOperate承担数据库SQLite和界面之间的数据交换。

3 实体模型层Entity

基于OpenCV的人脸 考勤系统_第3张图片

图3 实体模型层结构图

如上图3中所示,实体模型层中包括五个实体类:部门信息实体类DepartmentInfo、员工信息实体类EmployeeInfo和考勤记录实体类RecordInfo三个基本实体类和由基本实体类组合而成的员工部门类EmployeeDepartment和员工部门考勤类EmployeeDepartmentRecord。

4 图像处理层ImageProcess

基于OpenCV的人脸 考勤系统_第4张图片

图4 图像处理层结构图

如上图4中图像处理层结构图所示,图像处理层功能包括人脸检测与识别、拍照采集和模型训练三大功能,对应的处理类分别为FaceDetection类、TakePicture类和ModelTrain类。在本系统的图像处理中,引入了OpenCV图像处理库,图像处理形式为Mat类型,而软件页面显示类型为QImage类型,因此,为便于两种类型图像之间进行转换,QImageMatConvertFunction类中通过静态方法实现了两种图像类型的转换。

5 界面显示层View

基于OpenCV的人脸 考勤系统_第5张图片

图5 页面显示层结构图

如上图5所示,页面显示层包括主页面类MainWindow、部门管理类DeptManager、员工管理类EmployeeManager、记录导出类ExportRecord和等待页面类QWaittingDialog。

MainWindow主页面类界面如下图6所示。页面中包括日期时间显示、照片录入和模型训练、部门管理、员工管理、考勤记录和图像显示等内容。

基于OpenCV的人脸 考勤系统_第6张图片

图6 MainWindow主页面

基于OpenCV的人脸 考勤系统_第7张图片

图7 DeptManager部门管理页面

DeptManager部门管理页面如上图7所示。在此页面中可以对单位企业内的部门进行增加、删除、修改部门编号或名称。

EmployeeManager员工管理页面如下图8所示。同图7中的部门管理页面的操作类似,在该页面中对员工信息进行管理。

基于OpenCV的人脸 考勤系统_第8张图片

图8 EmployeeManager员工管理页面

基于OpenCV的人脸 考勤系统_第9张图片

图9 ExportRecord记录导出页面

上图9为ExportRecord记录导出页面图。用户可以根据部门、员工和日期时间三种方式来选择导出记录类型。在日期时间的选择上,考虑到用户使用的习惯,设置今天、上周、上个月三个快捷方式对日期和时间进行快速筛选。

QWaittingDialog等待页面如下图10所示。在用户对输入员工照片进行“模型训练”时,需要耗费比较多的时间,需要用户等到模型训练结束后才可进行再次操作。

基于OpenCV的人脸 考勤系统_第10张图片

图10 QWaittingDialog等待页面

6 资源文件

基于OpenCV的人脸 考勤系统_第11张图片

图11 资源文件结构图

资源文件结构图如上图11所示。资源文件中包括软件系统运行的图片Image和软件风格配置style.qss文件。

7 其他文件

图12 其他文件结构图

其他文件的结构图如上图12所示,仅包含一个图标设置文件set_icon.rc,在set_icon.rc文件中,有一行命令:IDI_ICON1 ICON DISCARDABLE "64_icon.ico"来设置软件的图标。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三章 开发环境搭建

1 MSVC 2015编译器安装

对MSVC 2015 C++编译器的安装,基本为傻瓜式安装,需要注意的是在如下图13所示的选择页面上,记得勾选“Visual C++”选项。

 

图13 Visual Studio安装图

2 QT IDE安装

从QT官网http://download.qt.io/official_releases/qt/中下载Qt5.7.1 For MSVC2015版本软件进行安装。如下图14为安装成功后,QT的版本信息。

 

图14 QT版本信息

在经过上述两个步骤的安装后,QT能够自动找到步骤一中安装的MSVC 2015编译器,如下图15所示。

 

图15 QT编译器信息

3 OpenCV人脸识别库安装

本人使用的OpenCV库版本为3.4.1,因为在OpenCV3.0之后版本的OpenCV对Sift、Sufer等新算法没有提供直接编译好的动态库来加载使用,因此必须自己编译。这是因为Sift、Sufer算法专利现在是属于哥伦比亚大学,因此OpenCV对这部分内容及“所谓的”不稳定模块全都放到opencv_contrib中,且只在它的Github中能够找到,OpenCV的官网上是没有的。因此对于想使用Sift、Sufer、双目立体匹配算法、结构光等新的算法及有专利权算法的,需要自行编译。

3.1 下载opencv3.4.1源码与opencv_contrib3.4.1

下载需要的Opencv3.4.1版本源码:https://github.com/opencv/opencv/releases;

下载需要的opencv_contrib3.4.1版本源码:https://github.com/opencv/opencv_contrib/releases

3.2 Cmake3.11编译Opencv3.4.1

按照网上的Cmake3.11安装步骤,安装好Cmake3.11软件后打开。

源码路径“Source Path”选择下载好解压后的Opencv3.4.1源码,本文解压到了D: Opencv3.4.1_Sourse路径下,这个需要按照你的路径自行选择。编译输出路径“Build Path”,路径为D: Opencv3.4.1_Build,同样这个需要按照你的路径自行选择。

 

图16 Cmake3.11编译Opencv3.4.1源码(1)

单击“configure”,选择如下图设置,单击“Finish”即可开始编译。这个时候Cmake会开始在build目录下生成一些配置文件,如CMakeCache.txt 等。出现两个done表示第一次编译成功。

注意:这里选择的编译器版本要和自己本地的编译器版本一致。下载的MSVC编译器是64为就要用Win64,否则就用32位版本编译器。

 

图17 Cmake3.11编译Opencv3.4.1源码(2)

完成之后会在屏幕中间出现一堆Name和Value的参数,这里需要做两项改动。

1、勾选BUILD_opencv_world选项,这样,在调用动态库dll时,只调用这一个就行了,不用根据功能选择了,省了些麻烦。

2、找到OPENCV_EXTRA_MODULES_PATH将其设置成opencv_contrib的modules的路径,例如E:/opencv_contrib-3.4.1/modules。

再次点击Configure,然后点击Generate,这时你可以看到在E:/opencv/tools/opencv_contrib目录下已经生成了名为opencv.sln的VS工程。

3.3 MCVC 2015编译

进入上面过程中配置的“Build Path”文件夹下面,使用Visual Studio 2015打开opencv.sln工程,重新生成解决方案,如下图18所示。

图18 MCVC2015编译OpenCV工程(1)

然后打开VS项目后,在Debug x64模式下,再install操作。如下图19所示。

图19 MCVC2015编译OpenCV工程(2)

注意:记得生成完debug的库后,改为release x64,再来一遍上面install操作。

 

此时,有了E:\opencv\tools\opencv_contrib\install目录。该目录包含了我们需要的头文件、库文件。这个头文件和库文件就是将来我们在代码工程中需要加入的OpenCV3.4.1的路径。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第四章 系统详细设计

1 数据库设计

 

图20 数据表设计

如上图20所示,系统中使用到三个实体类部门、员工和记录,分别对应数据库中的DepartmentInfo表、EmployeeInfo表和RecordInfo表。

2 人脸检测流程

图21 人脸检测流程图

如上图21所示人脸检测流程。界面MainWindow定时将摄像头图像以QImage的形式发送到人脸检测类FaceDetection,FaceDetection在线程池中开启人脸检测流程,将人脸使用框图定位后,将处理后图像以QImage的形式发送到MainWindow中显示出来。

如下图22所示为人脸检测效果图。对于检测到的人脸,图像中用红色框图进行标记。

基于OpenCV的人脸 考勤系统_第12张图片

图22 人脸检测效果图

3 人脸录入流程

 

图23 人脸录入流程图

基于OpenCV的人脸 考勤系统_第13张图片

图24 人脸录入界面图

基于OpenCV的人脸 考勤系统_第14张图片

图25 人脸录入图像保存路径

人脸录入操作流程如图23所示。用户点击“拍照”按钮后,将页面中的人脸图像进行进过人脸检测处理后,保存到指定目录(如图25所示)下,循环10次后,在指定目录下保存有10张人脸图像供后续训练人脸识别模型使用。

注意:此处的指定目录为运行环境下faces文件夹下,目录名“1”为员工编号。通过这种目录名和员工编号一致的操作,建立起图像标签编号(即目录名)和员工之间的对应关系。

4 人脸模型训练流程

基于OpenCV的人脸 考勤系统_第15张图片

图26 人脸模型训练信息

人脸图像录入结束后,需要对刚才录入的人脸图像进行特征提取,即需要进行接下来的人脸模型训练流程。点击“训练”按钮,即开始模型训练流程。在真正开始模型训练前,需要将人脸图像与其标签建立一一对应关系。正如上节中所述,本系统中将人脸图像存放的目录名与标签、员工编号建立对应关系,所以识别出的图像标签即员工编号。如上图26所示,在运行目录下TrainInfo子目录下存放人脸图片与标签的对应信息TrainInfo.csv,描述了人脸图像路径与其标签。在开始训练时,将根据人脸图像路径读取出对应人脸图像,和其标签一同作为人脸识别分类器的输入进行训练,从而得出人脸识别模型。模型训练好之后,数据以XML文件格式存放在运行目录下的Model子目录。

基于OpenCV的人脸 考勤系统_第16张图片

图27 模型数据保存路径

注意:OpenCV3.4中有3中人脸识别算法(EigenFace、FisherFace和LBPH),所以本系统中对人脸图像进行模型训练时,可以对应得到3个算法的模型XML文件。

基于OpenCV的人脸 考勤系统_第17张图片

图28 训练等待过程

5 人脸识别流程

训练好模型后,即可对模型中已有员工进行人脸识别。人脸识别过程如下图29所示。人脸识别是在人脸检测的基础上,通过人脸识别分类器进行人脸图像与模型中已有数据进行比对,得出人脸图像所对应的标签,即人脸识别结果,将此结果发送到MainWindow中。

图29 人脸识别流程图

 

图30 打卡记录保存

如图30所示,MainWindow得到人脸识别标签后,通过SqlOperate类查询数据库,得到该员工的姓名和部门名称等信息。为记录员工的打卡时间,MainWindow通过查询系统当前日期和时间,将完整的员工打卡记录保存到数据库中,并在界面中显示打卡信息。

6、打卡记录导出

基于OpenCV的人脸 考勤系统_第18张图片

图31 打卡记录导出图

用户可以根据部门、员工和日期时间三种方式来选择导出记录类型。在日期时间的选择上,考虑到用户使用的习惯,设置今天、上周、上个月三个快捷方式对日期和时间进行快速筛选。

基于OpenCV的人脸 考勤系统_第19张图片

图32 记录导出成功图

用户勾选导出条件后,点击“导出记录到文件”按钮,系统将记录文件导出到运行目录下的recordsFile子目录,记录文件名即为用户所勾选的条件选项。记录文件保存路径如下图33所示。

基于OpenCV的人脸 考勤系统_第20张图片

图33 记录文件保存路径

打开该csv记录文件,如下图34所示。导出的记录文件有员工编号、员工姓名、部门名称和打卡时间四个必要字段组成。

基于OpenCV的人脸 考勤系统_第21张图片

图34 记录文件内容

 

 

 

 

 

 

 

 

第五章 总结

本文档只是介绍作者在利用OpenCV3.4.1开发人脸考勤系统中的设计流程。文中所涉及的人脸识别算法的详细介绍,各位可以在第六章中的参考文献中查找。

本系统源码各位可以加以下微信号获取,作者会以压缩包的形式给各位发送。压缩包中内容包括:

1、编译好的Opencv3.4.1(包括opencv_contrib3.4)

2、系统源代码

3、系统构建运行目录(包括数据库、人脸检测分类器等)

4、设计说明文档

基于OpenCV的人脸 考勤系统_第22张图片

第六章 参考文献

1、《人脸识别算法——EigenFace、FisherFace、LBPH

》网址:https://www.cnblogs.com/little-monkey/p/8118938.html

你可能感兴趣的:(毕设题目,qt,opencv,人脸识别,人工智能,机器学习)