人脸识别签到系统一站式开发【基于Pyqt5的CS架构软件】

news/2024/10/6 3:39:05/文章来源:https://www.cnblogs.com/qsxbc/p/18288437

人脸识别签到系统

1、运用场景

课堂签到,上班打卡,进出门身份验证。

2、功能架构

人脸录入,打卡签到,声音提醒,打卡信息导出:

3、技术栈

python3.8,sqlite3,opencv,face_recognition,PyQt5,csv

第三方库:

asgiref==3.8.1
click==8.1.7
colorama==0.4.6
comtypes==1.4.4
dlib @ file:////dlib-19.19.0-cp38-cp38-win_amd64.whl.whl#sha256=89a19fe0003e2fa2ff33264b5abba82443056f915b2339feb167569b4446a460
et-xmlfile==1.1.0
face-recognition==1.3.0
face_recognition_models==0.3.0
numpy==1.24.4
opencv-python==4.10.0.84
openpyxl==3.1.5
pillow==10.3.0
pypiwin32==223
PyQt5==5.15.10
PyQt5-Qt5==5.15.2
PyQt5-sip==12.13.0
pyttsx3==2.90
pytz==2024.1
pywin32==306
sqlparse==0.5.0
typing_extensions==4.12.2

4、人脸识别流程图

1、导入库
2、编写UI界面
3、打开摄像头录入人脸信息
4、比对人脸信息并发出声音提醒
5、导出打卡信息
6、打包成exe可执行文件

5、数据库

5.1、用户表

字段 描述 类型 大小
id 主键 integer
name 姓名 text 256
account 账号 text 256
password 密码 text 256
is_admin 是否为管理员 integer
icon_feature 人脸特征 blob 1024
addtime 添加时间 text 256

sql语句:

PRAGMA foreign_keys = false;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS "user";
CREATE TABLE "user" ("id" INTEGER NOT NULL,"name" TEXT(256),"account" TEXT(256),"password" TEXT(256),"is_admin" integer,"icon_feature" blob(1024),"addtime" TEXT(256),PRIMARY KEY ("id")
);PRAGMA foreign_keys = true;

5.2、记录表

字段 描述 类型 大小
id 主键 integer
userid 用户id integer
name 用户姓名 text 256
is_login 是否登录:0 :登录,1:上班打卡,2:下班打卡 integer
content 打卡日志 text 256
addtime 添加时间 text 256

sql语句:

PRAGMA foreign_keys = false;-- ----------------------------
-- Table structure for logs
-- ----------------------------
DROP TABLE IF EXISTS "logs";
CREATE TABLE "logs" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"userid" INTEGER,"name" TEXT(256),"is_login" integer,"content" TEXT(256),"addtime" TEXT
);-- ----------------------------
-- Auto increment value for logs
-- ----------------------------
UPDATE "sqlite_sequence" SET seq = 12 WHERE name = 'logs';PRAGMA foreign_keys = true;

6、UI界面

6.1、主界面

主要功能:
1、摄像头实时采集人脸数据
2、账号密码打卡
3、输出打卡结果
4、语音播放

6.2、人脸录入功能

功能:
1、管理员登录
2、账号密码修改
3、人脸信息更改
4、用户信息更改
5、用户信息录入
6、摄像头采集人脸数据

6.3、打卡记录

功能:
1、打卡记录查询
2、打卡记录输出
3、打卡记录导出excel文件,并使用橙色标记异常情况,可在输出框直接打开文件

6.4、代码

# -*- coding: utf-8 -*-"""
@contact: 微信 1257309054
@file: main.py
@time: 2024/6/30 11:09
@author: LDC
"""
class OpenLoginCameraThread(QThread):# 摄像头打开多线程_signal_thread = pyqtSignal(str)def __init__(self, parent=None):super(OpenLoginCameraThread, self).__init__(parent)self.window = parentself.qmut = QMutex()  # 互斥量self.is_exit_run = False  # 默认人脸识别里面的摄像头是循环打开的self.cap = Nonedef get_capture(self):'''打开摄像头:return:'''try:self.cap = cv2.VideoCapture(0)w, h = 640, 360self.cap.set(3, w)self.cap.set(4, h)return Trueexcept Exception as e:self.cap = Noneself.window.sign_in_info.setText('打开摄像头失败,{}'.format(e))return Falsedef open_login_camera(self):'''打开摄像头:return:'''self.is_close_camera = False  # 设备摄像头打开while 1:if self.is_exit_run:breakif not self.cap:if not self.get_capture():time.sleep(3)continuetry:success, img = self.cap.read()  # 读取图片mirrow = cv2.flip(img, 1)width, height = mirrow.shape[:2]  # 行:宽,列:高# 显示图片image_show = cv2.cvtColor(mirrow, cv2.COLOR_BGR2RGB)  # opencv读的通道是BGR,要转成RGBcamera_img = QtGui.QImage(image_show.data, height, width, QImage.Format_RGB888)self.window.label_video.setPixmap(QPixmap.fromImage(camera_img))  # 往显示视频的Label里显示QImageis_face, icon_feature = self.window.get_face_feature(camera_img)if is_face:user = self.window.compare_feature(icon_feature)if user:self._signal_thread.emit(json.dumps({'user': user}))  # 把人脸信息传回主进程time.sleep(1)else:self._signal_thread.emit(json.dumps({'info': '人脸未录入!'}))else:self._signal_thread.emit(json.dumps({'info': '获取人脸失败,请打开摄像头,对准人脸!'}))except:pass# 释放摄像头 release cameraself.cap.release()self.cap = Nonedef run(self):self.is_exit_run = Falseprint('人脸识别进入循环,打开摄像头')self.open_login_camera()print('人脸识别已退出循环,关闭摄像头')def stop(self):# 改变线程状态与终止self.is_exit_run = Trueself.wait()

6.5、效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地管理员

进入题目 随意输入密码发现提示ip,则尝试xff伪造ip右键检查发现base64编码 解码得猜测为用户admin密码 抓包发包得到flag

rust学习-记录第一个完成的rust算法题

给你一个下标从 0 开始的 8 x 8 网格 board ,其中 board[r][c] 表示游戏棋盘上的格子 (r, c) 。棋盘上空格用 . 表示,白色格子用 W 表示,黑色格子用 B 表示。 游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,合法 操作必须满…

Grafana+Loki+Promtail 日志监控

目录前置工作用户组(按需创建)GrafanaLokiLoki 配置文件Promtail配置文件配置数据源创建仪表盘添加查询项 前置工作Centos 7 关闭防火墙 (systemctl stop firewalld) 独立的用户组(可以不创建)用户组(按需创建) # 创建用户组 groupadd grafana # 新建一个家目录为`/home/graf…

source

进入题目右键源码发现一个假的flag base64解码啥也不是 目录扫描发现.git源码泄露,假的flag.txt下载.git进入目录 查看历史版本一一查看各个版本改动找到flag

cookies

进入题目,提示cookies伪造查看url发现filename为base64加密,发现参数line尝试查看index.php,base64加密对参数line进行遍历得到源码 error_reporting(0); $file=base64_decode(isset($_GET[filename])?$_GET[filename]:""); $line=isset($_GET[line])?intval($_…

成绩查询

进入题目猜测为sql注入 直接sqlmap一把梭 数据库表内容得到flag

秋名山车神

进入题目没刷新一次数字改变一次 直接上脚本 注意正则表达式得到flag

xxx二手交易市场

进入题目注册账号登陆后点击头像发现可以上传图片 上传正常图片bp抓包发现为jpeg类型且base64加密修改为php类型知道文件上传路径 蚁剑连接得到flag

《已解决》无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

原因: Python 环境未正确配置:可能你没有将 Python 添加到系统的环境变量中。 你需要手动将 Python 的安装目录(以及包含 pip.exe 的文件夹)添加到系统的环境变量 PATH 中。解决: 1. 找到python的安装目录 键盘按下 win键+R键, 输入cmd回车。 随后输入 where pythonwhe…

最新扣子(Coze)实战案例:图像流工具之空间风格化,完全免费教程

🧙‍♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用。 📜 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》,完全免费学习。 👀 免费扣子Coze教程地址:https://www.bzfree.com/如果想学习AI应用搭建,请关注公众号,及时获取最新免费教程。 上节课讲了人像风格…

认识终端和shell

【教程】在macOS上用VSCode写C++代码 4 认识终端和shell 内建程序与内建命令 打开终端,其实相当于打开了shell。shell 可以运行一些程序(例如 sayhello、 /bin/mkdir )。 shell自身也带着一些程序(二进制可执行文件),这些程序就叫内建程序。 特点:调用shell内建程序的时…

LVGL一键打包图片工具,全部图片打包成一个bin文件,支持nor flash XIP模式下直接访问数据显示

最近做工程项目,需要用到LVGL,但是搜了很长时间没有看到合适的图片打包工具,大多都是生成数组或者单个的bin文件,这样烧录到nor flash很麻烦 后来看到一篇博客,博主的想法与我类似,不过他后面部分就做的麻烦了,所以,我直接从头写了一个工具,他的博客地址:https://www…