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'):
break
cap.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 wx
class 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 套》