当前位置: 首页 > news >正文

Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)

1. 引言

今天,我们将基于 Python 的 OpenCV 库和 wxPython 框架,构建一个实用的 人脸识别考勤系统。这是一个适合大学生学习的实战项目,功能经过充分调试,确保运行稳定。该系统不仅能帮助你了解人脸识别技术的基本原理,还能让你在实际开发中收获经验。

在数字化时代,传统的打卡考勤方式逐渐被淘汰,取而代之的是基于生物特征的考勤方式,比如人脸识别。相比传统方法,人脸识别考勤系统具备高效、准确、不易伪造等优势。本文将一步步带你实现这样一套系统,包括 环境搭建、核心功能实现,以及 数据存储与报告生成

人脸识别考勤系统效果图

视频演示

点击观看完整演示视频


2. 系统概述

技术选型

要实现一个人脸识别考勤系统,我们需要以下技术栈:

  1. Python:简洁高效,适合快速开发。
  2. OpenCV:开源计算机视觉库,用于人脸检测与识别。
  3. dlib:提供人脸识别模型和工具。
  4. wxPython:用于构建图形界面(GUI),方便用户操作。
  5. SQLite/MySQL:用于存储员工信息和考勤数据。
  6. 摄像头:捕捉用户实时人脸图像。

系统功能

这套考勤系统具备以下功能:

  • 人脸检测与识别:通过摄像头捕捉人脸,实现签到和签退功能。
  • 考勤时间计算:根据签到和签退记录生成每日考勤时间。
  • 数据管理:支持管理员录入和管理员工信息。
  • 实时监控:提供实时识别和考勤功能。
  • 考勤报告生成:自动生成考勤数据报告,支持 CSV 导出。

3. 系统实现

3.1 环境搭建

在开发之前,需要确保以下工具已安装:

pip install opencv-python
pip install dlib
pip install wxpython

3.2 人脸识别功能

人脸识别是本系统的核心功能。我们使用 dlib 提供的预训练模型实现人脸检测。以下是基础代码:

import dlib
import cv2# 加载预训练人脸检测器
detector = dlib.get_frontal_face_detector()# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 检测人脸faces = detector(frame, 1)for face in faces:x1, y1, x2, y2 = face.left(), face.top(), face.right(), face.bottom()cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)# 显示图像cv2.imshow("Face Detection", frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

3.3 数据存储与管理

考勤数据和员工信息需要持久化存储到数据库中。以下是使用 SQLite 的实现:

import sqlite3# 创建数据库连接
conn = sqlite3.connect('attendance.db')
cursor = conn.cursor()# 创建考勤数据表
cursor.execute('''
CREATE TABLE IF NOT EXISTS attendance (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,check_in_time TEXT,check_out_time TEXT
)
''')# 插入记录
cursor.execute('''
INSERT INTO attendance (name, check_in_time) 
VALUES ('Alice', '2024-12-28 08:00:00')
''')conn.commit()
conn.close()

3.4 图形用户界面(GUI)

我们用 wxPython 实现简单的用户界面,让系统更加友好:

import wxclass AttendanceApp(wx.Frame):def __init__(self):super().__init__(None, title="考勤系统", size=(600, 400))panel = wx.Panel(self)# 界面布局wx.StaticText(panel, label="欢迎使用人脸识别考勤系统", pos=(200, 20))self.start_btn = wx.Button(panel, label="启动考勤", pos=(250, 100))self.stop_btn = wx.Button(panel, label="停止考勤", pos=(250, 160))# 事件绑定self.start_btn.Bind(wx.EVT_BUTTON, self.start_attendance)self.stop_btn.Bind(wx.EVT_BUTTON, self.stop_attendance)def start_attendance(self, event):wx.MessageBox("考勤已启动", "提示", wx.OK | wx.ICON_INFORMATION)def stop_attendance(self, event):wx.MessageBox("考勤已停止", "提示", wx.OK | wx.ICON_INFORMATION)if __name__ == "__main__":app = wx.App()frame = AttendanceApp()frame.Show()app.MainLoop()

3.5 考勤报告生成

使用 pandas 库处理数据并生成考勤报告:

import pandas as pd# 从数据库读取数据
conn = sqlite3.connect('attendance.db')
df = pd.read_sql_query("SELECT * FROM attendance", conn)# 保存为 CSV 文件
df.to_csv('attendance_report.csv', index=False)
print("考勤报告已生成!")

4. 总结

通过本项目,你可以深入学习 Python 和 OpenCV 的实际应用,掌握人脸识别技术的开发方法。本系统从环境搭建到功能实现,再到数据持久化与报告生成,涵盖了完整的开发流程,适合作为毕业设计或学习项目。

希望这篇文章能帮助大家快速上手人脸识别考勤系统的开发,提升自己的编程能力和项目经验。


5. 源码获取

🔥 点赞、收藏、评论支持一下吧!

📌 精彩专栏推荐:

  • 2022-2024 年最全的计算机软件毕业设计选题大全✅
  • Java 项目精品实战案例《100 套》
  • Java 微信小程序项目实战《100 套》

相关文章:

Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)

1. 引言 今天,我们将基于 Python 的 OpenCV 库和 wxPython 框架,构建一个实用的 人脸识别考勤系统。这是一个适合大学生学习的实战项目,功能经过充分调试,确保运行稳定。该系统不仅能帮助你了解人脸识别技术的基本原理&#xff0…...

Maven的依赖管理

1. 依赖管理 依赖管理&#xff0c;可以将有关依赖项的所有信息放在共同的POM中&#xff0c;并对子POM中的工件进行更简单的引用。举个例子&#xff1a; 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...

数据结构考前一天

线性表&#xff1a;矩阵&#xff0c;链表&#xff08;单链表必考&#xff09; 栈和队列&#xff1a;出入判断&#xff0c;括号匹配&#xff0c;中缀转后缀 字符串数组&#xff1a;模式匹配next&#xff0c;nextval数组&#xff0c;数组寻址&#xff0c;三角矩阵对应一维数组k…...

获取 Astro Bot AI 语音来增强您的游戏体验!

有很多用户尝试过Astro Bot&#xff0c;却被Astro Bot可爱的声音所吸引。您是否想知道如何使用 Astro Bot 语音来拨打恶作剧电话或用他的声音说话&#xff1f;如果您有&#xff0c;那么这篇文章适合您。我们将向您展示如何为 Astro Bot 提供逼真的 AI 声音并在在线对话中使用它…...

html5开发,js 在元素div id=img1的最前面插入一个图片

在 JavaScript 中&#xff0c;你可以使用 document.createElement 来创建一个新的图片元素&#xff0c;然后使用 document.getElementById 来获取目标 div 元素&#xff0c;并使用 appendChild 方法将新创建的图片元素插入到 div 的最前面。不过&#xff0c;appendChild 方法会…...

Elasticsearch Serverless中的数据流自动分片深度解析

Elasticsearch Serverless中的数据流自动分片深度解析 一、Elasticsearch Serverless概述 1. 什么是Elasticsearch Serverless Elasticsearch Serverless是一种云端全托管的Elasticsearch服务&#xff0c;它基于云原生Serverless技术架构&#xff0c;提供自动弹性和完全免运…...

2025考研江南大学复试科目控制综合(初试807自动控制原理)

​ 2025年全国硕士研究生招生考试江南大学考点 一年年的考研如期而至&#xff0c;我也变成了研二了&#xff0c;作为2次考研经历的学长&#xff0c;总是情不自禁地回想起自己的考研经历&#xff0c;我也会经常从那段经历中汲取力量。我能理解大多数考生考完后的的迷茫无助&…...

Elasticsearch分片数量是什么意思?

Elasticsearch中的分片&#xff08;Shard&#xff09;数量是一个重要概念&#xff0c;以下为你详细介绍它的含义及相关要点&#xff1a; ### 定义 分片是Elasticsearch将索引数据进行拆分的基本单元。简单来说&#xff0c;Elasticsearch会把一个索引的数据分割成多个较小的部分…...

PWN的知识之栈溢出

栈溢出 什么是栈溢出&#xff1f; 栈溢出&#xff08;Stack Overflow&#xff09;是指在程序运行过程中&#xff0c;向栈中存放的数据量超过了栈的最大容量&#xff0c;从而导致程序出现异常行为的情况。可以比作一个箱子原本只能容纳一定数量的物品&#xff0c;如果强行往里…...

java.lang.Error: FFmpegKit failed to start on brand:

如果你使用FFmpegKit的时候遇到了这个问题&#xff1a; java.lang.Error: FFmpegKit failed to start on brand: Xiaomi, model: MI 8, device: dipper, api level: 29, abis: arm64-v8a armeabi-v7a armeabi, 32bit abis: armeabi-v7a armeabi, 64bit abis: arm64-v8a.at c…...

TCPDump参数详解及示例

TCPDump参数详解及示例 TCPDump参数详解TCPDump -G的示例TCPDump -i any -s 2048 -G 600 -p udp -Z root -n -X -tt -w %Y_%m%d_%H%M_%S.pcap &的含义TCPDump是一款强大的网络数据包截获分析工具,可以将网络中传送的数据包的完全截获下来提供分析。它支持针对网络层、协议…...

Spring如何实现管理事务

目录 简介&#xff1a; 分类&#xff1a; 1.编程式事务管理&#xff1a; 2. 声明式事务管理&#xff1a; 3.事务传播和隔离级别&#xff1a; 配置 Spring 事务管理&#xff1a; 总结&#xff1a; 简介&#xff1a; Spring 通过事务管理器&#xff08;Transaction Manager…...

windows C#-接口中的索引器

可以在接口上声明索引器。 接口索引器的访问器与类索引器的访问器有所不同&#xff0c;差异如下&#xff1a; 接口访问器不使用修饰符。接口访问器通常没有正文。 访问器的用途是指示索引器为读写、只读还是只写。 可以为接口中定义的索引器提供实现&#xff0c;但这种情况非…...

Launcher3主页面加载显示流程分析

布局结构 抓取布局后&#xff0c;可以看到每个图标是一个DoubleShadowBubbleTextView&#xff0c;父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息&#xff0c;可以整体上看页面加载显示流程。 主要类 Launcher.java&#xff1a;主界面&…...

【读书笔记·VLSI电路设计方法解密】问题36:一个好的设计流程有哪些特点

由于IC实现与不断演进的技术节点密切相关,且各种新问题迅速涌现,一个优秀的设计流程必须具备灵活性,以应对这些新挑战,而无需进行大规模调整。 与此同时,为了克服当今SoC实现领域中出现的众多问题,整个EDA行业正在高速运转。新工具正在加速涌现;因此,一个优秀的设计流…...

C语言----共用体、枚举

目录 ​编辑 共用体 1. 定义 2. 格式 注意&#xff1a; 枚举 1. 定义&#xff1a; 2. 格式&#xff1a; 3. 说明&#xff1a; 面试题&#xff1a;枚举和宏定义区别&#xff1f; 共用体 1. 定义 不同数据类型的数据可以使用共同的存储区域&#xff0c;这种数据构造类…...

26.Java Lock 接口(synchronized 关键字回顾、可重入锁快速入门、Lock 对比 synchronized)

一、synchronized 关键字 1、synchronized 关键字回顾 synchronized 是 Java 中的关键字&#xff0c;是一种同步锁&#xff0c;它修饰的对象有以下几种 修饰一个类&#xff1a;其作用的范围是 synchronized 后面括号括起来的部分&#xff0c;作用的对象是这个类的所有对象 修…...

机器学习 学习知识点

机器学习 学习知识点 什么是消融实验&#xff08;Ablation experiment&#xff09;&#xff1f;num_step与batch_size的区别python glob.glob()函数认识python的条件判断之is not、is not None、is Nonetqdm介绍及常用方法softmax 激活函数。type_as(tesnor)Python OpenCV cv2.…...

GESP真题 | 2024年12月1级-编程题4《美丽数字》及答案(C++版)

描述 小杨有 n 个正整数&#xff0c;他认为一个正整数是美丽数字当且仅当该正整数是 9 的倍数但不是 8 的倍数。 小杨想请你编写一个程序计算个正整数中美丽数字的数量。 输入描述 第一行包含一个正整数 n&#xff0c;代表正整数个数 。 第二行包含 n 个正整数 a1, a2, a3…...

java并发之AQS

一、简介 AQS&#xff0c;全称&#xff1a;AbstractQueuedSynchronizer&#xff0c;是一个JDK提供的用于构建锁、同步器等线程协作工具类的框架&#xff0c;内部维护FIFO双向队列&#xff08;双向链表实现&#xff09;。 AQS重要属性&#xff1a; // 表示同步状态。它既可以表…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...