人脸签到系统 pyQT+数据库+深度学习

一、简介

        人脸签到系统是一种基于人脸识别技术的自动签到和认证系统。它利用计算机视觉和深度学习算法来检测、识别和验证个体的面部特征,以确定其身份并记录其出现的时间。这个系统通常用于各种场景,包括企业、学校、会议、活动和公共交通等,以替代传统的签到方式,如签到表或磁卡,提供更高的安全性、准确性和便捷性。

二、效果展示

*左上角是采集人脸和签到的界面显示

*左下角输入采集人脸的信息

*右侧实时展示已经存放人脸的各种属性信息

三、实现细节

1、多线程实时现实摄像头内容

        采用QT多线程实时对摄像头捕捉到的画面进行显示,当点击结束签到时,程序退出摄像头线程

class SignThread(QThread):changePixmap = pyqtSignal(QImage)update_database=pyqtSignal(str)def run(self):self.is_running=Truecap = cv2.VideoCapture(0,cv2.CAP_DSHOW)while True:ret, frame = cap.read()if ret and self.is_running:cls,rate=predict(frame)if float(rate)>70:print(rate)conn = sqlite3.connect("data.db")cursor = conn.cursor()# cursor.execute("INSERT OR REPLACE INTO students VALUES (?, ?, ?, ?, ?, ?)",#                (student_id, name, age, classname, major, sign_up))cursor.execute("UPDATE students SET sign_up=? WHERE name=?", ('是', cls))conn.commit()conn.close()self.update_database.emit("签到人:"+cls+",   准确率:"+rate)rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)h, w, ch = rgbImage.shapebytesPerLine = ch * wimage = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)self.changePixmap.emit(image)else:#当按下暂停键,停止键以后,界面变为白色width = 640height = 480# 创建一个全白色的 QImagewhite_color = QColor(255, 255, 255)  # 白色image = QImage(width, height, QImage.Format_RGB888)image.fill(white_color)self.changePixmap.emit(image)breakdef stop(self):self.is_running=False

2、深度学习

在train.py对录取人脸手动进行训练,训练完成后,打开main.py主界面进行预测识别,开始签到

#数据增强的方式
traintransform = transforms .Compose([transforms .RandomRotation (20),               #随机旋转角度transforms .ColorJitter(brightness=0.1),     #颜色亮度transforms .Resize([224, 224]),               #设置成224×224大小的张量transforms .ToTensor(),                        # 将图⽚数据变为tensor格式
# transforms.Normalize(mean=[0.485, 0.456, 0.406],
# std=[0.229, 0.224, 0.225]),
])valtransform = transforms .Compose([transforms .Resize([224, 224]),transforms .ToTensor(), # 将图⽚数据变为tensor格式
])trainData = dsets.ImageFolder (trainpath, transform =traintransform ) # 读取训练集,标签就是train⽬录下的⽂件夹的名字,图像保存在格⼦标签下的⽂件夹⾥
valData = dsets.ImageFolder (valpath, transform =valtransform )       #读取演正剧
trainLoader = torch.utils.data.DataLoader(dataset=trainData, batch_size=batch_size, shuffle=True)     #将数据集分批次  并打乱顺序
valLoader = torch.utils.data.DataLoader(dataset=valData, batch_size=batch_size, shuffle=False)          #将测试集分批次并打乱顺序train_sum=len(trainData)    #计算  训练集和测试集的图片总数
test_sum = len(valData)import numpy as npimport torchvision.models as models
model = models.resnet50(pretrained=True) #pretrained表⽰是否加载已经与训练好的参数
model.fc = torch.nn.Linear(2048, num_of_classes) #将最后的fc层的输出改为标签数量(如3),512取决于原始⽹络fc层的输⼊通道
model = model.to(device) # 如果有GPU,⽽且确认使⽤则保留;如果没有GPU,请删除criterion = torch.nn.CrossEntropyLoss() # 定义损失函数optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # 定义优化器from torch.autograd import Variable
#定义训练的函数
def train(model, optimizer, criterion):model.train()total_loss = 0train_corrects = 0for i, (image, label) in enumerate (tqdm(trainLoader)):image = Variable(image.to(device)) # 同理label = Variable(label.to(device)) # 同理#print(i,image,label)optimizer.zero_grad ()target = model(image)loss = criterion(target, label)loss.backward()optimizer.step()total_loss += loss.item()max_value , max_index = torch.max(target, 1)pred_label = max_index.cpu().numpy()true_label = label.cpu().numpy()train_corrects += np.sum(pred_label == true_label)return total_loss / float(len(trainLoader)), train_corrects / train_sumtestLoader=valLoader
#定义测试的函数
def evaluate(model, criterion):model.eval()corrects = eval_loss = 0with torch.no_grad():for image, label in tqdm(testLoader):image = Variable(image.to(device)) # 如果不使⽤GPU,删除.cuda()label = Variable(label.to(device)) # 同理pred = model(image)loss = criterion(pred, label)eval_loss += loss.item()max_value, max_index = torch.max(pred, 1)pred_label = max_index.cpu().numpy()true_label = label.cpu().numpy()corrects += np.sum(pred_label == true_label)return eval_loss / float(len(testLoader)), corrects, corrects / test_sum

3、数据库设计

例如下:对新生信息进行插入操作

student_id = self.studentID.text()
name = self.name.text()
age = self.age.text()
classname = self.classname.text()
major = self.major.text()
sign_up='否'conn = sqlite3.connect("data.db")
cursor = conn.cursor()cursor.execute("INSERT OR REPLACE INTO students VALUES (?, ?, ?, ?, ?, ?)",(student_id, name, age, classname, major,sign_up))conn.commit()
conn.close()self.label_txt.setText(f"Saved: {name}")
self.show_data()

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

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

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

相关文章

10个值得收藏的3D任务角色下载网站

每个人都喜欢免费的东西。 无论是免费的 3D 角色还是游戏资产,我们都喜欢它们。 以下是可以为你的游戏获取免费 3D 角色的前 10 个网站的列表。 你可以将它们用于多种用途,例如 3D 打印或动画剪辑。 如果需要将下载的3D模型转换为其他格式,可…

学生信息系统(python实现)

#codingutf-8 import os.path filenamestudent.txtdef menm():#菜单界面print(学生管理系统)print(-----------------------------功能菜单-----------------------------)print(\t\t\t\t\t\t1.录入学生信息)print(\t\t\t\t\t\t2.查找学生信息)print(\t\t\t\t\t\t3.删除学生信息…

超越代码行数!如何看待Python在大型项目中的真正价值?

在软件开发的世界里,Python是一门备受喜爱的编程语言,它以其简洁、易读和强大的特性而闻名。然而,就像所有备受关注的事物一样,Python也有其争议性话题。其中之一是关于Python在大型项目中的表现。有些人认为Python并不适合处理大…

探索珠宝商城小程序:商家如何实现线上卖珠宝

近期,微信小程序的发展势头强劲,各行各业都在积极开发自己的小程序,以适应这个数字化的时代。珠宝行业也不例外,许多珠宝品牌都已经推出了自己的小程序,为用户提供了更加便捷、个性化的购物体验。因此,制作…

K8s 多集群实践思考和探索

作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。 一、为什么需要多集群 随着K8s和云原生技术的快速发展&#xff0c…

error:03000086:digital envelope routines::initialization error

项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode,node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…

安卓绘制原理之 MeasureCache优化了什么?

安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下,全网居然没有人提过 measureCache。 在前文中提到过,measure的时候,如果命中了 measureCache,会跳过 onMeasure,同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOU…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql,root账…

c语言练习题52:写一个函数判断当前机器是大端还是小端

代码&#xff1a; #include<stdio.h> int check_sys() {int a 1;return *(char*)&a;//小端retrun 1 大端return 0&#xff1b; } int main() {if (check_sys() 1) {printf("小端\n");}elseprintf("大端\n"); } 这里首先取a的地址&#xff0c…

喜讯连连!疆程重磅发布全球独家3.6 TFT- LCD AR-HUD及CMS产品及解决方案,并斩获年度TOP10供应商

9月7日至8日&#xff0c;2023世界显示产业大会在成都盛大启幕&#xff0c;同期由BOE&#xff08;京东方&#xff09;承办的“Define the Future 智能座舱生态论坛”&#xff0c;合肥疆程技术有限公司创始人兼总经理康栋受邀出席并发布两款重磅座舱解决方案。 本次论坛以“智能座…

【css | loading】好看的loading特效

示例&#xff1a; https://code.juejin.cn/pen/7277764394618978365 html <div class"pl"><div class"pl__dot"></div><div class"pl__dot"></div><div class"pl__dot"></div><div c…

前端面试经典题--页面布局

题目 假设高度已知&#xff0c;请写出三栏布局&#xff0c;其中左、右栏宽度各为300px&#xff0c;中间自适应。 五种解决方式代码 浮动解决方式 绝对定位解决方式 flexbox解决方式 表格布局 网格布局 源代码 <!DOCTYPE html> <html lang"en"> <…

数据结构算法-分而治之算法

引言 在茫茫人海中找寻那个特定的身影&#xff0c;犹如在浩瀚的星海中寻找那一颗独特的星辰。小森&#xff0c;一个平凡而真实的男孩&#xff0c;此时正在人群中寻找他的朋友&#xff0c;温迪。 小森运用了一种“分而治之”的算法策略&#xff0c;将周围的人群分成两组&#…

c++day4

仿照string类&#xff0c;完成myString 类 #include <iostream> #include<cstring>using namespace std; class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():size(10){str…

mysql技术文档--之与redo log(重做日志)庖丁解析-超级探索!!!

阿丹&#xff1a; 在刚开始写本文章的是还不太清楚要如何去细啃下这两个体系&#xff0c;在查阅资料的过程中。发现大厂阿里的庖丁解InnoDB系列&#xff0c;详细了的写了很多底层知识&#xff0c;于是基于这个这两个文章才有了阿丹的这篇文章。 整体认知&#xff1a; 在 MySQ…

nVisual光纤资源管理软件,亮相第24届光博会

第24届中国国际光电博览会&#xff08;CIOE&#xff09;于9月6日至8日在深圳国际会展中心盛大开幕。作为行业领先的网络基础设施管理软件供应商&#xff0c;耐威迪携nVisual光纤资源管理软件亮相9号馆C001、C002展位&#xff0c;全方位展示室外网络基础设施管理、光纤资源管理、…

2022年全国研究生数学建模竞赛华为杯E题草原放牧策略研究求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 E题 草原放牧策略研究 原题再现&#xff1a; 一、背景介绍   草原作为世界上分布最广的重要的陆地植被类型之一&#xff0c;分布面积广泛。中国的草原面积为3.55亿公顷&#xff0c;是世界草原总面积的6%~8%&#xff0c;居世界第二。此外…

CSP-J初赛复习大题整理笔记

本篇全是整理&#xff0c;为比赛准备. 在这里插入代码片 #include<cstdio> using namespace std; int n, m; int a[100], b[100];int main() {scanf_s("%d%d", &n, &m);for (int i 1; i < n; i)a[i] b[i] 0;//将两个数组清0&#xff0c;这…

MySQL与ES数据同步的四种方案及实践演示

文章目录 一、同步双写优点缺点双写失败风险项目演示 二、异步双写&#xff08;MQ方式&#xff09;优点缺点项目演示 三、基于Datax同步核心组件架构图支持的数据源及操作项目演示 四、基于Binlog实时同步实现原理优点缺点项目演示 一、同步双写 也就是同步调用&#xff0c;这…

切分支解决切不走因为未合并的路径如何解决

改代码的时候改做分支了&#xff0c;本来是在另一个分支上面改代码&#xff0c;结果改到另一个放置上面&#xff0c;然后想着使用git stash进行保存&#xff0c;然后切到另外一个分支再pop&#xff0c;结果不行。 报这个错误&#xff0c;导致切不过去&#xff0c;因为我这边pop…