Python基于OpenCV和PyQt5的人脸识别上课签到系统【附源码】

devtools/2025/1/21 18:05:42/

博主介绍:✌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 学生信息录入

首先,我们需要为每位学生录入信息,包括学号、姓名以及其人脸照片。通过将人脸特征存储到数据库中,系统可以快速识别对应学生。

代码示例:录入学生信息

python">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 = 0while True:ret, frame = cap.read()if not ret:breakgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)for (x, y, w, h) in faces:count += 1face_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:breakcap.release()cv2.destroyAllWindows()print(f"Captured {count} face images for {student_name}.")

运行该代码,系统会打开摄像头捕捉学生的人脸并保存至本地。

4.2 人脸识别核心功能

接下来,我们将实现人脸识别功能。

(1)提取实时摄像头画面中的人脸特征。
(2)将特征与数据库中的已存人脸进行比对。

代码示例:人脸识别

python">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:breakrgb_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_locationcv2.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'):breakcap.release()cv2.destroyAllWindows()

PyQt5_134">4.3 使用PyQt5创建用户界面

PyQt5用于构建交互式的图形界面,让用户更直观地使用签到系统。

代码示例:创建界面

python">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文件中。

代码示例:记录签到结果

python">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微信小程序精品项目

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人


http://www.ppmy.cn/devtools/152394.html

相关文章

什么是HTTP3?

要想讲清楚HTTP3是什么,就不得不先说下HTTP2,而要说清楚什么是HTTP2,就不得不介绍HTTP1。正所谓:计算机软件没有银弹,每项新技术都是解决了旧技术的问题,而又引入了新的问题。所以我们从HTTP1开始讲的话&am…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答: 问:《汽车维修技师》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《汽车维修技师》级别? 答:省级。主管单位:北方联合出版传媒(…

湖仓一体架构解析:数仓架构选择(第48天)

系列文章目录 1、Lambda 架构 2、Kappa 架构 3、混合架构 4、架构选择 5、实时数仓现状 6、湖仓一体架构 7、流批一体架构 文章目录 系列文章目录前言1、Lambda 架构2、Kappa 架构3、混合架构4、架构选择5、实时数仓现状6、湖仓一体架构7、流批一体架构 前言 本文解析了Lam…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好,因为工具代表着一定的先进性;但是IDEA 2024好好的给我上了一课,比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

算法题目总结-双指针

文章目录 1.滑动窗口类型1.长度最小的子数组1.答案2.思路 2.无重复字符的最长子串1.答案2.思路 2.双指针类型1.盛最多水的容器1.答案2.思路 2.三数之和1.答案2.思路 1.滑动窗口类型 1.长度最小的子数组 1.答案 package com.sunxiansheng.arithmetic.day10;/*** Description:…

Leetcode 3429. Paint House IV

Leetcode 3429. Paint House IV 1. 解题思路2. 代码实现 题目链接:3429. Paint House IV 1. 解题思路 这一题解法上就是一个动态规划的思路,由于题目有两个限制条件,即相邻不可以同色,以及前后同位置不可以同色,因此…

[c]可变参数函数

#include <stdio.h> #include <stdarg.h> void logMessage(const char *pFormat, ...) { // 定义一个 va_list 类型的变量 args 用于存储参数信息 va_list args; // 初始化 args 指向第一个未命名参数 va_start(args, pFormat); //…

嵌入式知识点总结 C/C++ 专题提升(一)-关键字

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…