Python基于OpenCV和PyQt5的人脸识别上课签到系统【附源码】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
2024-2025年Java毕业设计选题推荐
Python基于Django的微博热搜、微博舆论可视化系统,附源码
基于Python Django的北极星招聘数据可视化系统感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人
文章目录
- 第一章 项目简介
- 第二章 技术栈
- 第三章 系统功能简介
- 3.1 用户界面
- 3.2 人脸识别功能
- 3.3 签到记录管理
- 第四章 实现步骤详解
- 4.1 学生信息录入
- 4.2 人脸识别核心功能
- 4.3 使用PyQt5创建用户界面
- 4.4 数据管理与导出
- 第五章 运行效果展示
- 第六章 推荐阅读
- 第七章 源码获取:
第一章 项目简介
随着人工智能技术的飞速进步,人脸识别技术已经深入到我们生活的方方面面。在学校环境中,如何高效、准确地完成学生的上课签到成为了一个亟待解决的问题。今天将为大家介绍一个Python基于OpenCV和PyQt5的人脸识别上课签到系统。
Python基本OpenCV和PyQt5的人脸识别上课签到系统(V2.0)
第二章 技术栈
前端使用 PyQt5
sqlite 数据库
框架 opencv, dlib
第三章 系统功能简介
我们的人脸识别签到系统具备以下功能:
3.1 用户界面
(1)提供学生信息管理功能。
(2)启动摄像头进行人脸识别。
(3)显示签到结果和签到记录。
3.2 人脸识别功能
(1)检测学生的人脸。
(2)将人脸与数据库中的信息匹配,确认身份。
3.3 签到记录管理
(1)自动保存签到结果。
(2)支持查询和导出签到记录。
第四章 实现步骤详解
接下来,我们将一步步实现这个签到系统。
4.1 学生信息录入
首先,我们需要为每位学生录入信息,包括学号、姓名以及其人脸照片。通过将人脸特征存储到数据库中,系统可以快速识别对应学生。
代码示例:录入学生信息
import cv2
import os
def capture_student_face(student_id, student_name):
# 创建保存人脸数据的文件夹
if not os.path.exists("student_faces"):
os.makedirs("student_faces")
# 打开摄像头
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
count = 0
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
count += 1
face_img = frame[y:y + h, x:x + w]
filename = f"student_faces/{student_id}_{student_name}_{count}.jpg"
cv2.imwrite(filename, face_img)
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow("Capture Student Face", frame)
if cv2.waitKey(1) & 0xFF == ord('q') or count >= 10:
break
cap.release()
cv2.destroyAllWindows()
print(f"Captured {count} face images for {student_name}.")
运行该代码,系统会打开摄像头捕捉学生的人脸并保存至本地。
4.2 人脸识别核心功能
接下来,我们将实现人脸识别功能。
(1)提取实时摄像头画面中的人脸特征。
(2)将特征与数据库中的已存人脸进行比对。
代码示例:人脸识别
import numpy as np
import face_recognition
def recognize_face():
# 加载已存人脸数据
face_data = {}
for file in os.listdir("student_faces"):
img = face_recognition.load_image_file(f"student_faces/{file}")
encoding = face_recognition.face_encodings(img)[0]
name = file.split("_")[1]
face_data[name] = encoding
# 打开摄像头识别
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
for face_encoding, face_location in zip(face_encodings, face_locations):
matches = face_recognition.compare_faces(list(face_data.values()), face_encoding)
name = "Unknown"
if True in matches:
matched_idx = matches.index(True)
name = list(face_data.keys())[matched_idx]
# 在画面上显示姓名
top, right, bottom, left = face_location
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(frame, name, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow("Recognize Face", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
4.3 使用PyQt5创建用户界面
PyQt5用于构建交互式的图形界面,让用户更直观地使用签到系统。
代码示例:创建界面
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("人脸识别签到系统")
self.setGeometry(100, 100, 600, 400)
# 添加按钮
self.capture_button = QPushButton("录入人脸", self)
self.capture_button.setGeometry(50, 50, 150, 50)
self.capture_button.clicked.connect(self.capture_face)
self.recognize_button = QPushButton("开始签到", self)
self.recognize_button.setGeometry(50, 150, 150, 50)
self.recognize_button.clicked.connect(self.start_recognition)
def capture_face(self):
student_id = input("请输入学号: ")
student_name = input("请输入姓名: ")
capture_student_face(student_id, student_name)
def start_recognition(self):
recognize_face()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
4.4 数据管理与导出
签到结果可以使用Pandas进行管理,并支持导出到Excel文件中。
代码示例:记录签到结果
import pandas as pd
from datetime import datetime
def save_attendance(name):
record = {"Name": name, "Time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
if not os.path.exists("attendance.csv"):
df = pd.DataFrame([record])
else:
df = pd.read_csv("attendance.csv")
df = df.append(record, ignore_index=True)
df.to_csv("attendance.csv", index=False)
print(f"{name} 签到成功!")
在recognize_face方法中,每次识别到已知人脸时,调用save_attendance保存签到记录。
第五章 运行效果展示
完整运行程序后,系统将具备以下功能:
(1)录入学生人脸信息。
(2)实时打开摄像头识别人脸。
(3)自动保存签到结果。
第六章 推荐阅读
基于Python的循环神经网络的情感分类系统设计与实现,附源码
Python基于人脸识别的实验室智能门禁系统的设计与实现,附源码
Java基于微信小程序的讲座预约系统的研究与实现,附源码
Java基于微信小程序的校园订餐系统
Java基于SpringBoot的在线学习平台
Python基于django框架的Boss直聘数据分析与可视化系统
基于Python的机器学习的文本分类系统
基于Python dlib的人脸识别的上课考勤管理系统(V2.0)
Java 基于 SpringBoot+Vue 的公司人事管理系统的研究与实现(V2.0)
第七章 源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
Python毕业设计
Java 大学生实战精品项目
Java微信小程序精品项目
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人