人脸识别打卡项目(4)

发布于:2023-01-04 ⋅ 阅读:(401) ⋅ 点赞:(0)

目录

服务器打卡函数实现

 签到验证检测

百度人脸识别复用

总结


服务器打卡函数实现

打卡函数的主要工作流程如图所示。当启动开始签到后,调用打卡签到响应函数,启动人脸采集设 备,然后与百度人脸库注册的人脸进行对比,如果用户存在,返回用户姓名,并获取当前打卡时间,与 考勤设定时间进行对比,然后将姓名、工号和考勤信息写入到数据库;如果用户不存在,返回“打卡失 败”提示信息。

 由“开始签到”的响应函数调用,实现代码如下。

定义“开始签到”响应函数OnStartPunchCardClicked,代码实现如下。

def OnStartPunchCardClicked(self,event):
    self.start_punchcard.Enable(False)
    self.end_puncard.Enable(True)
    self.loadDataBase(2)
    _thread.start_new_thread(self.punchcard_cap,(event,))
    pass

 签到验证检测

签到验证主要用于实现对用户考勤状态的管理和查阅,读取存储到本地数据库的考勤状态信息,并在可 视化界面显示,主要由3个函数实现,一是数据库加载函数loadDataBase();二是查看考勤日志响应函数 OnOpenLogcatClicked();三是关闭日志响应函数OnCloseLogcatClicked()。

数据库加载函数loadDataBase的实现如下所示,结合上节课中SQLite的python操作方法实现:

import sqlite3


def loadDataBase(self,type):
    conn = sqlite3.connect("inspurer.db") # 建立数据库连接
    cur = conn.cursor() # 得到游标对象
    if type == 1:
    self.knew_id = []
    self.knew_name = []
    self.knew_face_feature = []
    cur.execute('select id,name,face_feature from worker_info')
    origin = cur.fetchall()
    for row in origin:
    print(row[0])
    self.knew_id.append(row[0])
    print(row[1])
    self.knew_name.append(row[1])
    print(self.convert_array(row[2]))
    self.knew_face_feature.append(self.convert_array(row[2]))
    if type == 2:
    self.attend_id = []
    self.attend_name = []
    self.attend_time = []
    self.attend_state = []
    cur.execute('select user_id,user_name,sign_in_time,checking_statefrom attendance')
    origin = cur.fetchall()
    for row in origin:
    print(row[0])
    self.attend_id.append(row[0])
    print(row[1])
    self.attend_name.append(row[1])
    print(row[2])
    self.attend_time.append(row[2])
    print(row[3])
    self.attend_state.append(row[3])
    pass

查看考勤日志响应函数OnOpenLogcatClicked()的实现如下所示,需要输出显示工号、姓名、打卡时间、 是否迟到等信息。

import wx

def OnOpenLogcatClicked(self,event):
    self.loadDataBase(2)
    grid = wx.grid.Grid(self,pos=(320,0),size=(600,500))
    grid.CreateGrid(100, 4)
    for i in range(100):
        for j in range(4):
            grid.SetCellAlignment(i,j,wx.ALIGN_CENTER,wx.ALIGN_CENTER)
    grid.SetColLabelValue(0, "工号") #第一列标签
    grid.SetColLabelValue(1, "姓名")
    grid.SetColLabelValue(2, "打卡时间")
    grid.SetColLabelValue(3, "是否迟到")

    grid.SetColSize(0,100)
    grid.SetColSize(1,100)
    grid.SetColSize(2,150)
    grid.SetColSize(3,150)

    grid.SetCellTextColour("NAVY")
    for i,id in enumerate(self.logcat_id):
        grid.SetCellValue(i,0,str(id))
        grid.SetCellValue(i,1,self.attend_name[i])
        grid.SetCellValue(i,2,self.attend_time[i])
        grid.SetCellValue(i,3,self.attend_state[i])
    pass

关闭日志响应函数OnCloseLogcatClicked()如下所示。

def OnCloseLogcatClicked(self,event):
    self.initGallery()
    pass

百度人脸识别复用

介绍了人脸识别的实现过程,主要包括人脸注册和人脸搜索2个步骤,在此项目中,我们 需要对人脸注册和人脸搜索进行封装,实现对人脸识别各模块的复用。当新用户进行注册录入时,调用 人脸注册模块;当进行打卡签到时,调用人脸搜索模块,将打卡用户的人脸图像在人脸库中搜索,如在 人脸库中存在,返回用户姓名,如不存在,用户姓名为空。

人脸注册模块的封装,基本流程是采集人脸图像,注册至人脸库,注册成功返回True,否则,返回 False。

import requests
import base64

def face_register(path,user_id):
    f = open(path,'rb')
    image = base64.b64encode(f.read())
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add"
    params = {'image':image,
    'image_type':'BASE64','group_id':'vip','user_id':user_id,'quality_control':'LOW'
    }
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/json'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        return True
    else:
        return False

人脸搜索模块的封装,基本流程是读取人脸图像,搜索人脸库中图像并进行对比,如果返回值中用户对 比置信度“score”大于80,则返回该用户的“user_id”,否则返回空值。

import requests
import base64

def face_retrieve(imagePath):
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search"
    f = open(imagePath,'rb')
    image = base64.b64encode(f.read())
    params = {'image':image,
    'image_type':'BASE64','group_id_list':'vip','quality_control':'NONE'}
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/json'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        result = response.json()
    if result['result']['user_list'][0]['score'] >= 80:
        name = result['result']['user_list'][0]['user_id']
    else:
        name = " "
    return name

总结

本节课我们学习了服务器打卡函数实现, 签到验证检测,百度人脸识别复用的相关内容。下节课我们将学习实现所以项目需要的软件的安装的相关内容。我会带着大家一起完成人脸识别打卡项目的所有内容。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到