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

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 程序整体结构

图1 程序整体结构图

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

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

2 数据交互层Controller

图2 数据交互层结构图

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

3 实体模型层Entity

图3 实体模型层结构图

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

4 图像处理层ImageProcess

图4 图像处理层结构图

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

5 界面显示层View

图5 页面显示层结构图

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

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

图6 MainWindow主页面

图7 DeptManager部门管理页面

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

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

图8 EmployeeManager员工管理页面

图9 ExportRecord记录导出页面

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

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

图10 QWaittingDialog等待页面

6 资源文件

图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所示为人脸检测效果图。对于检测到的人脸,图像中用红色框图进行标记。

图22 人脸检测效果图

3 人脸录入流程

图23 人脸录入流程图

图24 人脸录入界面图

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

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

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

4 人脸模型训练流程

图26 人脸模型训练信息

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

图27 模型数据保存路径

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

图28 训练等待过程

5 人脸识别流程

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

图29 人脸识别流程图

图30 打卡记录保存

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

6、打卡记录导出

图31 打卡记录导出图

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

图32 记录导出成功图

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

图33 记录文件保存路径

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

图34 记录文件内容

第五章 总结

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

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

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

2、系统源代码

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

4、设计说明文档

第六章 参考文献

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

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

基于OpenCV的人脸 考勤系统相关推荐

  1. 【matlab选题推荐四】基于图像识别的人脸考勤系统

    题目:基于图像识别的人脸考勤系统 背景 :课堂考勤系统的作用为督促学生参与到课堂教学中,让学生能够更好学习相关知识.传统的课堂教学采用课堂点名的方式,容易打乱教师的授课节奏.基于对人脸识别技术开发现状 ...

  2. 基于matlab的人脸考勤系统,gui界面,界面简洁,实现实时打卡考勤

    基于matlab的人脸考勤系统,gui界面,界面简洁,实现实时打卡考勤,正确率高. 涉及图像处理,特征提取,数据降维,机器学习训练,支持把新照片新录入系统. ID:69400663195853731

  3. 基于face recognition OpenCV 的人脸考勤系统

    人脸考勤系统客户端的主要功能有:人脸识别.网络通信.数据可视化,信息展示等:主要界面: 2.2.1 人脸识别模块 人脸识别模块是基于 face recognition 库实现的,face recogn ...

  4. 基于OpenCV的人脸识别系统的pyhon源代码

    本论文主要阐述了基于OpenCV的人脸识别原型系统.基于生物特征识别的身份认证方法有指纹.掌纹.眼睛虹膜.人脸等,其中,由于人脸的稳定性和可见性,人脸识别的研究与应用成为热点,本文针对出租公寓安全管理 ...

  5. QT基于百度的人脸考勤系统

    目录 一.百度智能云介绍 二.代码 1.camera类 2.widget类 3.register类 4.dialog类 三.效果演示 四.改进 获取完整代码请前往:GitHub - zhaohigh/ ...

  6. 基于opencv 的人脸签到系统

    import cv2 import os import numpy as np from PIL import Image #pillow import pyttsx3 import sys impo ...

  7. 基于OpenCV的人脸识别考勤系统

    考勤系统设计 学生上课考勤系统最初的方式是采用的人工纸质点名,目前仍旧有一部分学校依旧采用此种方法点名,这种方法也一直是被认为最有效的签到点名方式.但由于课程繁多加上学生人数众多, 代替点名现象普遍存 ...

  8. Python3:基于Opencv4.2和wxPython4可视化界面的人脸考勤系统

    前言 主题:基于Opencv4.2的人脸考勤系统 功能模块 采集人脸:收集需要录入的学生信息,开启摄像头收集截取对应的人脸图片: 训练人脸数据模型:根据收集和整合好的人脸图片数据训练成人脸数据模型: ...

  9. 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

    [优秀毕设]基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发.可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练.识别 利用Tkinter完成界面搭建 利用Fla ...

最新文章

  1. WEB登录H3C模拟器
  2. 登顶CLUE榜单,腾讯云小微与腾讯AI Lab联合团队提出基于知识的中文预训练模型...
  3. JSP笔记-发送邮件
  4. MySQL下备份和恢复简单介绍
  5. 关于JAVA的String类的一些方法
  6. mac下没有设置 SVN_EDITOR....错误解决方法
  7. 【LeetCode从零单排】No 114 Flatten Binary Tree to Linked List
  8. java垃圾回收之循环引用
  9. wxWidgets:wxStaticBoxSizer类用法
  10. [Lintcode]136. Palindrome Partitioning /[Leetcode]131. Palindrome Partitioning
  11. Luogu_2774 方格取数问题
  12. matplotlib使用GridSpec自定义子图位置 (非对称的子图)
  13. linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结
  14. 一、crontab 定时任务
  15. 暑假周进度总结报告2
  16. 洛谷P4458 /loj#2512.[BJOI2018]链上二次求和(线段树)
  17. java设计模式-可复用面向对象软件的基础(一)
  18. UserWarning: h5py is running against HDF5 1.10.5 when it was built against 1.10.4
  19. 计算机控制液压同步顶升系统,PLC多点控制液压同步顶升系统的运用
  20. 简单代码变出超个性化的QQ昵称

热门文章

  1. 自述从被坑70000到开工作室月入100000+:我做自动项目这一年辛酸史!
  2. 【神经网络】神经网络发展趋势及研究热点
  3. 大一c语言考试题信阳师范学院,zhaodapeng6
  4. 动作捕捉在动物神经与运动研究领域的应用
  5. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D. 80 Days
  6. MMA8452加速传感器的应用(简)
  7. lol查询服务器角色信息,游戏账号角色查询
  8. 2022年艺术品和古董投资策略研究报告
  9. layout_gravity和gravity的区分和应用
  10. 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)