python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)
python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)
2024-06-30 04:50:17  作者:重归旧好  网址:https://m.xinb2b.cn/life/etb433428.html

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

1 .硬件总体结构

PC端的intel处理器作为硬件平台的核心,是衡量系统能否达到标准的主要标志。本文结合考勤系统,采用intel i5处理器的PC与51单片机共同构建了门禁兼考勤系统的硬件平台,相关的硬件将在之后描述。其硬件的总体框图如下图

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(1)

硬件总体框图

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

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(2)

AS608指纹模块

3)51单片机最小系统。

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

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(3)

12V供电电源

②复位电路与晶振电路,如下图。

复位电路提供单片机复位功能,上电时可给单片机res脚提供相应的复位电平信号,在该系统中复位键还启到关闭电磁锁的作用;晶振电路可以给单片机提供时钟输入。

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(4)

复位电路与晶振电路

③继电器模块,如下图。

该模块结合PNP三极管,当P3.6高电平时,继电器未吸合,电磁锁处于关闭的状态;当P3.6低电平触发时,继电器吸合,电磁锁接通12V,处于关闭的状态。

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(5)

继电器模块电路

④串口下载器,如下图。

该串口下载器具备下载.hex程序的功能,可以与PC机进行串口通信,又可以为单片机提供5V电源。

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(6)

串口下载器

⑤电磁锁。

门禁系统的重点在于电磁锁,执行开锁关锁的动作。异于日常生活使用物品和人力来开锁,电磁锁通过高电平通电来打开锁,不存在传统意义的钥匙。

本文采用的电磁锁采用优质金属,防锈能力强,性能稳定,坚固耐用;表面采用电镀工艺,平滑无刺,开关顺畅,内部使用全铜线圈,通电开,断电锁[5]。本系统选择电磁锁作为系统的动作执行模块,采用广州某公司生产的通电开锁式电磁锁,如下图所示。其工作电压直流12V,使用电流为0.4A,可以长期通电。

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(7)

电磁锁

二. 门禁考勤系统软件设计

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

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(8)

1.python安装过程

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(9)

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指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(10)

python相关库安装成功

2. 系统软件的总体设计

1、系统的需求分析:

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

本文希望达到的目标是:

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

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(11)

2.1系统的菜单

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(12)

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指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(13)

系统程序框图

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(14)

主界面

python指纹识别(PythonOpencvTkinter指纹识别与人脸识别的门禁兼考勤)(15)

管理员登陆界面

此文未完,将持续更新。转发本文,关注私信小编,将可获得python学习资料

  • 香蕉起黑点能吃么(长黑点的香蕉到底还能不能吃)
  • 2024-06-30长黑点的香蕉到底还能不能吃香蕉似乎在经历一次再流行:由香蕉泥、变种DNA和脂肪酸制作的小黄人占据了银幕,又成为各种玩偶和T恤;各种品牌的香蕉牛奶层出不穷,还有直接用香蕉制作出类似冰激淋口感的甜点的冰激淋机小黄人图片:pinte。
  • 白宇乔一成西装现场 白宇林间采风写真曝光
  • 2024-06-30白宇乔一成西装现场 白宇林间采风写真曝光2021年9月6日,白宇的一组写真曝光,他穿牛仔套装休闲复古,举起相机捕捉湖边风光生活感满满近日,电视剧《乔家的儿女》正在热播中,白宇在其中饰演大哥“乔一成”,他精湛的演技为观众们带来了极致的视听体验。
  • 花菜怎么炒好吃又简单易学(10分钟就能炒好一盘)
  • 2024-06-3010分钟就能炒好一盘这种蔬菜被列入“抗癌食谱”,10分钟就能炒好一盘,下饭更健康今天要和大家分享的是一种特别健康的蔬菜,也是我们餐桌上的常客"花菜",花菜也就是花椰菜,有一些地方也会称作是"菜花&。
  • 长江七号徐娇动态图(长江七号的徐娇你还记得吗)
  • 2024-06-30长江七号的徐娇你还记得吗《长江七号》的徐娇你还记得吗?好像自长江七号后,她就逐渐的淡出人们的视野,去美国读书了,不过也是,那时候的她才9岁,还是一副小男孩的模样!如今23岁的她是一枚萝莉少女!和小时候可谓是天差地别了,不知是。
  • 盛唐晚唐诗句(晚唐马戴最孤独的唐诗)
  • 2024-06-30晚唐马戴最孤独的唐诗中国人是非常重情的民族,体现在我们所看到的那些唐诗宋词当中,就是那些说不尽的离愁别恨,写不完的伤春悲秋,抒写不尽的羁旅思乡、怀才不遇……这些诗词虽然距离今天已经有上千年的历史,但是其中所内蕴的情感,和。
  • 揭阳最新城区规划(跨粤21城系列图说揭阳)
  • 2024-06-30跨粤21城系列图说揭阳大北山、大南山巍巍屹立,热带森林蒸腾着氤氲的云雾,守护着一片古老的土地;榕江、练江、龙江翻滚着碧浪清波,奔流入浩瀚南海,沿途养育了一方勤劳勇敢的人民山水之间,海陆之交,是700万人的美丽家园——揭阳美。
  • 牛仔鞋原创duck(手工鞋职人的upcycling丹宁鞋)
  • 2024-06-30手工鞋职人的upcycling丹宁鞋換季时,是否总疑惑那些沒穿几次衣服到底怎么来的、又该怎么处理?其实,你还有更好的方式:升级再造(upcycling),亦即把不需要的物品,改造重制为继续使用的产品举例来说,LouisVuitton的2。
  • 经济学专业排名(校友会2022中国大学经济学类专业排名)
  • 2024-06-30校友会2022中国大学经济学类专业排名哪些大学经济学类专业的最具综合竞争力?为了给2022年全国高考考生挑选“经济学类”专业提供权威参考,3月30日,全国第三方大学评价机构艾瑞深校友会网(Cuaa.Net)撰写完成、科学出版社出版发行的《。
  • 京剧演员李鸣岩逝世(87岁李鸣岩太君辞世)
  • 2024-06-3087岁李鸣岩太君辞世今日(8月11日)清晨,著名京剧表演艺术家,老旦演员李鸣岩因病去世,享年87岁李鸣岩的工作单位北京风雷京剧团为此发了讣告李鸣岩,1934年出生,国家一级演员常演剧目有《太君辞朝》《望儿楼》《遇后龙袍》。
  • 紫蔷薇的花语是什么(紫蔷薇的花语有哪些)
  • 2024-06-30紫蔷薇的花语有哪些紫色蔷薇花的花语含义很多,第一个是禁锢的爱,寓意着你深爱的人不能跟你相守,而你只能将这份深深的爱禁锢在心底,无法表达出来,它的花色比较的神秘,很少见,可以用来表达被禁锢、被压抑的爱第二个是破碎的心,用。
  • 斩杀黑网约车 网约车平台或出租车企业这样做将被关停
  • 2024-06-30斩杀黑网约车 网约车平台或出租车企业这样做将被关停打车出行你有过这样的体验吗?司机不按表计费,或计价器跳得比你心脏还快,A路线明明比B路线近啊!车里的你只能任人宰割?好消息来了!3月11日,全市出租汽车行业服务质量提升专项行动动员会召开即日起开展的整。