基于Python考勤系统的设计与实现

基于Python考勤系统的设计与实现

摘要:近几年来,人脸识别的应用技术发展迅速,有效地提高了人脸识别的准确率和速度,为人脸识别在许多领域的应用铺垫好了根底。而且自从2016年以来,人脸识别的应用领域逐步扩大,特别自从2016年下半年开始,人脸识别技术等的各种应用案例的运用落地速度飞快,普及程度也有所提高,诸如此类手机摄像头开锁及考勤门禁人脸识别功能等。2017年出现井喷,在各种应用和领域中熠熠生辉,目前来看很有发展得前景。经过几十年的发展,人脸识别技术已经成为计算机视觉领域的研究热点。随着人脸识别算法的成熟,人脸识别技术已广泛应用于诸如此类财务支付、各种认证、美容摄像、公安事业等领域。本文在如今Python人脸识别的现有研究成果下,显浅使用Python语言的第三方库Dlib,通过机器深度学习来实现人脸识别的各种功能,设计和实现创新的人脸识别的考勤系统,完成用户注册,用户识别,考勤系统管理等功能整合。该系统考勤相对于传统考勤系统具有灵活、编程简单、准确率相对较高等的优势。
关键词:人脸识别;Python 语言;dlib 库;考勤系统。

Design and implementation of attendance system based on Python

Abstract: In recent years, the application technology of face recognition has developed rapidly, which has effectively improved the accuracy and speed of face recognition, and paved the way for the application of face recognition in many fields. Since 2016, the application field of face recognition has gradually expanded, especially since the second half of 2016, the speed of landing of various application cases of face recognition technology has been significantly accelerated, and the popularity has also increased. Face recognition function, etc. A blowout appeared in 2017, which is shining in various applications and fields. At present, it has a promising development prospect. After decades of development, face recognition technology has become a research hotspot in the field of computer vision. With the maturity of face recognition algorithms, face recognition technology has been widely used in such fields as financial payment, various certifications, beauty cameras, public security, and other fields. Based on the current research results of Python face recognition, this paper uses the third-party library Dlib of Python language to implement various functions of face recognition through machine deep learning, and design and implement an innovative face recognition attendance system. , Complete user registration, user identification, attendance system management and other functions integration. Compared with the traditional attendance system, this system has the advantages of flexibility, simple programming, and relatively high accuracy.
Keywords:Face recognition; Python language; dlib library; attendance system.

目录

第一章 绪 论 1
1.1 系统设计的背景 1
1.2 课题目的与意义 1
1.3 课题的研究现状 2
1.4 论文系统结构与内容 2
1.5 考勤管理系统简介 3
1.5.1概述 3
1.5.2考勤管理系统的历史概述 3
1.5.3常见考勤系统 4
第二章 开发技术及环境搭建 5
2.1、Dlib库介绍 5
2.2、Python3.6+OpenCV3.2环境搭建 6
2.21、python安装 6
2.22、搭建python虚拟环境 7
2.23、安装openVC的先决条件 8
2.24、编译openVC环境 9
2.25、安装验证 11
2.3、Python3.6+dlib19.4环境搭建 11
2.3.1、dlib之前的准备 11
2.3.2、安装dlib依赖 11
2.3.3、安装dlib 13
2.3.4、实例检测 11
2.4、数据库的建立 14
2.5、Visual Studio连接SQL Server数据库 16
2.5.1 连接数据库流程 16
2.5.2 注意事项 18
第三章 设计需求分析 19
3.1 开发需完成目标 19
3.2 系统结构分析 19
3.3 系统性能需求分析 20
3.4 功能性需求分析 20
3.5 本章小结 21
第四章 人脸识别考勤系统功能设计 22
4.1、功能概括 22
4.2、考勤系统用户注册功能 22
4.3、数据库设计 23
4.3.1 SQL Server 数据库平台 23
4.3.2 SQL 语言 24
4.3.3 数据库设计概括 24
4.4、考勤系统识别流程 25
4.5、系统界面的设计 26
第五章 系统的实现 27
5.1、Python3.6+OpenCV3.2识别 27
5.1.1、获图实时检测 27
5.1.2、本地获取图片进行人脸检测并保存图片 28
5.2、Python3.6+dlib19.4识别实例 31
5.2.1、生成方形框识别人脸 32
5.2.2、关键线识别人脸 33
5.3用户界面模块的实现 35
第六章 考勤系统测试 38
6.1测试的目的和意义 38
6.2系统测试环境 38
6.3系统测试原则 38
6.4系统测试方法 39
6.5系统测试过程 40
6.6考勤系统测试总结 42
参考文献: 43
致谢 45

第一章 绪 论

1.1 系统设计的背景
人脸识别的研究起源在 20 世纪 60 年代,是 Bledsoe 和 Chen 最开始发表的。在过去的两年中,人脸识别技术发展迅速。一路走来有效地提高识别精确度和速度,为这项研究的广泛发展提供了基础。其实,从2016年以来,人脸识别的应用领域就开始逐步扩大,各种各样的人脸识别技术应用明显加快,百花齐放应接不暇。进入2017年后,它迎来了它的春天,并在许多应用程序和许多领域大放异彩。按行业划分的领域通常囊括:军事,公安,企业,机构,工厂,学校,房地产,家庭等等各行各业。例如准入在仓库,计算机室,办公楼,办公室,数据室,档案室,实验室等中进行控制,出勤签到,巡逻,识别,追踪和预警等适用范围也很广。
随着人脸识别算法的不断改进,人脸识别技术在保险金融等行业得到了很深度的挖掘使用。本文在现有人脸识别领域钻研成果的基础上,利用Python语言的第三方库dlib,完成用户注册,用户识别,考勤系统管理等功能集成。

1.2 课题目的与意义
人脸识别用于身份识别,它是一种取决于人脸模型的特征信息的生物识别技术,其中具有的唯一性和难以取代复制的特点,使人脸识别考勤系统等人脸识别类应用系统应运而生。它不仅因为人脸识别系统无需任何介质完成以往需要实物去达到的目的,所以可以节省不少成本,并且还免去实物造成的麻烦。铁打的系统,严格规范并且灵活管理员工或者学生的考勤,而流水的考勤人不需要导致修改更换物料,例如员工信息卡和门锁等,只需对新的人脸信息重新进行注册录入数据库,直接进行新的考勤运转。最后,人脸识别系统可以逐步完善,搭配各种平台,实现方式越来越简单,很好避免替代传统打卡的效率低下情况,还有统计困难造成的人力管理,甚至是性价比低的使用和维运成本。

1.3 课题的研究现状
人脸是确定一个人身份的最重要的方法之一。而作为一个人的最显著差异化标签,人脸识别是通过生物特征对人的身份进行辨认,是未来的一个很有前景的方向。近几年来,人脸识别的应用技术发展迅速,有效地提高了人脸识别的准确率和速度,为人脸识别在许多领域的应用铺垫好了根底。而作为非常热门的编程语言Python,其作用也是越来越大。其中Python语言利用Dlib第三方库实现基于深度学习的人脸识别方法,也是受到了很广泛的挖掘。大到公安系统小到每一个人的手机人脸解锁,研究人脸识别具有非常重要的理论价值和应用价值。

1.4 论文系统结构与内容
人脸识别考勤系统,重点是对人脸的检测和特征提取。因为其底层是一种Python语言利用Dlib第三方库实现基于深度学习的人脸识别方法。这里不同技术会采用不同的方法来实现人脸面部特征的抽象。归纳起来大致都可以分为以下几个流程:人脸检测、人脸规范化 人脸特征提取、人脸识别。本文目标的实现可以分为以下功能需求:
1.用户端人脸数据采集注册,通过摄像机收集面部图像,创建面部文件并将其存储在数据库中。
2.系统进行考勤用户人脸识别,将相机收集的面部图像与文件中的数据进行比较,然后进行验证。
3.考勤系统管理,由管理界面和考勤通过人脸识别记录,可迅速提取数据。
该系统是一个基于人脸识别的考勤系统。在功能实现中使用的Dlib库是由深度学习的,利用人脸识别模型和经过训练的人脸关键点检测器得到人脸特征值。
通过对一个人面部的观察,可以获得很多信息,如:性别、身体状况、情绪、年龄等。其实,人脸检测就是一个特别复杂的过程,本文所研究只是人脸识别的简单实现。
1.5 考勤管理系统简介
1.5.1概述
考勤管理是指用现代方法对单位内部,企业和事业单位,以及机关等人力资源进行合理的组织和配置,合理控制和协调员工的思想和行为,在约束条件下充分发挥人的主观能动性,使每个人都能发挥自己的才能,为自己的目标或业绩找到舞台。传统的公司企业,对于考勤,比如工资核算及发放、请假、员工上下班签到等都是通过指定的传统物料和考勤人员用人工操作来搞定的。

1.5.2考勤管理系统的历史概述
总体来说,在20世纪60年代开始,以往的人工考勤都是传统的人力打卡,系统的效率非常低,漏洞也非常多,这种情况持续在第一代计算机考勤管理系统诞生之前。在第一代计算机考勤管理系统研发之后,受制约于当时计算机发展水平,第一代计算机考勤系统并不好用。
而后,得益于数据库技术的发展,在这段时间里考勤系统的开发和应用拥有着比以前雄厚的技术后盾。在大概20世纪70年代时候在第二代计算机考勤系统应运而生之,而且与第一代相比,第二代系统有了很大的进步,功能也相对完善。但第二代系统的实用性还是有待提高。
而到了接近21世纪,人类越来越知道计算机的重要性,计算机技术、数据库技术和网络技术等系列学科迅猛成长,让考勤管理正逐步走向现代化。我国在走向国际化,全球化,市场竞争越来越激烈,特别是在现代企业中,开始重视人员考勤,而在跟国际接壤的影响下,懂得出勤效率的高低直接关系到企业的竞争力。在此背景下,第三代计算机考勤管理系统逐步普及,解决了人员考勤的诸多问题。

1.5.3常见考勤系统

总的来说,现在的考勤管理系统根据考勤方式的不同,具体可以分成几个主流的类型,有卡片式类型、生物识别式类型、动态人脸识别类型的考勤系统等。

最基础的卡片式是最稳定的,以磁卡作为媒介进行考勤主体的运用,要求待考勤人必须携带与之身份相对应的磁卡,通过刷磁卡内保存的条码信息来实现考勤。简单容易,但缺点也是比较多的。物料的成本较高,后期维护的工作量也相对来说比较大,而且其采用的是始于“物”的方式,寿命短的同时也当然阻止不了别人代考勤的发生,保密性不好。还有在现代生活中,卡片具有容易被复制的缺陷,密码也有泄露风险。
这里与卡片考勤系统相比,指纹考勤系统是更进步且越来越普遍的考勤系统使用。指纹考勤和人脸特征识别考勤系统都是是利用考勤人的生物特征来实现考勤流程的,总的来对比,物理打卡考勤存在易丢失、使用寿命有限的问题。一般来说,在先阶段考勤系统中,指纹识别考勤还是占据主要地位的,其应用范围也比较普遍。重要的是要有良好的保密性。指纹直接用于考勤,指纹唯一稳定。考勤方式也很灵活,可以满足复杂的考勤轮班需求。
而本文所研究的是目前比较新颖的考勤系统办法,利用python人脸识别完成考勤,更加灵活地实现动态考勤,采用“人”为基础的出勤方式,能够有效解决代人出勤的问题,因为不受其他外来因素的影响,这样的考勤系统后期维护工作量小,成本低使用人脸识别考勤虽然在准确度亟需提升,但是进步有目共睹,得到的考勤可信度开始提高,结果更加真实、有效。

第二章开发技术及环境搭建

2.1、Dlib库介绍
最近这些年来,Python成长的开展适当迅猛。Python言语之所以开展得如此快,得益于其源代码开源性和代码开发的高效性。Python社区提供了很多的第三方库,它们可以完成数据可视化、数据剖析和科学计算等多个方面的功能,其中Dlib库便是一个比较出名的第三方库,可以完成人脸检测和识别,其算法选用HOG特征与级联分类器,算法的完成大概过程有:将照片图像进行灰度化;对于选用Gamma校正法对图画进行色彩空间的标准化;对每个图画像素进行梯度的计算;有效的小单元格区分图像画面;然后生成每个单元格的梯度直方图;把单元格组合成大的块,块内归一化梯度直方图;最后生成HOG特征描述向量。
Dlib是一个包含机器学习算法的C++开源工具包。Dlib可以帮助开发者创建许多复杂的机器学习软件,来解决各种各样的实际问题。目前,Dlib已经广泛应用于工业和学术领域,包括机器人、嵌入式设备、手机和大规模高性能计算环境等。还有一点就是,Dlib是开源和免费的。其git如图2.1:
在这里插入图片描述

图2.1

这里说一下有关Dlib的主要特点:
1.Dlib为每一个类和函数提供了完整的文档说明,同时还提供了debug模式;不像很多其他传统的开源库一样繁重。在debug模式中,用户大可以任意调试代码,查看变量和对象的值,并且能快速定位到错误点。此外,Dlib还提供了大量的实例供给参考。

  1. Dlib库具有高质量的可移植代码。众所周知,Dlib不依赖第三方库,无须安装和配置,这部分可前往官网how to compile的介绍,介绍界面在左侧树形目录里。
    还有就是,Dlib可用在window、Mac OS、Linux系统上,适配性比较高。

  2. 可以供给大量的机器学习或图像处理算法,这边可以参考《Dlib学习及换脸程序 》。可以总结为:
    (1)深度学习
    (2)基于SVM的分类和递归算法
    (3) 针对大规模分类和递归的降维方法
    (4)相关向量机。是与支持向量机相同的函数形式稀疏概率模型,对未知函数进行预测或分类。其训练是在贝叶斯框架下进行的,与SVM相比,不需要估计正则化参数,其核函数也不需要满足Mercer条件,需要更少的相关向量,训练时间长,测试时间短。
    (5)聚类: linear or kernel k-means, Chinese Whispers, and Newman clustering. Radial Basis Function Networks
    (6)多层感知机

2.2、Python3.6+OpenCV3.2环境搭建

2.2.1、python安装
可以从官网上下载最新版本的python,本文选择的是dmg文件,可以直接双击安装python3.6。
python官网:https://www.python.org/downloads/
完成之后需要更新一下PATH的目录:
Win+F,输入cmd,在~/.bash_profile中添加(显示不存在的话就要在这里进行添加)

$ vim ~/.bash_profile
export PATH=/usr/local/bin:$PATH

然后重新加载~/.bash_profile,保证更新成功

$ source ~/.bash_profile

确认python安装成功

$ which python3
/usr/local/bin/python
$ python3 –version
Python 3.6.1

2.2.2、搭建python虚拟环境
首先需要重新开一个虚拟环境来做python里opencv的开发。这里的作用,虽然虚拟环境不是必须的步骤,但是因为我们电脑需要开发各种各样的项目,避免冲突。

首先,安装虚拟环境 virtualenv 和 virtualenvwrapper。

pip3 install virtualenv virtualenvwrapper

这个虚拟环境是在python环境中都可以用的。这里我们更新~/.bash_profile 的设置。

#Virtualenv/VirtualenvWrapper
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

然后重新加载.bash_profile:

$ source ~/.bash_profile

为了便于安装一些这个项目需要的额外的包并进行图片处理,这里创建一个cv3的虚拟环境进行开发。
$ mkvirtualenv cv3 -p python3

mkvirtualenv后会自动进入cv3,这里有一个注意的事项:本身已经存在了此环境,需要再次进入该环境,用worken,成功进入到cv3环境:
$ workon CV3

在这里安装numpy是进入python的前提条件:
$ pip install numpy

2.2.3、安装openVC的先决条件

我把编译openVC能用到的开发工具这里详细列出来:
先是:
$ brew install cmake pkg-config

这里可以同时下载各种图片格式读取的包:

$ brew install jpeg libpng libtiff openexr

这些包,用于优化openVC程序:

$ brew install eigen tbb

2.2.4、编译openVC环境
官网上选择最新的版本进行检查更新,然后从Github用于下载openVC源码。
其中, Github的地址是: https://github.com/opencv/opencv
代码如下:
$ cd ~
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ git checkout 3.2.0 #需要下载opencv_contrib包。

完成后,去让OpenCV供给额外的支持,像内容检测等等。对于这方面,可以选择和OpenCV相同的版本进行下载

$ cd ~
$ git clone https://github.com/Itseez/opencv_contrib
$ cd opencv_contrib
$ git checkout 3.2.0

下载完成后,最后创建build文件夹:

$ cd ~/opencv
$ mkdir build
$ cd build

使用CMake进行build:
注:这里要确认OpenCV和python3模块都加载完成。

$ cmake -D CMAKE_BUILD_TYPE=RELEASE
     -D CMAKE_INSTALL_PREFIX=/usr/local
     -D PYTHON3_PACKAGES_PATH=~/.virtualenvs/cv3/lib/python3.4/site-packages
     -D PYTHON3_LIBRARY=/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4m.dylib
     -D PYTHON3_INCLUDE_DIR=/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/include/python3.4m
     -D INSTALL_C_EXAMPLES=ON
     -D INSTALL_PYTHON_EXAMPLES=ON
     -D BUILD_EXAMPLES=ON
     -D BUILD_opencv_python3=ON
     -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules …

这里等CMake完成,没有产生报错,再继续进行编译:

$ make -j4
$ make install

(如果显示权限不足,就使用此语句)
$ make -j4
$ sudo make install

2.2.5、安装验证
验证cv2.so正确:

$ cd ~/.virtualenvs/cv3/lib/python3.4/site-packages/
$ ls -l cv2.so
-rwxr-xr-x 1 admin _developer 2017027 April 14 06:11 cv2.so

验证python中可以使用opencv包,import不报错:

(cv3)74-80-245-164:~ admin$ python3
Python 3.6.1 (default, April 14 2017, 05:23:16)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.

import cv2
————————————————

2.3、Python3.6+dlib19.4环境搭建
2.3.1、dlib之前的准备

dlib之前的准备就是前提安装好安装python3.6环境,还有
进入终端需要安装一系列可能用到的包如下:
安装easy-install:

$ sudo pip install python-setuptools

安装python-dev:

$ sudo pip install python-dev

安装numpy:

$ sudo pip install numpy

安装PIL:

$ sudo pip install Image

安装scipy:

$ sudo apt-get install python-scipy

安装matplotlib:

$ sudo apt-get install python-matplotlib

2.3.2、安装dlib依赖

Dlib必要安装的依赖:openblas,opencv:

$ brew install openblas
$ brew install opencv

还有dlib中so库必要的依赖 :libboost:

$ sudo pip install libboost-python-dev cmake

$ cd /usr/local/opt
$ ln -s /opt/X11 X11

2.3.3、安装dlib

正常选择进入dlib官网,下载安装包地址为:
http://dlib.net/
再选择合适位置解压或者使用git下载:
$ git clone https://github.com/davisking/dlib.git

完成下载后解压与安装步骤:

$ cd dlib/examples

$ mkdir build
$ cd build
$ cmake …
$ cmake –build . –config Release

这里再说一下dlib安装中的python模块:
Dlib的18.17中还有包括之前的版本里面,进入python_examples下运用bat实行编译,前提是编译需要先update:libboost-python-dev及cmake。

$ cd to dlib-18.17/python_examples
$ ./compile_dlib_python_module.bat

如果在18.18版本之后,就采用新办法,使用setup.py安装,让其生成so依赖文件:
$ cd dlib
$ sudo python setup.py install

在得到dlib.so之后将其复制到dist-packages目录下:

$ sudo cp dlib.so /usr/local/lib/python3.6/dist-packages/

设置python环境变量:

Put the following line in .bashrc or .profile

$ export PYTHONPATH=/path/to/dlib/python_examples:$PYTHONPATH

之后再安装一些可能会用到的依赖包:
安装skimage

$ sudo pip install python-skimage

安装imtools

$ sudo pip install imtools

2.3.4、实例检测

实例1:出现了X11窗口:
$ cd dlib/examples/build/ (标注人脸landmar)
我们需要手动打开笔记本的摄像头自动检验人脸头像:

#下载face landmark模型
$ wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

解压文件

$ ./webcam_face_pose_ex

实例2:人脸标记图片的显示:

$./face_landmark_detection_ex shape_predictor_68_face_landmarks.dat …/faces/2008_002506.jpg

2.4、数据库的建立

什么是数据库?现阶段我们所接触的数据库技术,诸如此类数据存储和统计,还有关于信息收集和整理以及信息发布等,一系列操作的完成。系统数据库,展开来剖析,数据库的设计应始于要求的前提下和相对统一的标准化的设计理论,根据各种技术处理的要求对真实的数据,符合软硬件操作系统的特点,并且可以使用现有的DBMS来满足用户对信息的需求进行合理的开发设计。系统的数据库必须按照规范来进行设计,数据库系统的开发应根据实际情况,制定相应的数据库流程图。
如图2.41所示。
在这里插入图片描述

                       图2.41:  数据库开发流程图

2.5、Visual Studio连接SQL Server数据库
2.5.1 连接数据库流程
这里要说一下,在VS的开发环境中,需要点击菜单中选中流程“工具-链接到数据库”按钮,再如图2.5所显示的界面,点击“更改”即可,这里需要选中需要的数据源类型,并且点击“确定”按钮即可。

在这里插入图片描述

                      图2.5:   更改数据源类型

在这里插入图片描述
图2.6:选择数据库文件

此时这种情况下。可以点击“浏览”添加数据库文件,如上图2.6所示

2.5.2 注意事项
在连接数据库的过程中,我们需要注意的是,这时可能会有权限访问限制:(图2.52)
mc39

图2.52
对应方法:鼠标右键点击该文件,之后“属性-安全-高级”,根据图片操作,在淡出的页面上点击“添加”按钮或者“启用继承”按钮,对当前用户有对该文件进行访问修改权限。
还有就是,“应用-确定”,接着再按一下确定就可以了。如果出现了如2.53那样的问题,原因是SQL Server的数据库管理工具还在处于管理状态。需要用鼠标对该数据库进行右击,而后将它分离,最后,点击“确认”完成。
在这里插入图片描述

图2.53
完成以上步骤,我们呢再从vs上点击打开,再点击“测试连接”,完成流程后就可以进行这类型代码的日常编写和操作了。

第三章设计需求分析

3.2 系统结构分析

(1)为了实现完整的人脸识别考勤,先对本考勤系统的数据库进行设计。
举例如下表格3.2(可选):
表3.2
人员属性表 签到时间表 信息注册属性表
考勤特殊信息登记表 统参数属性表 考勤记录属性表

(2)对考勤方案的制定,在我们完成对考勤系统的需求分析及可行性分析后,需要设计好一个较为完整的系统架构与模型。其流程是,用户通过注册,使用摄像头来收集人脸头像数据,建立了人脸档案存储进数据库。用户人脸识别,通过摄像头手机人脸图像与档案中的数据进行对比来实现人脸识别的验证。考勤系统的管理,到考勤管理系统界面设计,还有通过人脸识别记录的考勤情况。
(3)可对整个考勤管理体系准确的设计并实现其正常运转,包括但不限于对此系统运转的流程:考勤人员进行注册、考勤人的识别、考勤系统管理以及人员信息管理的整合。
(4) 最后是对考勤系统进行功能测试,设计针对的测试界面,检验各模块和整个系统的运行是否正常,可用到软件测试里面的白盒测试和黑盒测试。

3.3 系统性能需求分析
(1) 考勤系统可以全天不间断稳定的运作,确保每天呈现的系统故障次数不得超过1次,而且不论系统正处于更新或者故障修复状态,也都应确保考勤系统的考勤签到登记稳定运行及数据库考勤数据的稳定录入存储;
(2) 在系统设计里面可以考虑加入,故障时具备数据恢复功能,这样更安全可靠。应该对考勤历史信息和注册人员信息等关键信息具备必要的自动备份,防止造成信息丢失;
(3) 由于考勤系统的签到以后,出勤结果只能隔很长时间才能送考勤管理者的系统里,这样考勤管理员就不能及时地了解考勤情况,这样在安全性上就会出现漏洞,因此,考勤信息同步的及时性就很有必要了。所以系统的设计就应考虑具有时效性,考勤管理端口及时了解考勤人员的考勤情况。

3.1 开发需完成目标

本文的实现目标是完成一个简单的人脸识别考勤管理系统。该系统也可以简单设计分开考勤以及人脸识别模块分部实现模块的功能,而整个系统拥有的功能是:
(1)利用数据库完成人员注册及考勤信息录入;
(2)考勤系统人脸识别的功能,此为本论文重点研究的内容。
(3)考勤信息设定,以及考勤结构的导出。
(4)考勤系统拥有较高的识别率以及较快的识别速度

其目标的实现可以分为以下功能需求:

1.用户端人脸数据采集注册,通过摄像机收集面部图像,创建面部文件并将其存储在数据库中。
2.系统进行考勤用户人脸识别,将相机收集的面部图像与文件中的数据进行比较,然后进行验证。
3.考勤系统管理,管理界面和考勤通过人脸识别记录,迅速提取数据。
该系统是一个基于人脸识别的考勤系统。在功能实现中使用的Dlib库是基于深度学习的,利用经过训练的人脸关键点检测器和人脸识别模型得到人脸特征值。

3.4 功能性需求分析
由于根据需求设计的具有自身特色的考勤管理系统。在功能性需求分析方面分析设计如下:
(1)考勤的工作由复杂到简单:将复杂的考勤工作量分担开来,多人协同完成考勤流程,可统一控制又可以分权管理,这样考勤工作面前人尽其能,各种信息交流也能做到实时无阻。更需要注意的是系统界面设计要简洁、易于操作,界面简洁易懂,对电脑知识贫乏的人也可以正常独立办公;
(2)本管理系统是在线上进行考勤的,人员考勤动作和管理人员后台操作的结果都是实时可见的,不需要大量的传统考勤物料,减少了可操作性,更加环保科学,体现了办公环保无一次性损耗的优势。

3.5 本章小结
本章首先对本系统的实现目标进行概述,阐述系统总体要满足的功能,并且加以说明。接着我们对系统的功能需求进行分析,先介绍该考勤系统系统的运行流程,然后从数据管理、人脸信息管理、用户管理、考勤管理以及系统设计等几个方面进行系统分析,之后介绍了系统的结构,系统性能需求及功能性需求的详细概括和总结。

第四章 人脸识别考勤系统功能设计

4.1、功能概括
全文总结起来,其目标的实现可以分为以下功能需求:
1.用户端人脸数据采集注册,通过摄像机收集面部图像,创建面部文件并将其存储在数据库中。
2.系统进行考勤用户人脸识别,将相机收集的面部图像与文件中的识别数据来比较,然后实现自我检验。
3.最后的流程:考勤通过人脸识别来记录,及管理界面,并且迅速提取数据等考勤管理系统。
该系统是一个基于人脸识别的考勤系统。在功能实现中使用的Dlib库是基于深度学习的,利用经过训练的人脸关键点检测器和人脸识别模型得到人脸特征值。

4.2、考勤系统用户注册功能
注册开始,用户注册操作下,需要登记用户本人资料以及脸部模块信息。注册流程下,用户必须在摄像头前拍摄五幅人脸线条较好的正面人脸图片准备进行训练,如果有异常的训练情况,则提示用户需要执行重新训练流程,然后训练结果的特征模板和用户资料放到数据库里面。所说如图表4.2展示,这里可以将注册内容分为登陆信息模块,个人资料模块和人脸采集模块。
在这里插入图片描述

                               图4.2

4.3、数据库设计
4.3.1 SQL Server 数据库平台
在 Microsoft SQL Server 的数据平台上,我们可以将数据实现查询,报表等一系列的功能的运用,能够实现对所有数据进行组织和管理。
这里做一个特点的总结概括:
(1) 平台可信任性:这里的前提是完美搞定了企业公司最核心操作任务的应用。
(2) 平台的自动人性化:提供了一个全面的平台,在规定权限下,用户查询数据库实时更新的信息。

4.3.2 SQL 语言
Structured Query Language起于1974年,Boyce及Chamberlin提出了结构化查询语言,通过编写适当的 SQL 语句,可以从服务器得到想要的数据,简而言之,SQL是一个查询工具。
SQL是一种功能强大并且通用的的关系数据库语言。 作为一门基础语言,首先就可以在关系型数据库中使用,比如,你可以在Oracle或者MySQL中使用sql进行数据分析。另一方面,随着大数据的发展,我们在大数据平台上,也可以使用sql语言进行数据的分析和计算。它的影响已经超出了数据库领域,广泛应用于各个领域,SQL的可移植性也相当好。可以得出结论,标准化对工作非常重要,流程图4.32:

在这里插入图片描述

图4.32

4.3.3 数据库设计概括
本考勤系统数据库可以分为几个部分,人员属性表、人脸属性表、设定的签到日期表、签到时间表、信息注册属性表、考勤记录属性表、考勤特殊信息登记表,统参数属性表等,根据需求来增减。要保证数据库的储存效率以及所设计数据库时数据表的结构拥有尽量少的冗余。本文为了更好的展示系统设计的数据库,于本文2.4章节详尽介绍数据库概述要点。

用户管理
在这里,用户的信息数据囊括了所有注册信息,里面有考勤者的基础资料、人脸登记信息和登陆信息,其中用户基础资料可以包括身份证号码、姓名、性别、邮箱、职位(可选)等。用户管理针对人事管理员,是对用户信息进行管理,系统的设计上人脸信息可以包括采集的人脸图像和人脸特征信息,登陆信息包括用户名和密码。人事管理员可以根据实际需求对用户信息进行增删除查等权限。
考勤管理
一方面,考勤管理针对人事管理员,是对考勤信息的管理(增加,删除,修改,查询)。顾名思义,人事管理员可以有相应权限根据实际需求对考勤信息进行实时修正整理。其中,考勤信息包括了考勤规则、考勤记录和考勤结果。考勤记录则包括实际签到时间、实际签退时间、实际考勤方案等记录。另外需要注意的是,考勤规则中有对规定签到时间、规定签退时间,甚至是请假事宜的设置,根据不同的情况设置不同的考勤方案。这样更能实时对时段考勤记录表进行统计及公开,这样能初步提高数据库管理效率。

4.4、考勤系统识别流程
1.首先是实现人脸进行检测,检测流程主要工作是在图像中检出人脸头像,之后连成关键点,反馈位置范围;
2.规范化人脸,因为人脸头像在不一样的图像像素和关照强度里面等一系列影响于素霞,其展现的程度都是不一样的,更需要在此操作的之前一步基础进行校对。
3、提取人脸特征,校对完成之后,识别到的比较清晰的人脸头像进行特征提取进行下一步的人脸识别。
4:人脸识别是人脸检验的最后步骤,其流程就是把之前步骤提取的人脸特征和数据库中已有的人脸特征实行校正操作,完成最终识别流程(如图4.4)。

在这里插入图片描述

图4.4

4.5、系统界面的设计
本文设计的系统在运行界面里可以分为几个个模块,分别为考勤人员注册界面和登录界面、考勤人脸识别界面及考勤数据查询页面。
流程如下:
在登录的页面里,登录系统只需打开系统初始界面,前提是输入正确的账号(用户名)和密码,再选择正确的用户类型,就能登录。
员工注册方面就需要管理员的权限,在系统界面中输入考勤管理人账号密码,进入管理人管理界面之后,点击注册,进入到员工注册界面进行注册。在填写完各个员工的基本信息后,就可以开始进行员工的数据采集。主要包括了员工的图像信息和员工基本信息两大类。要注意的是,员工在拍摄照片时,要将摄像头位置对准摆正,保持良好的光照条件。这里需要摄像窗口中显示出的人脸位置正确、大小合适且细节比较清晰的时候,点一下拍摄。收集够了五张合乎识别标准的照片后,点击“完成”,即可进行下一位员工的注册。需要对采集后的人脸图像进行处理,然后用选样编号来定名并存储在划定的目录当中。
员工识别与考勤查询 :完成员工注册后,每次登录时,只需输入用户名和密码进入到系统后,就可以登录到签到界面,并且程序可以实现实时识别。识别完成后,通过摄像头检测的待考勤人员人脸图片后再进行归一化的图片,界面左侧窗口中的图片在右侧窗口则是实时显示的匹配图像,系统将会根据识别结果自动读取员工个人信息并记录登录时间。在确认显示的信息正确无误后,点击“确定”按钮即可完成考勤识别。

第五章 系统的实现

5.1、Python3.6+OpenCV3.2识别
5.1.1、获图实时检测
通过调用摄像头获取图片进行实时检测。而调用摄像头获取图片了以后,图片里面的头像会用方框自动圈起来,会实时跟随人脸调整位置。流程的代码如下图5.11:

在这里插入图片描述

图5.11
常见会遇到灰度处理报错,cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182:error:(-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
这点需要注意目录和名字的问题 :路径得是绝对路径,而且目录名和文件名不能出现中文。

5.1.2、本地获取图片进行人脸检测并保存图片

在本地目录里面获得人脸图片文件,识别人脸后将结果图片再重新保存到本地目录里面。
流程如下图5.12:
在这里插入图片描述
图5.12: 检测人脸图片自动获得图片中人脸的坐标
 size=image.shape[:2] #当前桢彩色图像的获得。
#image_set=np.zeros(size,dtype=np.float16)
#这里定义一个的灰度图像矩阵,是与当前桢图像大小是相同的
 image_grey = np.zeros(size, np.uint8)# 创建一个空白图片,下图5.13

在这里插入图片描述
图5.13

grey = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_binary = cv2.threshold(image,127,255,0)

将当前桢图像转化为灰度图像,而后将灰度图片再转化为二进制图片

color = (135,206,250)
#设置人脸框的颜色

在这里插入图片描述
图5.14 
 #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数,如图5,14
在这里插入图片描述

图5.15
#单独框出图片中每一张人脸
#画出矩形框(图5.15)
在这里插入图片描述

图5.16
保存新生成的图片,将当前帧保存为图片(图5.16)
在这里插入图片描述

图5.17
 #获得相应图片,并检测(图5.17)

image = cv2.imread(infile)
 #框框出图片中的人头像,选取每一个头像图,然后保存到单独文件夹中去。

#成立输出人像图的目录(图5.18)
在这里插入图片描述

图5.18
实现的效果如下:
选取的图片与识别后的图片(图5.19,图5.20):
在这里插入图片描述

图5.19

图5.20

经过系统的反复试验,还是存在明显的识别问题,如果上传的头像照片有晃动情况,再比如出现戴帽子、眼镜遮挡的人脸图片等,这些明显影响线条的情况,识别效果就会很差,本试验只有唯一一个没有帽子遮挡的人脸被识别成功的情况,这里需要再作研究。
————————————————

5.2、Python3.6+dlib19.4识别实例

5.2.1、生成方形框识别人脸
官网代码简略总结:
在这里插入图片描述

5.2.2、关键线识别人脸
代码总结如下图5.22:
在这里插入图片描述

图5.22

#在源程序中,sys.argv命令行参数获取训练模型:sys.argv
#这里可以直接把目录写在程序中了去:

Predictor_path = “./data/shape_Predictor_68_face_landmarks.dat”

#用sys.argv命令行参数去获取文件夹路径,然后处理文件夹里的所有图片
#直接把图片路径写在程序里,每运行一次就只能提取一张图片的关键点

faces_path = “./data/3.jpg”

#这里是运用dlib自有的frontal_face_detector,由此作为人脸检测器(与人脸检测相同)

detector = dlib.get_frontal_face_detector()

#使用模型构建特征提取器,(官方提供)
predictor = dlib.shape_predictor(predictor_path)

#使用dlib提供的图片窗口
win = dlib.image_window()
#使用skimage的io读取图片
img = io.imread(faces_path)
#绘制图片
win.clear_overlay()
win.set_image(img)

#这里与人脸检测的程序相同,用detector进行人脸检测 ,而dets则为返回结果来使用
dets = detector(img, 1)
#dets的元素个数即为脸的个数
print(“Number of faces detected: {}”.format(len(dets)))

#enumerate 函数遍历序列中元素,和它们的下标
其中,下标k即为人脸序号,在这里需要说明一下,Left是作为人脸左边距离图片左边界的距离 ;Right是人脸右边距离图片左边界的距离 ;Bottom则是人脸下边距离图片上边界的距离;Top是人脸上边距离图片上边界的距离 。
程序代码如下图5.23,5.24:
在这里插入图片描述

图5.23
在这里插入图片描述

图5.24
5.3用户界面模块的实现
如图5.31,这是用户界面运行的结果。很显然,在这模块中用户界面模块是利用 MFC 来设计完成的。
在这里插入图片描述

图5.31
流程如下:待考勤人点击“打开图片”,系统保存个人待识别的人脸头像,并显示出来。程序会在后台实现人脸识别的流程,并且将结果输出右侧所示界面。这里所概括的识别结果囊括所识别出的注册人姓名、性别、及其正面图像等等信息。
界面设计所用到的代码图5.32,5.33如下:
在这里插入图片描述

图5.32
在这里插入图片描述

图5.33
用户拖动窗口实现最小化的时候,将调用此函数获得光标
DrawPicToHDC显示。代码如下图5.34,5.35:
在这里插入图片描述

                      图5.34

在这里插入图片描述
图5.35
// 进行复制,复制后将图片指定的区域(显示控件)
ReleaseDC(pDC); }

第六章考勤系统测试

6.1 测试的目的和意义
本文认为,考勤系统测试,目的是为了跟进到开发系统到系统运行存在的错误信息。和我们知道的测试规则所规定的那样:系统测试的首要目标是就是发现查询中的错误信息而执行程序的过程。这里可以做一个引用,成功的系统检测方案是能够发现到现在为止都没发现到的错误的测试,而作为好的测试方案是发现到现在为止都没有发现错误的测试方案。其中,人脸准确识别测试是测试中的一个重要的环节。在系统最终交给客户投入使用之前,系统测试是对软件的需求分析、系统设计开发等各阶段结果的必不可少的检验流程。

6.2 系统测试环境
测试环境:
1)硬件环境:笔记本自带前置摄像头,参数配置:Intel酷睿i5-7300Q七代处理器,8GB内存,硬盘512g,gtx860M。
2)开发环境:Windows 7专业版操作系统,这里是Python3.6+OpenCV3.2,Python3.6+dlib19.4 ,本系统采用了MicrosoRsual Studi0 2012平台和0penCV2.0开源库为开发工具,数据库采用了SQL Server 2008

6.3 系统测试原则
这里本文需要普及一下作为测试应遵循的原则:
(1)首先是要严格依照测试计划来进行软件测试,不能随意更改。软件测试一经发现错误就立刻排查,贯穿系统开发研究的整个流程,从而减少成本完善质量,优质开发。
(2)作为系统的开发人员,不应该而且尽量不要测试自己的程序。要做到保证了测试结果的公正客观,建议交给第三方的测试机构进行测试检验。
(3)软件测试用例构成,可以是由输入数据和预期结果组成。其中输入的条件考虑合理的,还有寻找那些不合理的条件,这样更加能帮助开发人员发现更多难以发觉的bug。
(4)系统测试过程中如果能发现错误的地方则很有可能是错误的高发之地,要做到对其重点照顾。也就是尽力注意“群集现象”。
(5)务必全面检查每一个测试结果,避免遗漏错误。
系统的测试如果遵从了如上的建议,就可以有事半功倍的回报,开发研究也能有更好的质量保障。

6.4 系统测试方法
在本次系统测试过程当中,借用了软工中的黑盒测试和白盒测试。白盒测试作为一种验证的手段,验证软件系统的构造是否正确。而黑盒测试却是一种确认技术,用来确认构造的系统软件有没有出现错误的情况。所以通过本次测试,期待能够发现软件中主要错误信息。
首先开始找寻系统中的运行错误,该类错误造成的原因大部分是脚本语言试图执行不可能的动作;还有一类错误信息是语法错误,非常常见,形成源于不正确的脚本语法。常见来看,错误地拼写命令,函数参数设置不正确等都会导致语法错误。还有需要注意的是语法错误会导致程序运行不顺畅导致错误信息,严格按照计划来测试;另外,逻辑错误通常难以发现。这类错误都会令程序执行结果会出现不对的现象。
还有再可以设计测试过程中的算法测试。这里可以设置,识别率及时间效率的算法厕所,还有就是这是由 OpenCV 为主的图像处理库中人脸识别算法测试。

在这里插入图片描述

图6.4

效果如上图6.4,具体流程:测试数据在 ORL数据库每单位筛出前 2 幅总为 80 张图,还有就是每单位选择前 5 张共 200 张图,到8张总 320 张图用于训练样本。每人后 5 幅共 200 幅图像作实验样本。

6.5 系统测试过程
第一阶段测试:
第一次测试中是让考勤系统的设计及研发人来实行,这样做的原因是为了测出考勤系统的语法和逻辑的错处。
我们先将系统登录和登录后系统中的常用功能实行例行检查,校对系统各功能模块的运作情况。之后,功能检验里面可以实行黑盒测试的方法来实现某一功能。例如,通过实施诸如补勤等应用模块,测试应用模块能不能正常工作。之后在每一次接口转换测试中,先使用白盒测试的方法。这里需要科普一下,黑盒测试主要基于功能,不考虑程序逻辑,设计输入,验证输出。一般只有10%代码行需要做白盒测试。白盒对程序中的逻辑错误信息进行测试,来整体纠改了发现的错误信息。

第二阶段测试:

我们要先看看我们设计的系统适不适合交给用户去使用,还有满不满足使用需求。自然而然的,此测试是终端用户来完成。通过它们需要相互配合来操作功能,也需要进行测试,以便找到错误信息。这里需要作一个分类,黑盒测试的优点就是比较容易入门。只有通过代码,我们才能够知道更加详细和精确的信息。

通软件系统初步交付给客户使用,可以在早期试运行阶段就可以对系统的整体运行进行测试。用户权限分配操作,测试系统管理权限是否满足初始要求,从而保证软件的稳定性、流畅性和正确性。其次操作用户和后台管理员分别进行各种操作,测试系统平台各功能模块的满意度。通过这一阶段的系列测试,我们主要为了找出软件系统的功能缺陷,即各种功能是否满足用户的需求,从而并进一步完善用户不满意的功能模块。
最后,系统的总体测试是在每个模块测试成功的基础上进行的。测试的主要方向是各模块之间的接口是不是正确的,系统接口是否能正常加载,测试过程中的操作能
不能正常。结果如下图6.51,6.52
在这里插入图片描述

图6.51

在这里插入图片描述
图6.52

6.6 考勤系统测试总结
通过了上文流程的系统测试环节,不出意料是出现了非常多的bug。对于系统本身的错误信息,已经尽力去完善和修复。通过这次测试,反映了好多之前没有发现的问题需要去跟进。总的来说,本次系统的计划及开发研讨初步解决了作为用户的考勤管理需求。各项功能相对完善,为考勤类应用场景工作带来便利。
说到系统虽然完成了,但是出现的问题还是需要我们去正视的,鉴于本人水平有限,本设计理论上还有很大的进步空间。因为本文使用的人脸数据库容量有限,还有一点就是人脸检测的过程太多非控因素,比如光照、姿态、表情变化等多方面的影响,摄像机进行注册识别的时候,拍摄环境光线均匀,并且姿态相对正确,识别器的表情正常,这样子识别率会非常高,但如果将在非受控环境下采集的图像用于配准和识别,识别率会相对降低。

参考文献:

[1]梁晶 史记征. 基于Python库的人脸识别方法研究[J]. 网络安全技术与应用, 2019(07):49-50.
[2]魏庆丽 朴冠宇 李娇阳 吴字宇 凌振宝. 基于射频卡式身份识别的智能教室考勤系统[J]. 吉林大学学报(信息科学版), 2013(04):68-74.
[3]伍军辉. 人脸识别市场问题面面观[J]. 中国公共安全, 2014(19):75-78.
[4]王勇 李英祥 田娟 彭亮 殷礼安 彭阳 周浪. 公路建设工程安全生产信息化管理方案设计[J]. 科技风, 2019(02):113-115.
[5]落红卫. 移动智能终端生物识别应用与安全研究[J]. 保密科学技术, 2014(09):12-15.
[6]王丽达. 论软件系统的测试[J]. 经济研究导刊, 2011(14):317-318.
[7]宿静宜 刘久付 杨明海. 采用人脸身份识别的智慧门禁系统[J]. 软件导刊, 2019(04):38-41.
[8]袁凤连 刘双全 刘骐源. 基于视频检测的人脸识别智能安防设计[J]. 无线互联科技, 2018(21):77-78.
[9]陈瑶. 浅析人力资源管理创新问题[J]. 现代企业文化, 2016(9):2-2.
[10]胡博. A省农村信用社个人信贷管理系统的设计与实现[J]. 中国优秀硕士学位论文全文数据库, 2016(02):68-68.
[11]段治川. 数据导入关系型数据库内的探讨[J]. 电脑知识与技术, 2011(09):13-14.
[12]刘向荣. 对象关系阻抗不匹配的研究及其解决[J]. 电脑知识与技术, 2011(02):21-22.
[13]宋昱. 一种高性能即时通讯服务系统的设计[J]. 软件, 2016(12):4-4.
[14]梁礼方. 数据模型[J]. 金融科技时代, 2014(01):52-58.
[15]谢新文. 基于计算机视觉的电气化铁路绝缘子识别技术的研究[J]. 中国优秀硕士学位论文全文数据库, 2016(10):70-70.
[16]李艳梅 罗建. 《数据库系统概论》教学改革探讨[J]. 四川师范学院学报(自然科学版), 2003(01):19-21.
[17]程莉 吴利瑞 郭定夫 尤鸣宇. 基于人脸识别技术的新生入学复查工作研究[J]. 大学教育, 2018(10):3-3.
[18]马松梅 马松彪. 高校一卡通系统认证方式选择分析[J]. 硅谷, 2014(22):127-127.
[19]吴珊 龚格格. 一种基于监控视频中人脸检索解决方案[J]. 电子设计工程, 2019(10):76-80.

致谢

经过了一个多月的努力,终于写好了毕业论文,从懵懂,都是一边写一边学的,前期遇到了很多难点,因为是第一次使用dlib第三方库,在配置和操作上有点不熟练,耽误了很多时间去再学习,使得我不能如期的完成老师的计划,在此感谢老师的指导。在学校生活的三年时间里面,受恩于老师,同学们,在你们的帮助下,我快速成长。虽然在学习上面还不够努力导致现在工作中时常感到遗憾,但是,总体来说,我也没有浪费在学校的时间,在你们的帮助下搞清楚自己以后需要走什么样的路,并为前途去奋斗。万分感谢学校里面对我负责的老师们,由她们的带领下,我在大学的生活里面少走了很多弯路,学到了以后在社会工作中有用的本领。同时。谢谢!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值