人脸识别打卡项目(6)

目录

项目主框架实现

 1. 导入工具库

 2. 定义主体框架

GUI界面设计

1. 员工打卡模块

2. 人脸注册模块

3. 人脸删除模块

4. 查看员工打卡信息模块 

总结


项目主框架实现

将实验所需初始的背景图片【background.jpg】和OpenCV自带的分类器文件 【haarcascade_frontalface_alt2.xml】,拷贝到当前项目路径下(以实际项目路径为准)。

 1. 导入工具库

将项目自动生成文件main.py内容清空,输入以下代码,导入项目所需工库;

import wx
import wx.xrc
import wx.grid
import _thread
import cv2
import json
import sqlite3
import time
import numpy as np
import requests
from PIL import Image

点击右上角运行按钮,运行结果无报错,说明实验环境及第三方工具库部署成功!如图所示。

 2. 定义主体框架

定义人脸识别类Face_recognition,继承自wx.Frame类,用于初始化生成前端GUI框架,设置标题为"员工 考勤系统",窗口尺寸为(1000, 700);

定义主函数main(),实例化人脸识别类。代码如下:

import wx

class Face_recognition(wx.Frame):
    def init (self):
        self.frame = wx.Frame. init (self, parent=None, title="员工考勤系统",
        size=(1000, 700))
if __name__=='__main__':
    app = wx.App()

    frame = Face_recognition(parent=None)
    frame.Show()
    app.MainLoop()

点击右上角运行按钮,弹出主程序窗口!如图所示。

测试完成后,关闭弹窗!

GUI界面设计

 GUI界面的实现,可以使用可视化编辑工具wxFormBuilder实现,也可使用纯代码实现;

1. 员工打卡模块

员工打卡模块设计,主要完成打卡功能,示例如下:

2. 人脸注册模块

 人脸注册模块设计,主要完成注册功能,包括【员工id】文本框和【员工姓名】文本框,【确认】按 钮,示例如下:

3. 人脸删除模块

 人脸删除模块设计,主要完成删除功能,包括【员工id】文本框,【确认删除】按钮,示例如下:

4. 查看员工打卡信息模块 

主要完成信息查询功能,包括【查询】按钮,示例如下:

代码实现如下,在类中的初始化模块,添加初始化菜单代码:

import wx

class Face_recognition(wx.Frame):
    def init (self):
        self.frame = wx.Frame. init (self, parent=None, title="员工考勤系统",
        size=(1000, 700))
        self.initMenu() # 此处添加初始化菜单代码

然后在类中实现初始化菜单的方法initMenu() ,将以上4个GUI模块分别实现;

    def initMenu(self):
        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        bSizer1 = wx.BoxSizer(wx.VERTICAL)

        self.m_notebook1 = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_panel1 = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer2 = wx.BoxSizer(wx.VERTICAL)

        self.btnSign = wx.Button(self.m_panel1, wx.ID_ANY, u"打卡", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer2.Add(self.btnSign, 0, wx.ALL, 5)

        # 使用wx.Image()添加背景图片
        self.imageBackgroud = wx.Image('background.jpg', wx.BITMAP_TYPE_ANY).Scale(500, 400)
        # 当id的值为-1或者wx.ID_ANY时,系统会随机分配一个id
        self.bmpSign = wx.StaticBitmap(self.m_panel1, wx.ID_ANY, wx.Bitmap(self.imageBackgroud), wx.Point(0, 40))
        bSizer2.Add(self.bmpSign, 0, wx.ALL, 5)

        self.m_panel1.SetSizer(bSizer2)
        self.m_panel1.Layout()
        bSizer2.Fit(self.m_panel1)
        self.m_notebook1.AddPage(self.m_panel1, u"员工打卡", True)
        self.m_panel2 = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer3 = wx.BoxSizer(wx.VERTICAL)

        self.txtRegisterNum = wx.TextCtrl(self.m_panel2, wx.ID_ANY, u"工号", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.txtRegisterNum, 0, wx.ALL, 5)

        self.txtName = wx.TextCtrl(self.m_panel2, wx.ID_ANY, u"姓名", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.txtName, 0, wx.ALL, 5)

        self.btnRegister = wx.Button(self.m_panel2, wx.ID_ANY, u"注册", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer3.Add(self.btnRegister, 0, wx.ALL, 5)

        # 使用wx.Image()添加背景图片
        self.imageBackgroud1 = wx.Image('background.jpg', wx.BITMAP_TYPE_ANY).Scale(500, 400)
        self.bmpRegister = wx.StaticBitmap(self.m_panel2, -1, wx.Bitmap(self.imageBackgroud1), wx.Point(0, 60))
        bSizer3.Add(self.bmpRegister, 0, wx.ALL, 5)

        self.m_panel2.SetSizer(bSizer3)
        self.m_panel2.Layout()
        bSizer3.Fit(self.m_panel2)
        self.m_notebook1.AddPage(self.m_panel2, u"人脸注册", False)
        self.m_panel3 = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer4 = wx.BoxSizer(wx.VERTICAL)

        self.txtDeleteNum = wx.TextCtrl(self.m_panel3, wx.ID_ANY, u"工号", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer4.Add(self.txtDeleteNum, 0, wx.ALL, 5)

        self.btnDelete = wx.Button(self.m_panel3, wx.ID_ANY, u"删除", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer4.Add(self.btnDelete, 0, wx.ALL, 5)

        self.m_panel3.SetSizer(bSizer4)
        self.m_panel3.Layout()
        bSizer4.Fit(self.m_panel3)
        self.m_notebook1.AddPage(self.m_panel3, u"人脸删除", False)
        self.m_panel4 = wx.Panel(self.m_notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
        bSizer5 = wx.BoxSizer(wx.VERTICAL)

        self.btnSearch = wx.Button(self.m_panel4, wx.ID_ANY, u"查询", wx.DefaultPosition, wx.DefaultSize, 0)
        bSizer5.Add(self.btnSearch, 0, wx.ALL, 5)

        self.m_panel4.SetSizer(bSizer5)
        self.m_panel4.Layout()
        bSizer5.Fit(self.m_panel4)
        self.m_notebook1.AddPage(self.m_panel4, u"信息查询", False)

        bSizer1.Add(self.m_notebook1, 1, wx.EXPAND | wx.ALL, 5)

        self.SetSizer(bSizer1)
        self.Layout()

        self.Centre(wx.BOTH)

        # 按钮事件绑定
        self.btnSign.Bind(wx.EVT_BUTTON, self.sign_face)
        self.btnRegister.Bind(wx.EVT_BUTTON, self.register_face)
        self.btnDelete.Bind(wx.EVT_BUTTON, self.delete_face)
        self.btnSearch.Bind(wx.EVT_BUTTON, self.search_info)

 然后在类中实现,绑定4个GUI模块中按钮的响应函数;

grid = wx.grid.Grid(self, pos=(10, 80), size=(968, 560))
        grid.CreateGrid(100, 6)
        for i in range(100):
            for j in range(6):
                grid.SetCellAlignment(i, j, wx.ALIGN_CENTER, wx.ALIGN_CENTER)
        grid.SetColLabelValue(0, "工号")  # 第一列标签
        grid.SetColLabelValue(1, "姓名")
        grid.SetColLabelValue(2, "上班打卡时间")
        grid.SetColLabelValue(3, "是否迟到")
        grid.SetColLabelValue(4, "下班打卡时间")
        grid.SetColLabelValue(5, "工作时长(h)")

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

        grid.SetCellTextColour(3, 3, wx.GREEN)
        for i, id in enumerate(self.user_id):
            grid.SetCellValue(i, 0, str(id))
            grid.SetCellValue(i, 1, self.user_name[i])
            grid.SetCellValue(i, 2, self.time_1[i])
            grid.SetCellValue(i, 3, self.logcat_late[i])
            grid.SetCellValue(i, 4, self.time_2[i])
            grid.SetCellValue(i, 5, str(self.dur_time[i]))

点击右上角运行按钮,验证结果是否正确,弹出主程序窗口!如图所示。

 验证完成后,关闭窗口。

总结

本节课我们学习了项目主框架实现,GUI界面设计的相关内容。下节课我们将学习项目的最后一部分内容。我会带着大家一起完成人脸识别打卡项目的所有内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_54822781

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值