基于Python考勤系统的设计与实现.docx
《基于Python考勤系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Python考勤系统的设计与实现.docx(39页珍藏版)》请在冰豆网上搜索。
基于Python考勤系统的设计与实现
基于Python考勤系统的设计与实现
摘要:
近几年来,人脸识别的应用技术发展迅速,有效地提高了人脸识别的准确率和速度,为人脸识别在许多领域的应用铺垫好了根底。
而且自从2016年以来,人脸识别的应用领域逐步扩大,特别自从2016年下半年开始,人脸识别技术等的各种应用案例的运用落地速度飞快,普及程度也有所提高,诸如此类手机摄像头开锁及考勤门禁人脸识别功能等。
2017年出现井喷,在各种应用和领域中熠熠生辉,目前来看很有发展得前景。
经过几十年的发展,人脸识别技术已经成为计算机视觉领域的研究热点。
随着人脸识别算法的成熟,人脸识别技术已广泛应用于诸如此类财务支付、各种认证、美容摄像、公安事业等领域。
本文在如今Python人脸识别的现有研究成果下,显浅使用Python语言的第三方库Dlib,通过机器深度学习来实现人脸识别的各种功能,设计和实现创新的人脸识别的考勤系统,完成用户注册,用户识别,考勤系统管理等功能整合。
该系统考勤相对于传统考勤系统具有灵活、编程简单、准确率相对较高等的优势。
关键词:
人脸识别;Python语言;dlib库;考勤系统。
第一章绪论
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还提供了大量的实例供给参考。
2.Dlib库具有高质量的可移植代码。
众所周知,Dlib不依赖第三方库,无须安装和配置,这部分可前往官网howtocompile的介绍,介绍界面在左侧树形目录里。
还有就是,Dlib可用在window、MacOS、Linux系统上,适配性比较高。
3.可以供给大量的机器学习或图像处理算法,这边可以参考《Dlib学习及换脸程序》。
可以总结为:
(1)深度学习
(2)基于SVM的分类和递归算法
(3)针对大规模分类和递归的降维方法
(4)相关向量机。
是与支持向量机相同的函数形式稀疏概率模型,对未知函数进行预测或分类。
其训练是在贝叶斯框架下进行的,与SVM相比,不需要估计正则化参数,其核函数也不需要满足Mercer条件,需要更少的相关向量,训练时间长,测试时间短。
(5)聚类:
linearorkernelk-means,ChineseWhispers,andNewmanclustering. RadialBasisFunctionNetworks
(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
exportPATH=/usr/local/bin:
$PATH
然后重新加载~/.bash_profile,保证更新成功
$source~/.bash_profile
确认python安装成功
$whichpython3
/usr/local/bin/python
$python3–version
Python3.6.1
2.2.2、搭建python虚拟环境
首先需要重新开一个虚拟环境来做python里opencv的开发。
这里的作用,虽然虚拟环境不是必须的步骤,但是因为我们电脑需要开发各种各样的项目,避免冲突。
首先,安装虚拟环境virtualenv和virtualenvwrapper。
pip3installvirtualenvvirtualenvwrapper
这个虚拟环境是在python环境中都可以用的。
这里我们更新~/.bash_profile的设置。
#Virtualenv/VirtualenvWrapper
exportVIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
source/usr/local/bin/virtualenvwrapper.sh
然后重新加载.bash_profile:
$source~/.bash_profile
为了便于安装一些这个项目需要的额外的包并进行图片处理,这里创建一个cv3的虚拟环境进行开发。
$mkvirtualenvcv3-ppython3
mkvirtualenv后会自动进入cv3,这里有一个注意的事项:
本身已经存在了此环境,需要再次进入该环境,用worken,成功进入到cv3环境:
$workonCV3
在这里安装numpy是进入python的前提条件:
$pipinstallnumpy
2.2.3、安装openVC的先决条件
我把编译openVC能用到的开发工具这里详细列出来:
先是:
$brewinstallcmakepkg-config
这里可以同时下载各种图片格式读取的包:
$brewinstalljpeglibpnglibtiffopenexr
这些包,用于优化openVC程序:
$brewinstalleigentbb
2.2.4、编译openVC环境
官网上选择最新的版本进行检查更新,然后从Github用于下载openVC源码。
其中,Github的地址是:
代码如下:
$cd~
$gitclone
$cdopencv
$gitcheckout3.2.0#需要下载opencv_contrib包。
完成后,去让OpenCV供给额外的支持,像内容检测等等。
对于这方面,可以选择和OpenCV相同的版本进行下载
$cd~
$gitclone
$cdopencv_contrib
$gitcheckout3.2.0
下载完成后,最后创建build文件夹:
$cd~/opencv
$mkdirbuild
$cdbuild
使用CMake进行build:
注:
这里要确认OpenCV和python3模块都加载完成。
$cmake-DCMAKE_BUILD_TYPE=RELEASE\
-DCMAKE_INSTALL_PREFIX=/usr/local\
-DPYTHON3_PACKAGES_PATH=~/.virtualenvs/cv3/lib/python3.4/site-packages\
-DPYTHON3_LIBRARY=/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4m.dylib\
-DPYTHON3_INCLUDE_DIR=/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/include/python3.4m\
-DINSTALL_C_EXAMPLES=ON\
-DINSTALL_PYTHON_EXAMPLES=ON\
-DBUILD_EXAMPLES=ON\
-DBUILD_opencv_python3=ON\
-DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules..
这里等CMake完成,没有产生报错,再继续进行编译:
$make-j4
$makeinstall
(如果显示权限不足,就使用此语句)
$make-j4
$sudomakeinstall
2.2.5、安装验证
验证cv2.so正确:
$cd~/.virtualenvs/cv3/lib/python3.4/site-packages/
$ls-lcv2.so
-rwxr-xr-x1admin_developer2017027April1406:
11cv2.so
验证python中可以使用opencv包,import不报错:
(cv3)74-80-245-164:
~admin$python3
Python3.6.1(default,April142017,05:
23:
16)
[GCC4.2.1CompatibleAppleLLVM6.1.0(clang-602.0.53)]ondarwin
Type“help”,“copyright”,“credits”or“license”formoreinformation.
>>>importcv2
————————————————
2.3、Python3.6+dlib19.4环境搭建
2.3.1、dlib之前的准备
dlib之前的准备就是前提安装好安装python3.6环境,还有
进入终端需要安装一系列可能用到的包如下:
安装easy-install:
$sudopipinstallpython-setuptools
安装python-dev:
$sudopipinstallpython-dev
安装numpy:
$sudopipinstallnumpy
安装PIL:
$sudopipinstallImage
安装scipy:
$sudoapt-getinstallpython-scipy
安装matplotlib:
$sudoapt-getinstallpython-matplotlib
2.3.2、安装dlib依赖
Dlib必要安装的依赖:
openblas,opencv:
$brewinstallopenblas
$brewinstallopencv
还有dlib中so库必要的依赖:
libboost:
$sudopipinstalllibboost-python-devcmake
$cd/usr/local/opt
$ln-s/opt/X11X11
2.3.3、安装dlib
正常选择进入dlib官网,下载安装包地址为:
再选择合适位置解压或者使用git下载:
$gitclone
完成下载后解压与安装步骤:
$cddlib/examples
$mkdirbuild
$cdbuild
$cmake..
$cmake–build.–configRelease
这里再说一下dlib安装中的python模块:
Dlib的18.17中还有包括之前的版本里面,进入python_examples下运用bat实行编译,前提是编译需要先update:
libboost-python-dev及cmake。
$cdtodlib-18.17/python_examples
$./compile_dlib_python_module.bat
如果在18.18版本之后,就采用新办法,使用setup.py安装,让其生成so依赖文件:
$cddlib
$sudopythonsetup.pyinstall
在得到dlib.so之后将其复制到dist-packages目录下:
$sudocpdlib.so/usr/local/lib/python3.6/dist-packages/
设置python环境变量:
#Putthefollowinglinein.bashrcor.profile
$exportPYTHONPATH=/path/to/dlib/python_examples:
$PYTHONPATH
之后再安装一些可能会用到的依赖包:
安装skimage
$sudopipinstallpython-skimage
安装imtools
$sudopipinstallimtools
2.3.4、实例检测
实例1:
出现了X11窗口:
$cddlib/examples/build/(标注人脸landmar)
我们需要手动打开笔记本的摄像头自动检验人脸头像:
#下载facelandmark模型
$wget
#解压文件
$./webcam_face_pose_ex
实例2:
人脸标记图片的显示:
$./face_landmark_detection_exshape_predictor_68_face_landmarks.dat../faces/2008_002506.jpg
2.4、数据库的建立
什么是数据库?
现阶段我们所接触的数据库技术,诸如此类数据存储和统计,还有关于信息收集和整理以及信息发布等,一系列操作的完成。
系统数据库,展开来剖析,数据库的设计应始于要求的前提下和相对统一的标准化的设计理论,根据各种技术处理的要求对真实的数据,符合软硬件操作系统的特点,并且可以使用现有的DBMS来满足用户对信息的需求进行合理的开发设计。
系统的数据库必须按照规范来进行设计,数据库系统的开发应根据实际情况,制定相应的数据库流程图。
如图2.41所示。
图2.41:
数据库开发流程图
2.5、VisualStudio连接SQLServer数据库
2.5.1连接数据库流程
这里要说一下,在VS的开发环境中,需要点击菜单中选中流程“工具-链接到数据库”按钮,再如图2.5所显示的界面,点击“更改”即可,这里需要选中需要的数据源类型,并且点击“确定”按钮即可。
图2.5:
更改数据源类型
图2.6:
选择数据库文件
此时这种情况下。
可以点击“浏览”添加数据库文件,如上图2.6所示
2.5.2注意事项
在连接数据库的过程中,我们需要注意的是,这时可能会有权限访问限制:
(图2.52)
图2.52
对应方法:
鼠标右键点击该文件,之后“属性-安全-高级”,根据图片操作,在淡出的页面上点击“添加”按钮或者“启用继承”按钮,对当前用户有对该文件进行访问修改权限。
还有就是,“应用-确定”,接着再按一下确定就可以了。
如果出现了如2.53那样的问题,原因是SQLServer的数据库管理工具还在处于管理状态。
需要用鼠标对该数据库进行右击,而后将它分离,最后,点击“确认”完成。
图2.53
完成以上步骤,我们呢再从vs上点击打开,再点击“测试连接”,完成流程后就可以进行这类型代码的日常编写和操作了。
第三章设计需求分析
3.2系统结构分析
(1)为了实现完整的人脸识别考勤,先对本考勤系统的数据库进行设计。
举例如下表格3.2(可选):
表3.2
人员属性表
签到时间表
信息注册属性表
考勤特殊信息登记表
统参数属性表
考勤记录属性表
(2)对考勤方案的制定,在我们完成对考勤系统的需求分析及可行性分析后,需要设计好一个