OpenCV+ Qt Designer 开发人脸识别考勤系统

news2025/1/10 20:22:47

文章目录

  • 1. 系统介绍
  • 2. 系统架构
  • 3. 开发步骤
    • 3.1 安装必要的库
    • 3.2 设计用户界面
    • 3.3 编写代码
      • 3.3.1 导入库
      • 3.3.2 连接数据库
      • 3.3.3 定义主窗口类
      • 3.3.4 实时显示摄像头画面
      • 3.3.5 进行人脸识别
      • 3.3.6 手动打卡
      • 3.3.7 显示打卡时间
      • 3.3.8 显示图片
      • 3.3.9 运行主程序
  • 4. 总结

1. 系统介绍

本系统是一个基于OpenCV和 Qt Designer 的人脸识别考勤系统,主要功能是自动识别摄像头中的人脸,并把人脸对应的姓名和打卡时间存储到数据库中,方便管理人员进行考勤管理。本系统使用 face_recognition 库进行人脸识别,使用 PyQt5 开发界面,然后把界面与代码进行整合。

2. 系统架构

系统主要由以下几个模块组成:

用户界面:使用 PyQt5 设计界面,包括摄像头画面、人脸识别结果、打卡时间等。
摄像头模块:使用 OpenCV 库获取摄像头视频流,实时显示在用户界面中。
人脸识别模块:使用 face_recognition 库进行人脸识别,并将结果显示在用户界面中。
数据库模块:使用 sqlite3 库进行数据存储,把人脸对应的姓名和打卡时间存储到数据库中。

3. 开发步骤

3.1 安装必要的库

本系统需要的主要库有:

PyQt5:用于设计用户界面。
OpenCV:用于获取摄像头视频流。
face_recognition:用于进行人脸识别。
sqlite3:用于进行数据存储。
可以通过以下命令安装:

pip install pyqt5 opencv-python face_recognition sqlite3

3.2 设计用户界面

使用 Qt Designer 设计用户界面。用户界面应该包括以下几个部分:

摄像头画面:用于实时显示摄像头视频流。
人脸识别结果:用于显示识别出的人脸及对应的姓名。
打卡时间:用于显示打卡时间。
打卡按钮:用于手动打卡。
可以参考下面的截图:

在这里插入图片描述

3.3 编写代码

3.3.1 导入库

import sys
import cv2
import face_recognition
import sqlite3
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QPushButton

3.3.2 连接数据库

conn = sqlite3.connect('attendance.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS attendance
             (name TEXT, time TEXT)''')
conn.commit()

3.3.3 定义主窗口类

class MainWindow(QDialog):
    def __init__(self):
        super().__init__()

        self.camera_label = QLabel(self)
        self.camera_label.resize(640, 480)
        self.camera_label.move(20, 20)

        self.result_label = QLabel(self)
        self.result_label.resize(300, 300)
        self.result_label.move(700, 20)

        self.time_label = QLabel(self)
        self.time_label.resize(300, 50)
        self.time_label.move(700, 350)

        self.button = QPushButton('打卡', self)
        self.button.resize(100, 50)
        self.button.move(700, 420)
        self.button.clicked.connect(self.check_attendance)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.show_camera)
        self.timer.start(30)

        self.video_capture = cv2.VideoCapture(0)

        self.setGeometry(100, 100, 1024, 480)
        self.setWindowTitle('人脸识别考勤系统')

3.3.4 实时显示摄像头画面

 def show_camera(self):
        ret, frame = self.video_capture.read()
        frame = cv2.flip(frame, 1)
        rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        self.display_image(rgb_frame, self.camera_label)

3.3.5 进行人脸识别

  def face_recognition(self, frame):
        face_locations = face_recognition.face_locations(frame)
        face_encodings = face_recognition.face_encodings(frame, face_locations)

        for face_encoding in face_encodings:
            matches = face_recognition.compare_faces(known_faces, face_encoding)
            name = "Unknown"

            face_distances = face_recognition.face_distance(known_faces, face_encoding)
            best_match_index = np.argmin(face_distances)

            if matches[best_match_index]:
                name = known_names[best_match_index]

            self.display_image(frame, self.result_label)
            self.result_label.setText(name)

            if name != 'Unknown':
                c.execute("INSERT INTO attendance VALUES (?, datetime('now', 'localtime'))", (name,))
                conn.commit()

3.3.6 手动打卡

  def check_attendance(self):
        name = self.result_label.text()
        if name != 'Unknown':
            c.execute("INSERT INTO attendance VALUES (?, datetime('now', 'localtime'))", (name,))

            conn.commit()

3.3.7 显示打卡时间

 def show_time(self):
        c.execute("SELECT * FROM attendance ORDER BY time DESC")
        result = c.fetchone()
        if result:
            name, time = result
            self.time_label.setText(f"{name} 打卡时间:{time}")

3.3.8 显示图片

  def display_image(self, img, label):
        qformat = QImage.Format_Indexed8
        if len(img.shape) == 3:
            if img.shape[2] == 4:
                qformat = QImage.Format_RGBA8888
            else:
                qformat = QImage.Format_RGB888
        img = QImage(img, img.shape[1], img.shape[0], qformat)
        img = img.rgbSwapped()
        label.setPixmap(QPixmap.fromImage(img))
        label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

3.3.9 运行主程序

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

4. 总结

本文介绍了如何使用 Python 和 Qt Designer 开发人脸识别考勤系统。该系统可以自动识别摄像头中的人脸,并把人脸对应的姓名和打卡时间存储到数据库中,方便管理人员进行考勤管理。希望本文对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day13 - 对指纹图片进行噪声消除

在指纹识别的过程中,指纹图片通常都是现场采集的,受环境的影响会有产生很多的噪声点,如果直接使用,会对指纹的识别产生很大的影响,而指纹识别的应用场景又都是一些比较严肃不容有错的场合,所以去除噪声又不…

MySQL——存储引擎与索引应用

文章目录 一、 存储引擎1.1 MySQL结构1.2 存储引擎简介1.3 存储引擎特点1.3.1 InnoDB1.3.1.1 InnoDB 基本介绍1.3.1.2 InnoDB 逻辑存储结构 1.3.2 MyISAM1.3.3 Memory 1.4 三种引擎特点及区别1.5 存储引擎选择 二、 索引 - 重点2.1 介绍2.2 索引结构2.2.1 B-Tree 多路平衡二叉树…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师,我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分,对于每一个从事网络安全工作的人员来说,不仅需要掌握一定的技术能力,更需要具备全面的综合…

Python学习之pygame模块介绍并制作代码雨

前言 对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制窗口,反馈键盘鼠标信息,播放音频文件,渲染图片文字等等功能…

Java接口测试实战:掌握JMeter技能,让测试更高效!

目录 引言 一.java环境搭建 二.操作示例 1.添加信息头 2.添加请求路径和请求参数 3.添加单个文件 4添加文件集合 三.实操注意事项 1.登录 1.1登录界面断言注意事项 1.2登录界面定义token 2.首页 2.1http请求只有路径 2.2需要引用token变量 3.产品管理 3.1增加产…

Acrel 2000E/G配电室综合监控系统

1、概述 在信息化建设中,配电室运行处于信息交换管理的核心位置,这就要求配电室内所有设备需要时时刻刻正常运转,一旦某台设备出现故障,对数据传输、存储及系统运行构成威胁,就会影响到全局,如果不能及时处…

python flask p5.js mysql 实现数据库查询并网页显示数据(后附完整代码分享)

tips:不涉及session,是纯简单数据共享 实现步骤: 第一步:搭建框架第二步:创建数据库第三步:设计前端网页第四步:后端实现存储数据库整体实现需要的代码文件: 第一步:搭建框架 首先f…

Unity-vr用眼睛注视选择物体

Unity-vr用眼睛注视选择物体 文章目录 Unity-vr用眼睛注视选择物体工程版本用法说明脚本说明WatchController - 注视主控制器WatchEvent - 注视事件WatchGameobject - 被注视物体TimerTool - 计时器工具 总结 工程版本 unity2019.4.9f1 vs2019 项目工程源代码下载 用法说明 …

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023) Windows 11, version 22H2 官方原版,2023 年 5 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作…

《计算之魂》引子

了解计算机基本原理的读者朋友可以跳过这个引子直接阅读第 1 章,因为本书其他章节并不依赖本章内容。不过,如果你愿意花上半小时读一读这一部分,相信会从数学和哲学层面对计算机以及计算的本质有更深刻的理解。 0.1 什么是计算机 如果你有…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层,box是他们的父级,一般浏览器支持都没什问题需要注意的是,确保父元素不是透明的, 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用,还得是纯色,没去深究,设置纯色…

集成gtest进行单元测试之cmake应用

编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候…

二、CNNs网络架构-卷积分离网络架构

《A review of convolutional neural network architectures and their optimizations》论文指出AlexNet的优异性能证明了可以通过增加网络深度提高网络性能。随着网络层数的不断增加,不断增加的计算负担和不显著的性能提升使得更先进的网络架构成为另一个主要的研究…

如何在华为OD机试中获得满分?Java实现【字符串分隔】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

uniapp沉浸式渐变状态栏

插件地址&#xff1a;沉浸式渐变状态栏 - DCloud 插件市场 标准用法 <v-headerview actionBarColor"#fac90f" titleColor"#ffffff" pageTitle这是标题 ><template v-slot:title><!--如需自定义标题&#xff0c;用这个slot自定义内容。否则…

基于postman测试接口(整套接口测试)

可以解决的问题 几百个接口人工测试接口过于繁杂大多测试无法使用请求结果当参数可以使用随机参数支持swagger信息导入随账号持久化保存数据对集合一键测试自定义可视化结果 开启控制台 单个测试尝试 使用请求结果当参数 pm.test("存全局参数", function () {// 获…

【深度学习】基于Python Qt的口罩检测与报警系统

文章目录 yolov7训练系统集成数据库报警记录查看qt页面跳转方式qt 的数据库某表查看页面如何写q742971636 yolov7训练 yolov7:https://github.com/WongKinYiu/yolov7 人脸口罩数据集&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1bnxJPnoRNwUfVzLxKjIvkQ?pwdc0yc …

Confluence的数据迁移备份与恢复

目录 一、简介 二、数据备份&#xff08;默认系统会自动备份&#xff0c;不需要手动&#xff09; 2、点击左上角的设置按钮&#xff0c;选择“一般配置”选项。 3、选择“备份与还原”选项 4、开始手动备份 三、数据恢复 1、使用管理员账号登录 2、选择“备份与还原”选…

亿发管理信息化系统,助力五金加工企业信息化建设

传统生产模式下劳动密集的五金生产车间&#xff0c;管理难度逐渐增大&#xff0c;五进生产加工商需要寻求新的竞争力。信息化建设可以将信息技术和系统融入五金生产加工过程的各个环节&#xff0c;使五金生产行业受益。 1、定制生产 信息化建设使五金管理者能够高效地实施定制…

laravel 图表Apexchart 整数多出小数点

Apexchart做统计界面发现一个问题&#xff0c;数据全是整数&#xff0c;但是还显示小数点&#xff0c;如下图&#xff1a; 网上很少有答案&#xff0c;自己研究了很久&#xff0c;分享下经验 第一种方案重新buildDefaultScript方法 protected function buildDefaultScript(){$…