基于OpenCV的人脸 考勤系统

article/2025/10/8 5:14:52
  
  
  
 

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

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


http://chatgpt.dhexx.cn/article/iI80h6rp.shtml

相关文章

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

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

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

目录 一、百度智能云介绍 二、代码 1、camera类 2、widget类 3、register类 4、dialog类 三、效果演示 四、改进 获取完整代码请前往:GitHub - zhaohigh/Qt-chatrobut 目前还在学习中,需要练练手,就写了一个基于百度人脸识别的考勤…

Python人脸识别智能考勤系统 (供源码,附报告)(可答疑,可调试)

目录 一、项目简介 二、功能展示 1.人脸识别功能测试 2.识别并录入人脸及个人信息 3.数据库保存信息 4.考勤打卡 三、环境安装实例 1.下载python对应版本的dlib 2.安装opencv-python 3.安装face_recognition 4.安装pyqt5 5.安装mysqlclient 四、需要源码私信并call邮…

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

考勤系统设计 学生上课考勤系统最初的方式是采用的人工纸质点名,目前仍旧有一部分学校依旧采用此种方法点名,这种方法也一直是被认为最有效的签到点名方式。但由于课程繁多加上学生人数众多, 代替点名现象普遍存在, 而且传统的现场点名签到方式费时费力, 直接影响到授课质量…

手把手教你:人脸识别考勤系统

系列文章 手把手教你:人脸识别考勤系统 本文为系列第一篇 文章目录 系列文章项目简介一、项目展示二、环境需求环境安装实例 三、功能模块介绍1.人脸库图像2.构建人脸库3.启动人脸识别功能 完整代码地址 项目简介 本文主要介绍如何使用python搭建:一个…

LabVIEW入门与实战开发32例

链接:https://pan.baidu.com/s/1FqRL1loyDS-YT4wzIdRg2A 提取码:xe7y

LabView学习

一、基础篇 1、Labview是一种程序开发环境,由美国国家仪器(NI)公司研制开发。 2、NI-VISA(Virtual Instrument Software Architec-ture,以下简称为“VISA”)是美国国家仪器NI(NationalInstrument)公司开发的一种用来与各种仪器总…

基于实践的LabVIEW零基础入门视频教程

原文地址::http://blog.eeecontrol.com/LabVIEW1/ 《基于实践的LabVIEW零基础入门视频教程》 资料不在多,而在于精,资料太多,反而会迷失方向,学习最怕的就是打乱仗,选择对的方向,比努力更重要,这也是本人的亲身经历!《基于实践的LabVIEW零基础入门视频教程》方向明确…

Labview简介

公司:美国国家仪器(成立于1976年) 初始发布时间:1986年 底层语言:C、C 操作系统:windows、macOS、linux 运用场景:数据采集、仪器控制、自动化、分析与信号处理、工业控制、嵌入式和系统设计…

LabVIEW学习笔记(三)——程序结构

前言: 任何计算机语言都离不开程序结构,LabVIEW 作为一种图形化的高级程序幵发语言也不例外。LabVIEW 中的程序结构包括if-else循环,while循环结构,使能结构,公式节点和数学脚本节点等, 因此通过LabVIEW可以…

LabVIEW使用入门指导

LabVIEW是一种图像化设计工具,它的“代码”格式为*.vi(Virtual Instrument),分为前端面板和后端面板,前端面板又可以称之为顶层设计,是用户界面,后端设计师代码以及元器件试图。 前端面板 前端面板中,用户…

labview精华资料集合光盘

最后的详细内容如下: 引用 |_Windows颜色拾取器 |_ActiveX举例_写Excel |_打开其它文件或者程序 |_当前文件夹查找指定文件 |_动画显示(奔跑的马) |_ActiveX举例_演示PPT |_获取当前程序路径及名称并判断状态是EXE等 |_简单暂停 |_前面板对象…

学习labview

公司:美国国家仪器(成立于1976年) 初始发布时间:1986年 底层语言:C、C 操作系统:windows、macOS、linux 运用场景:数据采集、仪器控制、自动化、分析与信号处理、工业控制、嵌入式和系统设计…

LabVIEW入门学习经验分享

在自动化行业,你如果想开发功能强大且开发周期不要太长的上位机软件。首先考虑labview,它可以调用c、matlab等编程语言的库文件,实现跨语言编程,从而满足你更复杂的控制,这是它的优势,国内外很多的航空航天…

labview入门到出家5(进阶篇)——程序调试以及labview函数库的运用

跟了前面几章的操作流程,相信大家对labview有了一定的认识。其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了。跟其他编程语言一样,好的编程思维再加上一个好用…

Labview2018学习之三:LabVIEW编程

LabVIEW是图形化编辑软件,使用LabVIEW编程的基本流程的步骤是: 1)VI的创建; 2)编辑VI,运行和调试; 程序框图:框图是实际可执行的代码,通过将完成特定功能的对象连接在一…

【LabVIEW】LabVIEW练习

产生100个1-99随机整数数,求其和以及平均值 用for循环产生4行100列的二维数组,数组成员如下: 1,2,3…100; 100,99,98…1; 6,7,8…105; 105,104,103…6; 从这个数组中提取2行50列的二维数组,数组成员如下: 50,49,48…1; 56,57,58 (105) 将这2个数组用数组显示件显示在前面板. …

学习LabVIEW应看的几本书

学习LabVIEW应看的几本书 前几天,看了“花开不谢”的博客,才知道NI在中国落户已经十年了,推算过来大概也就是1998年前后在中国落的户,那时中国的改革开放已经二十多年。NI在中国推广所遇到的最大难题,我猜想应该语言是…

专题一:Labview表格控件 及 应用(一)

专题一:Labview表格控件 及 应用(一) 最近一段时间,做试验台上位机编程,老是用到表格控件,这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。 总结教训:尽量把文章控制在5分钟…

如何系统学习LabVIEW?

目录 1、LabVIEW开发技巧 2、LabVIEW仪器控制 3、LabVIEW和单片机(Arduino) 4、LabVIEW工业图像处理与机器视觉实战 从2021年4月至2022年6月,1年零2个月的时间,终于把LabVIEW工控系列文章更新完了~ LabVIEW工控系列文章包含4部…