加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

500行Python代码打造刷脸考勤系统,其实也就那么简单

发布时间:2019-06-05 19:35:03 所属栏目:建站 来源:IT世界圈
导读:需求说明 员工刷脸考勤体系,回收Python说话开拓,可以通过摄像头添加员工面部信息,这里就涉及到两个详细的个题目,一个是应该以什么样的数据来标识每一个员工的面部信息,二是耐久化地生涯这些信息到数据库中去。更细地,还涉及表的计划;另一个根基要求
副问题[/!--empirenews.page--]

需求说明

“员工刷脸考勤”体系,回收Python说话开拓,可以通过摄像头添加员工面部信息,这里就涉及到两个详细的个题目,一个是应该以什么样的数据来标识每一个员工的面部信息,二是耐久化地生涯这些信息到数据库中去。更细地,还涉及表的计划;另一个根基要求是通过摄像头辨认员工面部信息来完成考勤,这个题目根基可以通过遍历数据库里的员工面部数据与当前摄像头里的员工面部数据的比对来实现,但有一个题目就是若是摄像头里有多张人脸改怎么处理赏罚。扩展要求是导出逐日的考勤表,可以拆分为两个部门,一个是存储考勤信息,一个是展示考勤信息。

我们但愿到达的方针是:

(1)模拟通用型软件界面计划的原则,全部的操纵都在菜单栏里实现,一部门地区用于展示摄像头及时读取并由措施加工后的视频流信息,另一部门地区做节制台输出,打印相干信息,好比提醒员工面部信息添加乐成、添加失败及其缘故起因,提醒员工打卡乐成、打卡失败及其缘故起因;添加面部信息时人是必需和措施举办交互的,好比输入一些相干的信息,这个时辰措施是阻塞的;可是在打卡的时辰,措施是不阻塞的,假如不点击封锁打卡,它会一向在打卡的模式,守候并辨认每一个前来打卡的员工,这较量切合实际的行使场景。

(2)建表来存储员工信息和考勤信息,每次新建录入员工面部信息时,要求输入工号、姓名,并查无重后方可录入,录入时只取间隔屏幕最近的员工的面部信息,这是思量到现实打卡都是依次举办而不是一群人一群人地打卡,录入时有两种模式可供选择,自动模式:一旦辨认到人脸就自动捕捉截图,持续截图到达10张就竣事录入;手动模式:点击菜单竣事录入,不必然要获得10张。竣事录入后就开始从适才捕捉的员工面部提取人脸特性数据并连同之前输入的员工姓名等数据作为一行记录生涯到数据库中,假如没有捕捉到员工面部可能适才捕捉的面部信息不是统一小我私人,这行记录就被扬弃。

考勤时,须满意三个前提:面部信息已录入、在打卡时刻段内、未一再打卡,只有打卡乐成,打卡人姓名及工号、打卡日期实时刻才会被当成一行记录生涯到数据库并在节制台输出打卡乐成信息,不然会在节制台输出失败及其缘故起因信息。

总而言之:我们的计划方针是类型化、人道化。

必要源码可以存眷、转发,私信小编“01”领取,尚有免费Python进修视频资料赠予。

500行Python代码打造刷脸考勤体系,着实也就那么简朴

总体计划

为了完成上述方针一,措施的界面初始化分为三部门,第一部门初始化菜单栏,第二部门初始化左边节制台,第三部门初始化右边展示面板,使这三部门彼此独立;数据逻辑部门的初始化分为两部门,第一部门是数据库部门的初始化,假如数据库/表不存在就新建,存在则加载相干数据,第二部门是初始化一些必要轮回行使的变量,好比新建录入时的员工姓名、工号、截图数量计数器等,每当完成录入时这些数据都应该被重置成初始化以待下一次录入,把这些初始化语句写成一个函数可以进步代码复费用。

上述方针二首要是一些限定性前提,可以通过添加判定语句来实现,好比对输入id的正当性检讨:

  1. while self.id == ID_WORKER_UNAVIABLE: 
  2. self.id = wx.GetNumberFromUser(message="请输入您的工号(-1不行用)",prompt="工号", caption="温馨提醒", value=ID_WORKER_UNAVIABLE, parent=self.bmp,max=100000000,min=ID_WORKER_UNAVIABLE) 
  3. for knew_id in self.knew_id: 
  4. if knew_id == self.id: 
  5. self.id = ID_WORKER_UNAVIABLE 
  6. wx.MessageBox(message="工号已存在,请从头输入", caption="告诫") 

个中ID_WORKER_UNAVIABLE是id的初始化值-1,不行用,self.knew.id是从数据库里加载出来的id列表,假如id犯科(已一再可能不在0~100000000,就会一向有新的弹窗来提醒输入id。

再好比对拒绝多张人脸时、只处理赏罚间隔屏幕最近的员工的面部信息:

  1. if len(dets) != 0: 
  2. biggest_face = dets[0] 
  3. #取占比最大的脸 
  4. maxArea = 0 
  5. for det in dets: 
  6.  w = det.right() - det.left() 
  7.  h = det.top()-det.bottom() 
  8.  if w*h > maxArea: 
  9.  biggest_face = det 
  10.  maxArea = w*h 

dets是侦测到的全部面部数组,biggest_face是间隔屏幕最近的面部。

措施框图:

500行Python代码打造刷脸考勤体系,着实也就那么简朴

注:图片如看不清也可在线预览

https://www.processon.com/view/link/5bbcc953e4b08faf8c7324a1

本措施的计划头脑大抵可分为以下几个方面

  • 面向工具的原则,整个措施的主体就是一个WAS(WorkAttendanceSystem)类,全部的实现都环绕这个类睁开。
  • 界面和数据逻辑疏散的原则,WAS类的初始化进程包罗界面的初始化和数据初始化,两者彼此独立。
  • 代码封装原则,多次挪用的语句集写成接供词挪用,没有冗余的代码。
  • 接口断绝原则:行使多个专门的接口,而不是行使单一的总接口。

函数清单

注:全部类内的函数的第一个参数为self,表白该函数属于该类,后头不再赘述

def __init__(self)

  • WAS类的结构函数,首要是完成一些初始化操纵,如初始化菜单、信息打印面板、主展示面板以及初始化加载数据库、初始化轮回行使的变量。

def initMenu(self):

  • 完成菜单的初始化表现,点击变乱绑定。

def initInfoText(self):

  • 完成左边信息提醒面板的初始化表现。

def initGallery(self):

  • 完成右边主展示面板的初始化表现。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读