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

ops/2025/1/15 3:46:14/

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 提供的预训练模型实现人脸检测。以下是基础代码:

python">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 的实现:

python">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 实现简单的用户界面,让系统更加友好:

python">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 库处理数据并生成考勤报告:

python">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 套》

http://www.ppmy.cn/ops/150184.html

相关文章

Linux常用指令

目录 1 概述2 指令2.1 简单指令2.2 解压缩2.2.1 tar.bz2和tar.gz2.2.2 单独bz22.2.3 zip2.2.4 7z 2.3 网卡操作 1 概述 本章主要是记录一些日常用到的Linux指令,方便自己忘记的时候查找,也为有需要的人提供参考。 2 指令 2.1 简单指令 指令解释cat /…

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | 论文解读

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | Learning to Predict 3D Lane Shape and Camera Pose from a Single Image via Geometry Constraints https://zhuanlan.zhihu.com/p/563985000https://zhuanlan.zhihu.com/p/563985000

《AI赋能鸿蒙Next,打造极致沉浸感游戏》

在游戏开发领域,鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇,使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中,非…

第 3 章 HTML5 编程基础教案

谢从华,高蕴梅 著.Web前端设计基础入门——HTML5、CSS3、JavaScript(微课视频版),2023, 清华大学出版社. ISBN:9787302641261. 一、教学目标(Objectives) 1. 知识目标: - 深入理解 HTML5 相较于…

Qt 坐标系统和坐标变换

一、概述:1、QPainter在QPaintDevice上绘图的默认坐标系统是,原点(0,0)在左上角,x轴正方向水平向右,y轴正方向竖直向下的坐标系。 2、为了绘图的方便,QPainter提供了一些坐标变换的功能,通过平移、旋转、缩放等坐标变…

鼠标过滤驱动

文章目录 概述代码参考资料 概述 其编写过程大体与键盘过滤驱动相似,只需要切换一下附加的目标设备以及创建的设备类型等。但在该操作后依然无法捕获到Vmware创建的win7操作系统的鼠标irp信息,于是通过在获取鼠标驱动,遍历其所有的设备进而附…

springMVC百宝箱

springMVC工具箱 文章目录 springMVC工具箱依赖过滤设置DispatcherServlet的注册(web.xml)标准配置文件头标准springmvc-servlet.xml文件注解版springmvc-servlet.xml文件spring乱码过滤器自定义万能过滤器自定义万能过滤器注册JSON格式化乱码(anncation…

BUUCTF:web刷题记录(1)

目录 [极客大挑战 2019]EasySQL1 [极客大挑战 2019]Havefun1 [极客大挑战 2019]EasySQL1 根据题目以及页面内容,这是一个sql注入的题目。 直接就套用万能密码试试。 admin or 1 # 轻松拿到flag 换种方式也可以轻松拿到flag 我们再看一下网页源码 这段 HTML 代码…