python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)
python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)
2024-11-16 04:19:52  作者:重归旧好  网址:https://m.xinb2b.cn/sport/etb433428.html

一. 门禁考勤系统硬件设计

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 按照通讯协议,发送相应的指令数据包,便可控制模块。


AS608指纹模块

3)51单片机最小系统。

①12V电源电路,由于单片机最大能提供的电源只有5V,所以该电源为电磁锁提供12V的通电电源,实现门禁开锁。原理图如下。


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] 。


1.python安装过程


2.python安装成功

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;所有的库安装成功如下图


python相关库安装成功

2. 系统软件的总体设计

1、系统的需求分析:

该门禁兼考勤系统,采用python语言开发,可以通过AS608指纹模块收集每个用户的两枚指纹信息,可以对用户的指纹信息进行录入、验证和删除;可以通过电脑自带的摄像头添加用户的人脸信息,这里涉及到三个具体的问题,一个是怎样去采集、匹配和删除用户的指纹信息和人脸信息。二是持久化地保存这些信息到数据库中去,由于AS608指纹模块拥有存储用户指纹信息和id的功能,要考虑的是把对应的用户id、姓名和人脸信息对应的写入数据库,这里还涉及表的具体设计;另一个基本要求是通过指纹模块和摄像头来进行指纹识别和人脸识别来完成考勤和门禁,PC在通过串口发送一系列的指令包到指纹模块进行指纹识别,通过指纹验证后,可以通过遍历数据库里的用户面部数据与当前摄像头里的面部数据的比对来实现,存在问题有摄像头出现多张人脸[7]。三是需要对用户信息和考勤日志信息进行管理,这里涉及了用户模式与管理模式。扩展要求是添加了网页端的超级管理员模式。

本文希望达到的目标是:

1)此门禁兼考勤设计成软件UI操作界面,通过点击菜单进行操作,菜单拥有可用性和不可用性[7],具备用户模式和管理员模式,进入管理员模式需要输入正确的管理员账号和密码,如图2.1。而右边区域用于展示系统的LOGO图案和日志信息,如下图2.2;左边区域做控制台输出,打印相关信息,比如提示录入用户指纹信息、人脸信息与个人信息是否成功及其原因,提示用户验证信息,进行打卡成功、打卡失败及其原因,并通过串口通信控制51单片机实现门禁的功能。在添加指纹信、人脸信息和进行打卡的时候,人是必须和操作界面进行交互的。


2.1系统的菜单


2.2系统LOGO和部分日志信息

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学习资料

  • 热水壶去水垢怎么处理(热水壶水垢难以清理)
  • 2024-11-16热水壶水垢难以清理造型美观大方,烧水速度快又保温的电热水壶备受人们的喜爱,成为当今家庭很常用的小家电之一但电热水壶如果长时间使用,会产生水垢又很难清理,非常头疼水垢又有很多危害,大成大家先普及下:水垢的主要成分就是碳酸。
  • 我的世界新版本详解(我的世界暑期更新重磅上线)
  • 2024-11-16我的世界暑期更新重磅上线《我的世界》中国版“暑期更新”今日正式上线啦!全新生物“蜜蜂”已经飞到,它还带着全新家园功能新装主题界面、会员开箱玩法以及备受期待的冒险解谜玩法《天启:无尽幻境》一同闪亮登场陪冒险家们共度欢乐假期时光。
  • 吴磊阔腿裤搭配(20岁吴磊罕见扮可爱)
  • 2024-11-1620岁吴磊罕见扮可爱相信大家一定都看过《琅琊榜》吧,而在这部剧中饰演"小飞流"这一角色的演员就是小童星吴磊如今20岁的年纪,却早已经出演了很多影视作品,而吴磊也打破了童星会长残的魔咒,长大后看上去更为精致。
  • 牙龈反复长脓包怎么办需到牙科吗(戳破后还反复长出)
  • 2024-11-16戳破后还反复长出#健康科普挑战赛#@头号创作者大家对牙龈上长脓包的情况已经见怪不怪了,吃东西的时候总觉得不舒服,总会摩擦到这个位置如果没及时去处理脓包,它还可能越来越大而且越来越疼,连吃消炎药都不管用!胆子大的忍不住。
  • 张爱玲说海棠(关于海棠的故事)
  • 2024-11-16关于海棠的故事张爱玲这个名字呢,我们大家应该都不陌生,他写的小说我们大多数人应该都有看过,并且呢其中的倾城之恋应该粉丝还是很多的张爱玲的不少小说都拍成了电影或者是电视剧,就比如说色戒就拍成了电影张爱玲一生中有三大恨。
  • 斯里兰卡归属于哪个国家(斯里兰卡的介绍)
  • 2024-11-16斯里兰卡的介绍斯里兰卡本身就是个国家全称斯里兰卡民主社会主义共和国,旧称锡兰,是个热带岛国,位于印度洋海上,英联邦成员国之一中国古代曾经称其为狮子国、师子国、僧伽罗斯里兰卡有悠久历史的国际参与,是南亚区域合作联盟的。
  • 乳腺结节囊肿多久会癌变(i甲小百科乳腺囊肿是什么病)
  • 2024-11-16i甲小百科乳腺囊肿是什么病这次先把好话说在前面啊体检查出来乳腺囊肿,千万别恐慌,它并非一部分营销号造谣的所谓的“癌前病变”,而是个相当普通常见的临床症状它本质上是因为乳腺导管上皮产生了一些分泌性的变化,原本不具备分泌功能的导管。
  • 鱼缸充氧要多长时间(谈谈鱼缸充氧的知识)
  • 2024-11-16谈谈鱼缸充氧的知识近日,有些鱼友因对充氧的认识不足,导致建缸失败甚至造成不应有的损失,为使鱼友能对这一环节有足够的重视,谈谈鱼管家的认识,就算抛砖引玉,观点偏颇不当之处请站长和版主及各位鱼友斧正氧气是鱼类及水生生物赖以。
  • 9月70城房价出炉上海年内首跌(最新70城房价出炉)
  • 2024-11-16最新70城房价出炉国家统计局今日公布数据显示,8月70个大中城市中有19城新建商品住宅价格环比上涨,环比看,上海涨幅0.6%领跑,其他一线城市中,北京涨0.4%、广州跌0.2%、深圳跌0.4%国家统计局城市司首席统计师。
  • 上海迪士尼门票价格规定(上海迪士尼专享票价149元起)
  • 2024-11-16上海迪士尼专享票价149元起新民晚报讯(记者杨玉红)5月19日是《徐霞客游记》开篇日,于2011年被国家旅游局确定为“中国旅游日”今天上午,上海文旅局官微“乐游上海”发布最新消息显示,今年,上海迪士尼乐园、上海海昌海洋公园、上海。
  • 翕字的读音是什么(翕字怎么读)
  • 2024-11-16翕字怎么读翕的发音是:xī,本义是闭合,收拢,可表示合,聚,和顺的意思,另也可指鸟类躯部背面和两翼表面的总称相关组词:翕动翕张翕然嘘翕翕呷翕服翕歘翕趿翕侯翕受翕心翕散翕訿翕聚。