Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)
1. 引言
今天,我们将基于 Python 的 OpenCV 库和 wxPython 框架,构建一个实用的 人脸识别考勤系统。这是一个适合大学生学习的实战项目,功能经过充分调试,确保运行稳定。该系统不仅能帮助你了解人脸识别技术的基本原理,还能让你在实际开发中收获经验。
在数字化时代,传统的打卡考勤方式逐渐被淘汰,取而代之的是基于生物特征的考勤方式,比如人脸识别。相比传统方法,人脸识别考勤系统具备高效、准确、不易伪造等优势。本文将一步步带你实现这样一套系统,包括 环境搭建、核心功能实现,以及 数据存储与报告生成。

视频演示
点击观看完整演示视频
2. 系统概述
技术选型
要实现一个人脸识别考勤系统,我们需要以下技术栈:
- Python:简洁高效,适合快速开发。
- OpenCV:开源计算机视觉库,用于人脸检测与识别。
- dlib:提供人脸识别模型和工具。
- wxPython:用于构建图形界面(GUI),方便用户操作。
- SQLite/MySQL:用于存储员工信息和考勤数据。
- 摄像头:捕捉用户实时人脸图像。
系统功能
这套考勤系统具备以下功能:
- 人脸检测与识别:通过摄像头捕捉人脸,实现签到和签退功能。
- 考勤时间计算:根据签到和签退记录生成每日考勤时间。
- 数据管理:支持管理员录入和管理员工信息。
- 实时监控:提供实时识别和考勤功能。
- 考勤报告生成:自动生成考勤数据报告,支持 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 框架,构建一个实用的 人脸识别考勤系统。这是一个适合大学生学习的实战项目,功能经过充分调试,确保运行稳定。该系统不仅能帮助你了解人脸识别技术的基本原理࿰…...
Maven的依赖管理
1. 依赖管理 依赖管理,可以将有关依赖项的所有信息放在共同的POM中,并对子POM中的工件进行更简单的引用。举个例子: 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...
数据结构考前一天
线性表:矩阵,链表(单链表必考) 栈和队列:出入判断,括号匹配,中缀转后缀 字符串数组:模式匹配next,nextval数组,数组寻址,三角矩阵对应一维数组k…...
获取 Astro Bot AI 语音来增强您的游戏体验!
有很多用户尝试过Astro Bot,却被Astro Bot可爱的声音所吸引。您是否想知道如何使用 Astro Bot 语音来拨打恶作剧电话或用他的声音说话?如果您有,那么这篇文章适合您。我们将向您展示如何为 Astro Bot 提供逼真的 AI 声音并在在线对话中使用它…...
html5开发,js 在元素div id=img1的最前面插入一个图片
在 JavaScript 中,你可以使用 document.createElement 来创建一个新的图片元素,然后使用 document.getElementById 来获取目标 div 元素,并使用 appendChild 方法将新创建的图片元素插入到 div 的最前面。不过,appendChild 方法会…...
Elasticsearch Serverless中的数据流自动分片深度解析
Elasticsearch Serverless中的数据流自动分片深度解析 一、Elasticsearch Serverless概述 1. 什么是Elasticsearch Serverless Elasticsearch Serverless是一种云端全托管的Elasticsearch服务,它基于云原生Serverless技术架构,提供自动弹性和完全免运…...
2025考研江南大学复试科目控制综合(初试807自动控制原理)
2025年全国硕士研究生招生考试江南大学考点 一年年的考研如期而至,我也变成了研二了,作为2次考研经历的学长,总是情不自禁地回想起自己的考研经历,我也会经常从那段经历中汲取力量。我能理解大多数考生考完后的的迷茫无助&…...
Elasticsearch分片数量是什么意思?
Elasticsearch中的分片(Shard)数量是一个重要概念,以下为你详细介绍它的含义及相关要点: ### 定义 分片是Elasticsearch将索引数据进行拆分的基本单元。简单来说,Elasticsearch会把一个索引的数据分割成多个较小的部分…...
PWN的知识之栈溢出
栈溢出 什么是栈溢出? 栈溢出(Stack Overflow)是指在程序运行过程中,向栈中存放的数据量超过了栈的最大容量,从而导致程序出现异常行为的情况。可以比作一个箱子原本只能容纳一定数量的物品,如果强行往里…...
java.lang.Error: FFmpegKit failed to start on brand:
如果你使用FFmpegKit的时候遇到了这个问题: 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如何实现管理事务
目录 简介: 分类: 1.编程式事务管理: 2. 声明式事务管理: 3.事务传播和隔离级别: 配置 Spring 事务管理: 总结: 简介: Spring 通过事务管理器(Transaction Manager…...
windows C#-接口中的索引器
可以在接口上声明索引器。 接口索引器的访问器与类索引器的访问器有所不同,差异如下: 接口访问器不使用修饰符。接口访问器通常没有正文。 访问器的用途是指示索引器为读写、只读还是只写。 可以为接口中定义的索引器提供实现,但这种情况非…...
Launcher3主页面加载显示流程分析
布局结构 抓取布局后,可以看到每个图标是一个DoubleShadowBubbleTextView,父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息,可以整体上看页面加载显示流程。 主要类 Launcher.java:主界面&…...
【读书笔记·VLSI电路设计方法解密】问题36:一个好的设计流程有哪些特点
由于IC实现与不断演进的技术节点密切相关,且各种新问题迅速涌现,一个优秀的设计流程必须具备灵活性,以应对这些新挑战,而无需进行大规模调整。 与此同时,为了克服当今SoC实现领域中出现的众多问题,整个EDA行业正在高速运转。新工具正在加速涌现;因此,一个优秀的设计流…...
C语言----共用体、枚举
目录 编辑 共用体 1. 定义 2. 格式 注意: 枚举 1. 定义: 2. 格式: 3. 说明: 面试题:枚举和宏定义区别? 共用体 1. 定义 不同数据类型的数据可以使用共同的存储区域,这种数据构造类…...
26.Java Lock 接口(synchronized 关键字回顾、可重入锁快速入门、Lock 对比 synchronized)
一、synchronized 关键字 1、synchronized 关键字回顾 synchronized 是 Java 中的关键字,是一种同步锁,它修饰的对象有以下几种 修饰一个类:其作用的范围是 synchronized 后面括号括起来的部分,作用的对象是这个类的所有对象 修…...
机器学习 学习知识点
机器学习 学习知识点 什么是消融实验(Ablation experiment)?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 个正整数,他认为一个正整数是美丽数字当且仅当该正整数是 9 的倍数但不是 8 的倍数。 小杨想请你编写一个程序计算个正整数中美丽数字的数量。 输入描述 第一行包含一个正整数 n,代表正整数个数 。 第二行包含 n 个正整数 a1, a2, a3…...
java并发之AQS
一、简介 AQS,全称:AbstractQueuedSynchronizer,是一个JDK提供的用于构建锁、同步器等线程协作工具类的框架,内部维护FIFO双向队列(双向链表实现)。 AQS重要属性: // 表示同步状态。它既可以表…...
Scarab:重新定义空洞骑士模组管理体验
Scarab:重新定义空洞骑士模组管理体验 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 在独立游戏模组管理领域,手动复制文件、解决版本冲突和跟踪更新的…...
LiuJuan Z-Image效果对比展示:BF16 vs FP16在人像细节与稳定性上的差异
1. 1. 1. 1. 1. 1. 1. 1. 1. 概述 1. 1. 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1. 概述 1…...
OpenClaw压力测试:nanobot持续运行72小时稳定性
OpenClaw压力测试:nanobot持续运行72小时稳定性 1. 测试背景与目标 最近在本地部署了基于OpenClaw的nanobot项目,这是一个超轻量级的自动化助手框架。它内置了vllm部署的Qwen3-4B-Instruct-2507模型,通过chainlit提供推理界面。在实际使用中…...
插件管理终极指南:从入门到精通的全方位策略
插件管理终极指南:从入门到精通的全方位策略 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 为什么80%的用户都没用对插件功能?在开源工具Magpie的使用过程中…...
智能车小白也能懂的舵机PD控制:从电感差比和到方向控制,保姆级避坑指南
智能车方向控制入门:用PD算法驯服你的舵机 第一次看到智能车在赛道上流畅过弯时,很多人都会好奇——这辆小车是如何感知赛道边界并精准控制方向的?作为电磁组智能车的核心部件,舵机就像车辆的"方向盘",而PD控…...
fre:ac音频转换全攻略:跨平台高效工作流搭建指南
fre:ac音频转换全攻略:跨平台高效工作流搭建指南 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 在数字音频处理领域,开源工具的选择往往决定了工作流的效率与质量。fre:ac作为一…...
OpenClaw数据可视化:GLM-4.7-Flash分析结果自动图表生成
OpenClaw数据可视化:GLM-4.7-Flash分析结果自动图表生成 1. 为什么需要自动化数据可视化 作为一名经常需要处理数据的开发者,我发现自己80%的时间都花在了数据清洗和图表调整上。每次分析新数据集时,都要重复这些步骤:写Python脚…...
硬件医生养成记:用SMUDebugTool守护AMD Ryzen系统健康
硬件医生养成记:用SMUDebugTool守护AMD Ryzen系统健康 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...
人形机器人强化学习实战:从奖励设计到PPO算法优化
1. 人形机器人强化学习入门:为什么奖励设计是关键 第一次接触人形机器人强化学习时,我被一个简单问题困扰了很久:为什么同样的算法,换个任务就要重新调参?后来发现问题的核心在于奖励函数设计。就像教小孩学走路&#…...
电子工程开发工具全解析:从EDA到嵌入式系统
电子工程常用开发工具全景解析1. 电子工程软件工具概述电子工程作为信息技术的重要分支,其技术体系涵盖电路设计、信号处理、通信系统等多个专业领域。现代电子工程开发已形成完整的工具链体系,主要包括以下几类:EDA工具:电路设计…...
