Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
off999 2024-10-27 11:55 34 浏览 0 评论
一. 门禁考勤系统硬件设计
1 .硬件总体结构
PC端的intel处理器作为硬件平台的核心,是衡量系统能否达到标准的主要标志。本文结合考勤系统,采用intel i5处理器的PC与51单片机共同构建了门禁兼考勤系统的硬件平台,相关的硬件将在之后描述。其硬件的总体框图如下图
2. 系统硬件实现
系统的主要器材包括PC机,AS608光学指纹模块,51单片机最小系统(STC89C52RC芯片),继电器,电磁锁。
1)PC机。
PC机搭载了Intel(R)Core(TM)i5-7200U CPU @2.50GHz 2.71的处理器,拥有4GB的RAM,自带30万像素的摄像头以及两个USB端口。其中一个USB端口(COM4)用于控制指纹模块,另外一个USB端口(COM3)用于控制单片机。
2)AS608光学指纹模块,如下图。
AS608指纹识别模块是ALIENTEK出品的一种性能优异的光学指纹识别模块。该模块采用了杭州晟元芯片技术有限公司的AS608指纹识别芯片。芯片内置 DSP 运算单元,集成了指纹识别算法,能高效快速采集图像并识别指纹特征[4]。该模块配备了串口、USB 通讯接口,用户无需研究复杂的图像处理及指纹识别算法,只要通过简单的串口、USB 按照通讯协议,发送相应的指令数据包,便可控制模块。
3)51单片机最小系统。
①12V电源电路,由于单片机最大能提供的电源只有5V,所以该电源为电磁锁提供12V的通电电源,实现门禁开锁。原理图如下。
②复位电路与晶振电路,如下图。
复位电路提供单片机复位功能,上电时可给单片机res脚提供相应的复位电平信号,在该系统中复位键还启到关闭电磁锁的作用;晶振电路可以给单片机提供时钟输入。
③继电器模块,如下图。
该模块结合PNP三极管,当P3.6高电平时,继电器未吸合,电磁锁处于关闭的状态;当P3.6低电平触发时,继电器吸合,电磁锁接通12V,处于关闭的状态。
④串口下载器,如下图。
该串口下载器具备下载.hex程序的功能,可以与PC机进行串口通信,又可以为单片机提供5V电源。
⑤电磁锁。
门禁系统的重点在于电磁锁,执行开锁关锁的动作。异于日常生活使用物品和人力来开锁,电磁锁通过高电平通电来打开锁,不存在传统意义的钥匙。
本文采用的电磁锁采用优质金属,防锈能力强,性能稳定,坚固耐用;表面采用电镀工艺,平滑无刺,开关顺畅,内部使用全铜线圈,通电开,断电锁[5]。本系统选择电磁锁作为系统的动作执行模块,采用广州某公司生产的通电开锁式电磁锁,如下图所示。其工作电压直流12V,使用电流为0.4A,可以长期通电。
二. 门禁考勤系统软件设计
1. 软件运行环境的搭建
搭建基于python+tkinter+opencv+dlib的指纹识别与人脸识别门禁兼考勤系统,需要先在PC端Windows10系统下安装python环境以及相关的库,步骤如下:
1)安装python3.5:选择任意浏览器登陆https://www.python.org/ftp/python/3.5.0/python-3.5.0-amd64.exe,下载并安装python3.5版本,安装过程中需要勾上Add Python3.5 to Path,如图1;安装完成后,打开命令提示符窗口,输入python后,会出现如图2的情况,则安装成功,否则安装失败[6] 。
2)安装系统所需要的库,pyhton3.5自带的有tkinter,sqlite3,time,os,serial,binascii,zlib,io,需要自行安装的有skimage,dlib,numpy,opencv,webbrowser。
安装skimage,dlib,numpy,webbrowser的方法如下:打开命令提示符窗口,依次输入pip install skimage, pip install dlib, pip install numpy, pip install webbrowser。安装opencv的方法如下:任意浏览器登陆http://www.lfd.uci.edu/~gohlke/pythonlibs/,选择opencv_python-3.1.0-cp35-cp35m-win_amd64.whl进行下载,然后拷贝opencv_python-3.1.0-cp35-cp35m-win_amd64.whl到Python安装目录Lib\site-packages下,最后在命令提示符窗口切换到D:\Program Files\Python\Lib\site-packages目录下,输入pip install opencv_python-3.1.0-cp35-cp35m-win_amd64.whl;所有的库安装成功如下图
2. 系统软件的总体设计
1、系统的需求分析:
该门禁兼考勤系统,采用python语言开发,可以通过AS608指纹模块收集每个用户的两枚指纹信息,可以对用户的指纹信息进行录入、验证和删除;可以通过电脑自带的摄像头添加用户的人脸信息,这里涉及到三个具体的问题,一个是怎样去采集、匹配和删除用户的指纹信息和人脸信息。二是持久化地保存这些信息到数据库中去,由于AS608指纹模块拥有存储用户指纹信息和id的功能,要考虑的是把对应的用户id、姓名和人脸信息对应的写入数据库,这里还涉及表的具体设计;另一个基本要求是通过指纹模块和摄像头来进行指纹识别和人脸识别来完成考勤和门禁,PC在通过串口发送一系列的指令包到指纹模块进行指纹识别,通过指纹验证后,可以通过遍历数据库里的用户面部数据与当前摄像头里的面部数据的比对来实现,存在问题有摄像头出现多张人脸[7]。三是需要对用户信息和考勤日志信息进行管理,这里涉及了用户模式与管理模式。扩展要求是添加了网页端的超级管理员模式。
本文希望达到的目标是:
1)此门禁兼考勤设计成软件UI操作界面,通过点击菜单进行操作,菜单拥有可用性和不可用性[7],具备用户模式和管理员模式,进入管理员模式需要输入正确的管理员账号和密码,如图2.1。而右边区域用于展示系统的LOGO图案和日志信息,如下图2.2;左边区域做控制台输出,打印相关信息,比如提示录入用户指纹信息、人脸信息与个人信息是否成功及其原因,提示用户验证信息,进行打卡成功、打卡失败及其原因,并通过串口通信控制51单片机实现门禁的功能。在添加指纹信、人脸信息和进行打卡的时候,人是必须和操作界面进行交互的。
2)系统通过建表来存储用户信息,考勤日志信息和管理员信息,每次新建录入用户指纹信息和人脸信息时,要求输入未存在的id和姓名,如查重证明id和姓名已存在,将无法进行下一步。接着用户进行指纹录入时,需要进行按压两次指纹,录入两枚相同的指纹,作为用户的指纹信息。当用户指纹录入成功后,开始进行人脸录入,此时只取面积最大的人脸,也就是距离屏幕最近的人脸,这是考虑到用户需要依次进行打卡验证。用户在进行人脸录入时存在两种情况:第一是一旦识别到人脸就自动捕获截图,连续截图达到10张就结束录入;第二是用户手动点击菜单结束录入,不一定要得到10张。结束录入后就开始从刚才捕获的用户面部提取人脸特征数据并连同之前输入的用户姓名等数据作为一行记录保存到数据库中,如果没有捕获到员工面部或者刚才捕获的面部信息不是同一个人,这行记录就被丢弃。
考勤时,须满足三个条件:用户的指纹信息和面部信息已录入、没有重复打卡,一旦打卡成功,用户的id、姓名、打卡日期及时间,是否迟到等信息,作为一行记录保存到数据库日志表logcat,并在左边控制台输出打卡成功信息,否则会在控制台输出失败及其原因信息。但是不管是否迟到,只要用户指纹信息和人脸信息都验证通过,电磁锁就可以自动打开5s。
3)系统拥有管理员模式与超级管理员模式。管理员模式是在管理员菜单栏中,点击进入管理员模式,输入正确的账号和密码后,管理员的所有菜单将变为可用,可以进行删除特定的指纹,一键删除指纹,删除本地用户人脸信息,删除数据库日志和用户信息,直接打开锁,进入网页端管理平台,在点击退出管理员模式之后,除了进入管理员模式,其他管理员的功能菜单将会再度变灰。而超级管理员模式,则是需要在网页端输入正确的超级管理员账号与密码后,将拥有修改用户信息,日志信息,管理员账号和密码的功能。
2、系统软件的目标:
1)为了实现需求分析的目标一,程序的界面初始化分为三部分,界面上方为菜单栏,界面左下方作为消息打印控制台,界面右下方为logo图案或日志信息展示面板,这界面的三部分是独立分开的;数据逻辑部分的初始化分为两部分,第一部分是初始化数据库,如果数据库/表不存在就新建,存在则加载相关数据,第二部分是初始化一些需要循环使用的变量,比如新建录入时的员工姓名、工号、截图数目计数器等,每当完成录入时这些数据都应该被重置成初始化以待下一次录入,把这些初始化语句写成一个函数可以提高代码复用度。
2)完成需求分析目标二主要是一些限制性条件,可以通过添加判断语句来实现:
①比如对输入id的合法性检验:
id = int(self.entry.get())
print(self.knew_id)
while id < 0:
messagebox.showwarning(title = "系统提示",message = "id不能为负数")
for knew_id in self.knew_id:
if int(knew_id) == id:
messagebox.showwarning(title = "系统提示",message =
"id已存在,请重新输入")
return False
其中id是从输入框得到的,self.knew.id是从数据库里加载出来的id列表,如果id非法(为负数),就会出现新的弹窗来提示id不能为负数。
②比如需要先指纹录入通过后才能进行人脸信息录入:
self.infoText.insert(INSERT,"\r\n对比两次指纹\r\n" )
sleep(1)
while True:
match = [0x01,0x00,0x03,0x03,0x00,0x07]
self.sendcmd(match)
self.receive()
if self.flag == 1:
self.infoText.insert(INSERT,"\r\n对比成功,两次指纹一样\r\n" )
sleep(1)
print("对比成功,两次指纹一样")
break
else:
print("对比失败,请重新录入指纹")
self.infoText.insert(INSERT,"\r\n对比失败,请重新录入指纹\r\n" )
sleep(1)
self.Buffer1()
self.Buffer2()
其中每个指纹进行录入的时候,需要录入两次相同的指纹,即调用函数self.Buffer1()和self.Buffer2();两个指纹对比成功之后,才可以跳出循环。
③再比如对拒绝多张人脸时、只处理距离屏幕最近的员工的面部信息:
if len(dets) != 0:
biggest_face = dets[0]
#取占比最大的脸
maxArea = 0
for det in dets:
w = det.right() -det.left()
h = det.top()-det.bottom()
if w*h > maxArea:
biggest_face = det
maxArea = w*h
dets是在视频流中出现的所有人脸数组,biggest_face是占面积最大的人脸。
3)完成需求分析目标三,需要在数据库多建一个管理员账号密码表,多增管理员菜单栏,完成管理员模式。超级管理员模式则是通过python+Django搭建网页端的管理后台。
2、本程序的设计思想大致可分为以下几个方面[7] :
1)面向对象的原则,整个系统程序的主体基本是一个System()类,所有函数的实现都围绕这个类展开。
2)界面的显示和数据逻辑分离的原则,System类的初始化过程包括界面的初始化和数据初始化,两者相互独立。
3)代码封装原则,程序包含多个函数,大部分语句集写成接口函数供调用,没有冗余的代码。
4)接口隔离原则:拥有多个功能性的接口函数,而不是单一的总接口函数。
3、系统的软件设计框图如下图:
此文未完,将持续更新。转发本文,关注私信小编,将可获得python学习资料。
相关推荐
- 纯净无毒的win7下载(有没有纯净的win7系统)
-
下面提供的是微软发布的Windows7各版本光盘ISO镜像下载地址,原始文件均来源自MSDN,和零-售彩盒版本光盘内容完全一致。请放心下载。(如果需要光盘的买家,请无视以下内容)下...
- ie浏览器文件损坏怎么修复(ie浏览器破坏怎么恢复)
-
可以在浏览记录里面查到。重新下载一次就行了如果你在IE浏览器里面下载的文件被你不小心删掉了,而且这个文件对你来说很重要,你可以打开你的IE浏览器选择历史记录,在历史记录里面就可以找到相关的下载的地方,...
- 电脑没音量是什么原因(电脑没音量是什么原因造成的)
-
电脑突然没有声音可能是由于以下原因:1.音量设置被关闭或静音;2.音频驱动程序出现问题或需要更新;3.音频设备连接问题,例如音频插头没有插好或者有问题;4.操作系统的声音设置出现问题。解决方法包括检查...
- 电脑蓝屏u盘装系统教程(电脑蓝屏系统u盘怎么装系统)
-
dell电脑蓝屏用U盘重装系统方法,1在需要重装的电脑上插入启动U盘,开机并不断按下U盘启动快捷键。2在进入系统启动菜单中选择带有USB字样的选项并回车。3进入系统引导选项界面,选择Windows1...
- 系统之家官网纯净版(系统之家首页)
-
我现在用的就是系统之家的win7,以前用的是系统之家纯净版的xp,纯净版的好处就是没有预装的软件,缺点就是有些东西要自己装,包括有些软件必须的东西。装个游戏又要装这个又要装那个的很麻烦,我现在都是安装...
- 声卡正常但是麦克风没有声音
-
1、检查声卡、连接线,以及音箱等设备是否连接正常;运行杀毒软件进行杀毒;2、右击“我的电脑”----“属性”---“硬件”----“设备管理器”,打开“声音、视频和游戏控制器”有无问题,即看前面有没有...
- coreldraw教程自学(coreldraw零基础教学视频)
-
1、CDR是矢量软件,国内印刷业和部分设计用的较多;2、基础入门操作:A、看你用在具体的哪个细分行业,如印刷排版方面、户外室内喷绘方面、图形设计方面、字体设计等等……输出的要求不一样,其他基本一样...
- cad2010序列号和密钥激活码免费
-
回答如下:不可以,CAD2010序列号和密钥是两个不同的概念。序列号是一个唯一的标识符,用于识别软件产品的副本。而密钥是一个加密字符串,用于验证软件副本的合法性。在安装CAD2010时,需要输入正确的...
- 笔记本电脑联想好还是惠普好
-
惠普和联想为全球名列前茅的电脑品牌,其中惠普为美国品牌,联想为中国品牌。联想作为一个后起之秀,当年通过收购thankpad品牌,走向全球。电脑中又分出多种风格的子品牌,有的注重游戏性能,有的注重轻薄商...
- 如何安装路由器步骤(安装路由器操作步骤)
-
路由器安装设置共分两个步骤,依次是”路由器与光猫“串联,“宽带账号写入路由器”即可,方法如下:?步骤一首先将路由器与光猫串联,用网线一端连接至“光猫”的LAN端口,另一端连接至“路由器”的WAN端口“...
- 86位系统是不是32位(86位和32位)
-
众所周知,同众多主打影音娱乐的系统不同,Windows从工业生产到金融消费、从个人应用到企业环境,应用领域极其广泛。以工业生产为例,嵌入式设备只需满足生产中特定的任务,并不追求过剩性能,故而现有绝大多...
- msdn官网下载系统u盘(msdn下载后要怎么做u盘启动盘)
-
1.打开MSDN网站并搜索您需要下载的系统。2.找到并单击“下载”按钮。3.如果系统有多个版本,请选择您需要的版本。4.选择“保存到磁盘”并单击“确定”按钮。5.将U盘插入计算机,并打开文件...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
