基于 Python、OpenCV 和 PyQt5 的人脸识别上课打卡系统
大家好,我是Java徐师兄,今天为大家带来的是基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。该系统采用 Python 语言开发,开发过程中采用了OpenCV框架,Sqlite db 作为数据库,系统功能完善 ,实用性强 ,可供大学生实战项目参考使用。
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w+、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人
文章目录
- 一、开发环境准备
- 1.1 必要的工具
- 1.2 依赖库安装
- 二、系统功能概述
- 三、实现步骤
- 3.1 学生信息管理
- 3.2 人脸识别核心逻辑
- 3.3 构建 PyQt5 用户界面
- 3.4 数据管理与导出
- 四、运行效果展示
- 五、总结
- 6 源码获取:
随着人工智能技术的快速发展,人脸识别技术得到了广泛应用。在学校场景中,如何快速、准确地实现学生的上课签到是一个很实用的需求。今天,我们将带大家一起实现一个基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。
这篇文章将从零开始,为新手读者提供详细的代码和实现步骤,即使没有太多基础的同学也能看懂。
视频演示地址
基于 Python 的人脸识别签到打卡系统
一、开发环境准备
在开发之前,我们需要先安装相关的工具和库:
1.1 必要的工具
- Python 版本:建议使用 Python 3.8 或以上版本。
- IDE:推荐使用 PyCharm 或 VS Code 方便调试和运行。
1.2 依赖库安装
以下是项目中用到的核心 Python 库及其功能:
- OpenCV:实现人脸检测和识别。
- PyQt5:构建图形化用户界面。
- dlib(可选):提供高效的人脸关键点检测。
- numpy:处理矩阵和数组运算。
- pandas:管理学生信息及签到数据。
通过以下命令安装这些库:
pip install opencv-python PyQt5 dlib numpy pandas
二、系统功能概述
我们的人脸识别签到系统包含以下功能:
- 用户界面
- 提供学生信息管理功能。
- 启动摄像头进行人脸识别。
- 显示签到结果和签到记录。
- 人脸识别功能
- 检测学生的人脸。
- 将人脸与数据库中的信息匹配,确认身份。
- 签到记录管理
- 自动保存签到结果。
- 支持查询和导出签到记录。
三、实现步骤
下面,我们将逐步实现该签到系统。
3.1 学生信息管理
我们需要为每位学生录入信息,包括学号、姓名以及其人脸照片。通过将人脸特征存储到数据库中,系统可快速识别对应学生。
代码示例:录入学生信息
import cv2
import osdef 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}.")
运行该代码,系统会打开摄像头捕捉学生的人脸并保存至本地。
3.2 人脸识别核心逻辑
接下来,我们将实现人脸识别功能。
- 提取实时摄像头画面中的人脸特征。
- 将特征与数据库中的已存人脸进行比对。
代码示例:人脸识别
import numpy as np
import face_recognitiondef 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()
3.3 构建 PyQt5 用户界面
PyQt5 用于构建交互式的图形界面,让用户更直观地使用签到系统。
代码示例:创建界面
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabelclass 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_())
3.4 数据管理与导出
签到结果可以使用 Pandas 进行管理,并支持导出到 Excel 文件中。
代码示例:记录签到结果
import pandas as pd
from datetime import datetimedef 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
保存签到记录。
四、运行效果展示
完整运行程序后,系统将具备以下功能:
- 录入学生人脸信息。
- 实时打开摄像头识别人脸。
- 自动保存签到结果。
五、总结
通过本文,我们实现了一个简单的基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。新手可以根据本文的代码理解基本的图像处理和图形界面设计原理,并在此基础上扩展更多功能,如:
- 添加未签到人员提醒。
- 实现多摄像头支持。
- 优化识别算法,提高准确率。
欢迎大家尝试并分享自己的改进!
6 源码获取:
大家点赞、收藏、关注、评论啦 、下方卡片点击👇🏻获取联系方式👇🏻
2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人
相关文章:
基于 Python、OpenCV 和 PyQt5 的人脸识别上课打卡系统
大家好,我是Java徐师兄,今天为大家带来的是基于 Python、OpenCV 和 PyQt5 的人脸识别上课签到系统。该系统采用 Python 语言开发,开发过程中采用了OpenCV框架,Sqlite db 作为数据库,系统功能完善 ,实用性强…...
MySQL 复合查询
实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下: DROP database IF EXISTS scott; CREATE database IF NOT EXIST…...
【Leetcode】19. 删除链表的第N个节点
【Leetcode】19. 删除链表的第N个节点 1. 题目介绍2. 方法一:计算链表长度逻辑流程:代码复杂度分析 1. 题目介绍 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,…...
flutter底部导航栏中间按钮凸起,导航栏中间部分凹陷效果
关键代码: Scaffold中设置floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked和extendBody: true, BottomAppBar中设置shape: const CircularNotchedRectangle() Scaffold(extendBody: true,//body是否延伸脚手架底部,在底部导航…...
<项目代码>YOLOv8 红绿灯识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
HTMLHTML5革命:构建现代网页的终极指南 - 4. 使用元素
HTML&HTML5革命:构建现代网页的终极指南 4. 使用元素 大家好,我是莫离老师。 到目前为止,我们已经了解了 HTML 和 HTML5 的基础概念,并且选择了适合自己的开发工具。 今天,我们将迈出实际开发的第一步,…...
使用 Selenium 和 Python 爬取腾讯新闻:从基础到实践
使用 Selenium 和 Python 爬取腾讯新闻:从基础到实践 在这篇博客中,我们将介绍如何利用 Selenium 和 Python 爬取腾讯新闻的内容,并将结果保存到 CSV 文件中。本教程包含以下内容: 项目简介依赖安装实现功能的代码实现中的关键技…...
CAD深度清理工具-AVappsDrawingPurge9.0.0(2024.8.27版本) 支持版本CAD2022-2025-供大家学习研究参考
图形文件DWG体积很大:通常没有明显的数据。同时,还其他症状包括: (1)无法复制和粘贴图元。 (2)悬挂较长时间选择文本与 “特性”选项板上打开。 (3)图形文件需要很长时间…...
vue3+vite使用vite-plugin-electron-renderer插件和script-loader插件有冲突
报错信息:Error: Dynamic require of "path" is not supported 报错问题是在使用vite-plugin-electron-renderer插件不支持import动态引入,该报错信息并不准确,实际原因是vite-plugin-electron-renderer插件和script-loader插件有…...
领养我的宠物:SpringBoot开发指南
第2章 开发环境与技术 本章节对开发宠物领养系统需要搭建的开发环境,还有宠物领养系统开发中使用的编程技术等进行阐述。 2.1 Java语言 Java语言是当今为止依然在编程语言行业具有生命力的常青树之一。Java语言最原始的诞生,不仅仅是创造者感觉C语言在编…...
直击高频编程考点:聚焦新版综合编程能力考查汇总
目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…...
【EI会议征稿 | ACM出版 】第六届计算机信息和大数据应用国际学术会议(CIBDA 2025)
大会官网:www.ic-cibda.org 大会时间:2025年3月14-16日 大会地点:中国-武汉 收录检索:EI Compendex,Scopus 接受/拒稿通知:投稿后约3~8天 大会简介 第六届计算机信息和大数据应用国际学术会议ÿ…...
淘宝商品数据获取:Python爬虫技术的应用与实践
引言 随着电子商务的蓬勃发展,淘宝作为中国最大的电商平台之一,拥有海量的商品数据。这些数据对于市场分析、消费者行为研究、商品推荐系统等领域具有极高的价值。然而,如何高效、合法地从淘宝平台获取这些数据,成为了一个技术挑…...
【C++】getchar() 与 putchar() 的深入解析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯函数原型及头文件包含💯 getchar() 和 putchar() 的基本概念2.1 getchar() 函数2.2 putchar() 函数 💯输入输出的关系与返回值的解释3.1 getchar() …...
Centos7安装MySQL8.0详细教程(压缩包安装方式)
本章教程,主要介绍如何在Centos7上安装MySQL8.0版本数据库(压缩包安装方式) 一、卸载系统自带的 Mariadb 1、查询 rpm -qa|grep mariadb2.、卸载 如果有查询结果,就进行卸载,没有就跳过该步骤。 rpm -e --nodeps mar…...
深度学习的python基础(1)
一.tensor创建 1.张量的定义 张量在形式上就是多维数组,例如标量就是0维张量,向量就是一维张量,矩阵就是二维张量,而三维张量就可以想象RGB图片,每个channel是一个二维的矩阵,共有三个channel࿰…...
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
作者:陈承 背景 在 2018 年的 2 月,ARMS Java Agent 的第一个版本正式发布,为用户提供无侵入的的可观测数据采集服务。6 年后的今天,随着软件技术的迅猛发展、业务场景的逐渐丰富、用户规模的快速增长,我们逐渐发现过…...
003 MATLAB基础计算
01 方程组的求解 多项式及其运算 多项式在MATLAB中以向量形式存储。 即n次多项式用一个长度为n1的系数向量来表示,且按降幂,缺少的幂次对应的向量元素为0。 多项式的运算主要包括多项式的四则运算、求导、求值和求根运算 多项式的四则运算:…...
安卓逆向之Android-Intent介绍
Intent是各个组件之间交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,而且还能在各组件之间传递数据。Intent一般可用于启动Activity、启动Service、发送广播等场景。Intent有多个构造函数的重载。 显式intent 显式 Intent 明确指定要启动的…...
数据库日期时间用什么类型?
数据库中的日期时间类型主要包括DATE、TIME、DATETIME和TIMESTAMP等,它们在存储、格式和范围等方面有所不同。以下是这些类型的详细说明和异同比较: 1. DATE类型 用途:用于存储日期值,不包含时间部分。格式:YYYY-MM-…...
Python中字符串和正则表达式
Python中字符串和正则表达式 在Python编程中,字符串是最常用的数据类型之一。字符串用于表示文本数据,而正则表达式则是一种强大的工具,用于处理和匹配字符串中的模式。本文将介绍Python中的字符串操作、字符串格式化以及如何使用正则表达式…...
Leecode刷题C语言之N皇后
执行结果:通过 执行用时和内存消耗如下: 代码如下: int solutionsSize;char** generateBoard(int* queens, int n) {char** board (char**)malloc(sizeof(char*) * n);for (int i 0; i < n; i) {board[i] (char*)malloc(sizeof(char) * (n 1))…...
即时通讯| IM+RTC在AI技术加持下的社交体验
即时通讯作为互联网的重要应用之一,见证了中国互联网30年发展的辉煌历程。 它从最初的文字交流,发展到如今的语音、视频通话,甚至是虚拟现实社交,已经渗透到生活的社交、娱乐、商务等方方面面,成为现代社会不可或缺的一…...
repo仓库转移到自己本地的git服务器
前提条件:搭建好gitolite 以转移正点原子rk3568_linux工程为例子,将其转移到自己的git服务器。 获取完整repo仓库 将正点原子epo仓库sync出来 evanevan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10 evanevan-X99:~/SRC/atk$ .repo/repo/repo list -n…...
微服务即时通讯系统的实现(服务端)----(2)
目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…...
人工智能-深度学习-神经网络-激活函数
激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。 满足激活函数的条件 1.可微分,也就是可求导 激活函…...
vue3+ts+uniapp微信小程序顶部导航栏
这是colorui改的,不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…...
IAR中编译下载未下载问题
第一张图片是正常下载,第二张未正常下载。经过查看download选项发现 启用了 suppress download (禁用下载)...
springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...
英语系统语法书面记载:高级语法 8 的状语从句
在英语高级语法中,状语从句是一种用来修饰动词、形容词、副词或整个句子的从句,它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法: 1. 时间状语从句 (Adverbial Cl…...
仿wordpress站/精准客户信息一条多少钱
1、苹果公司的借鉴 1)、硬件为软件服务2)、软件为用户体验服务3)、用户体验为情感服务4)、产品为真正的需求服务2、如何在成熟的市场抢占一席之地?1)、对目标市场了如指掌,对现有产品的缺陷洞若…...
阿里云做的网站如何发布/每日精选12条新闻
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759【项目5-字符串统计】阅读下面的程序,完成类似的功能#include<iostream> #include<cstdio> using namespace std; int main() { char str[50]; int i0,n0; cout…...
太原营销型网站建设/网络营销期末总结
http://www.jfox.info/bi-jiao-chang-jian-de-shu-ju-ku-sql-mian-shi-ti-yi-ji-da-an转载于:https://www.cnblogs.com/ydxblog/p/5753575.html...
吉林省建设工程造价网站/推广方案如何写
前驱节点(predecessor) 前驱节点:中序遍历时的前一个节点。如果是二叉搜索树,前驱节点就是前一个比它小的节点。 node.left ! null 举例:6、13、8predecessor node.left.right.right.right...,终止条件&a…...
去成都旅游攻略及费用/太原网站建设方案优化
【Updated by yepeng 2013-9-4: 部分调研结果分析】近期,IT168发起了一个2013年SOC安全管理平台应用状况调查,欢迎大家前往参与。导语; 近几年来,随着企业安全产品部署的越来越多,从而导致了企业对于IT人…...
佛山网站制作公司/网推拉新app推广平台
手机正常!别人打过来,提示手机关机,怎么破?1.检查手机是否有足够余额;2.重新启动手机后测试;3.更换SIM进行测试,排除手机卡性能不良引起的问题;4.检测是否开机呼叫转移。功能操作&am…...