python opencv人脸识别考勤系统

论坛 期权论坛     
选择匿名的用户   2021-5-30 11:16   68   0
<h3>python opencv人脸识别考勤系统</h3>
<p><strong>如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助!</strong></p>
<p><strong>运行结果如下:</strong></p>
<p><img alt="" height="316" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6a42548d4beb802001259ce8c2caf6e1.png" width="548"></p>
<p><strong>代码如下:</strong></p>
<pre class="blockcode"><code>
import wx
import wx.grid
from time import localtime,strftime
import os
import io
import zlib
import dlib  # 人脸识别的库dlib
import numpy as np  # 数据处理的库numpy
import cv2  # 图像处理的库OpenCv
import _thread
import threading

ID_NEW_REGISTER &#61; 160
ID_FINISH_REGISTER &#61; 161

ID_START_PUNCHCARD &#61; 190
ID_END_PUNCARD &#61; 191

ID_OPEN_LOGCAT &#61; 283
ID_CLOSE_LOGCAT &#61; 284

ID_WORKER_UNAVIABLE &#61; -1

PATH_FACE &#61; &#34;data/face_img_database/&#34;
# face recognition model, the object maps human faces into 128D vectors
facerec &#61; dlib.face_recognition_model_v1(&#34;model/dlib_face_recognition_resnet_model_v1.dat&#34;)
# Dlib 预测器
detector &#61; dlib.get_frontal_face_detector()
predictor &#61; dlib.shape_predictor(&#39;model/shape_predictor_68_face_landmarks.dat&#39;)

class WAS(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,parent&#61;None,title&#61;&#34;员工考勤系统&#34;,size&#61;(920,560))

        self.initMenu()
        self.initInfoText()
        self.initGallery()
        self.initDatabase()
        self.initData()

    def initData(self):
        self.name &#61; &#34;&#34;
        self.id &#61;ID_WORKER_UNAVIABLE
        self.face_feature &#61; &#34;&#34;
        self.pic_num &#61; 0
        self.flag_registed &#61; False
        self.puncard_time &#61; &#34;21:00:00&#34;
        self.loadDataBase(1)

    def initMenu(self):

        menuBar &#61; wx.MenuBar()  #生成菜单栏
        menu_Font &#61; wx.Font()#Font(faceName&#61;&#34;consolas&#34;,pointsize&#61;20)
        menu_Font.SetPointSize(14)
        menu_Font.SetWeight(wx.BOLD)


        registerMenu &#61; wx.Menu() #生成菜单
        self.new_register &#61; wx.MenuItem(registerMenu,ID_NEW_REGISTER,&#34;新建录入&#34;)
        self.new_register.SetBitmap(wx.Bitmap(&#34;drawable/new_register.png&#34;))
        self.new_register.SetTextColour(&#34;SLATE BLUE&#34;)
        self.new_register.SetFont(menu_Font)
        registerMenu.Append(self.new_register)

        self.finish_register &#61; wx.MenuItem(registerMenu,ID_FINISH_REGISTER,&#34;完成录入&#34;)
        self.finish_register.SetBitmap(wx.Bitmap(&#34;drawable/finish_register.png&#34;))
        self.finish_register.SetTextColour(&#34;SLATE BLUE&#34;)
        self.finish_register.SetFont(menu_Font)
        self.finish_register.Enable(False)
        registerMenu.Append(self.finish_register)


        puncardMenu &#61; wx.Menu()
        self.start_punchcard &#61; wx.MenuItem(puncardMenu,ID_START_PUNCHCARD,&#34;开始签到&#34;)
        self.start_punchcard.SetBitmap(wx.Bitmap(&#34;drawable/start_punchcard.png&#34;))
        self.start_punchcard.SetTextColour(&#34;SLATE BLUE&#34;)
        self.start_punchcard.SetFont(menu_Font)
        puncardMenu.Append(self.start_punchcard)


        self.close_logcat &#61; wx.MenuItem(logcatMenu, ID_CLOSE_LOGCAT, &#34;关闭日志&#34;)
        self.close_logcat.SetBitmap(wx.Bitmap(&#34;drawable/close_logcat.png&#34;))
        self.close_logcat.SetFont(menu_Font)
        self.close_logcat.SetTextColour(&#34;SLATE BLUE&#34;)
        logcatMenu.Append(self.close_logcat)

        menuBar.Append(registerMenu,&#34;&amp;人脸录入&#34;)
        menuBar.Append(puncardMenu,&#34;&amp;刷脸签到&#34;)
        menuBar.Append(logcatMenu,&#34;&amp;考勤日志&#34;)
        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU,self.OnNewRegisterClicked,id&#61;ID_NEW_REGISTER)
        self.Bind(wx.EVT_MENU,self.OnFinishRegisterClicked,id&#61;ID_FINISH_REGISTER)
        self.Bind(wx.EVT_MENU,self.OnStartPunchCardClicked,id&#61;ID_START_PUNCHCARD)
        self.Bind(wx.EVT_MENU,self.OnEndPunchCardClicked,id&#61;ID_END_PUNCARD)
        self.Bind(wx.EVT_MENU,self.OnOpenLogcatClicked,id&#61;ID_OPEN_LOGCAT)
        self.Bind(wx.EVT_MENU,self.OnCloseLogcatClicked,id&#61;ID_CLOSE_LOGCAT)


        pass

    def OnCloseLogcatClicked(self,event):
        self.SetSize(920,560)

        self.initGallery()
        pass

    def register_cap(self,event):
        # 创建 cv2 摄像头对象
        self.cap &#61; cv2.VideoCapture(0)
        # cap.set(propId, value)
        # 设置视频参数,propId设置的视频参数,value设置的参数值
        # self.cap.set(3, 600)
        # self.cap.set(4,600)
        # cap是否初始化成功
        while self.cap.isOpened():
            # cap.read()
            # 返回两个值:
            #    一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾
            #    图像对象,图像的三维矩阵
            flag, im_rd &#61; self.cap.read()

            # 每帧数据延时1ms,延时为0读取的是静态帧
            kk &#61; cv2.waitKey(1)
            # 人脸数 dets
            dets &#61; detector(im_rd, 1)

            # 检测到人脸
            if len(dets) !&#61; 0:
                biggest_face &#61; dets[0]
                #取占比最大的脸
                maxArea &#61; 0
                for det in dets:
                    w &#61; det.right() -
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP