24.11.6 PySimpleGUI库和pymsql 库以及人脸识别小项目

PySimpleGUI 库

PySimpleGUI 是一个用于简化 GUI 编程的 Python 包,它封装了多种底层 GUI 框架(如 tkinter、Qt、WxPython 等),提供了简单易用的 API。PySimpleGUI 包含了大量的控件(也称为小部件或组件),这些控件可以帮助你快速构建用户界面

安装

直接pip install pysimplegui安装的是最新版PysimpleGUI,这个5.0之后就是收费的,只能试用。pip install PySimpleGUI==4.60.5,可以下载旧版,免费使用
先卸载,使用命令pip uninstall pysimplegui,然后使用命令安装旧版本
pip install PySimpleGUI==4.60.5

pip install pysimplegui

布局和窗口

文本输入输出案例

import PySimpleGUI as sg# 创建一个布局组件
layout = [[sg.Text("ID", size=(10, 1), ), sg.InputText()],[sg.Text("Name", size=(10, 1), ), sg.InputText()],[sg.Text(key="msg")],[sg.Button("关闭"), sg.Button("保存")]
]
# 创建窗口
window = sg.Window("我的第一个窗口", layout)while True:event01, value01 = window.read()print(value01)if event01 == "关闭":sg.popup("你点了关闭按钮")breakif event01 in "保存":id = value01[0]name = value01[1]window["msg"].update(f"ID:{id}  Name:{name}")sg.popup("你点了人脸采集按钮")# 资源释放
window.close()

 视频处理

import PySimpleGUI as sg
import cv2# 开启摄像头
def demo():# 获取摄像头cap = cv2.VideoCapture(0)# 判断摄像头是否开启if cap.isOpened() == False:print("没有开启摄像头")return# 创建layoutlayout = [[sg.Button("关闭")],[sg.Image(key="Video")]]# 创建窗口window = sg.Window("视频处理", layout)while True:# 读取数据和事件event, value = window.read(timeout=10)# 读取数据帧ret, frame = cap.read()if event in (None,"关闭"):breakif ret:imgType = cv2.imencode(".png", frame)[1].tobytes()print(imgType)window["Video"].update(imgType)# 释放资源cap.release()window.close()if __name__ == '__main__':demo()

 图片上传

 

import cv2
import PySimpleGUI as sg#开启摄像头
def demo():#创建layoutlayout = [[sg.Button("关闭"),sg.Button("上传")],[sg.Input(key='-FILE-', enable_events=True),sg.FileBrowse(file_types=(("Image Files", "*.png;*.jpg;*.jpeg;*.gif"),))],[sg.Image(key="video")]]#创建窗口window = sg.Window("文件处理",layout)while True:event,value = window.read()if event in (None,"关闭"):breakif event == "上传":#图片路径不能用中文path = value["-FILE-"]print(path)img = cv2.imread(path)imgType = cv2.imencode(".png", img)[1].tobytes()window["video"].update(imgType)window.close()demo()

pymsql 库

PyMySQL 是一个用于连接 MySQL 数据库的纯 Python 实现。它允许 Python 程序与 MySQL 数据库进行交互,执行 SQL 查询,并处理结果集

安装

pip install pymysql

数据库操作

import pymysql# 新增
def add(name, num):con = pymysql.connect(host="localhost",  # 主机名user="root",password="xz413613",database="demo1",  # 数据库名charset="utf8"  # 编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "insert into user_list (user_name,user_num) values(%s,%s)"# 运行sqlcur.execute(sql, (name, num))# 返回这串sql语句影响了多少行数据num = cur.rowcountif num > 0:print("新增成功")else:print("新增失败")# 提交con.commit()# 释放资源cur.close()con.close()def update(num):con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名password="xz413613",  # 密码database="demo1",  # 数据库名charset="utf8"  # 编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "select * from user_list where user_num=%s"# 运行sqlcur.execute(sql, (num,))# 查询rs = cur.fetchall()# 释放资源cur.close()con.close()if len(rs) > 0:print(rs)print(rs[0][1])else:return "查无此人"def del_num(id):con = pymysql.connect(host="localhost",  # 主机名user="root",password="xz413613",database="demo1",  # 数据库名charset="utf8"  # 编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "delete from user_list where user_id=%s"# 运行sqlcur.execute(sql, (id,))# 返回这串sql语句影响了多少行数据num = cur.rowcountif num > 0:print("删除成功")else:print("删除失败")# 提交con.commit()# 释放资源cur.close()con.close()if __name__ == '__main__':# add("小11", 111)update(1)# del_num(1)

 

人脸采集

1 准备工作:创建人脸表

2 完成人脸保存

import PySimpleGUI as sg
import cv2
import pymysql# 新增
def add(name, num):con = pymysql.connect(host="localhost",  # 主机名user="root",password="xz413613",database="demo1",  # 数据库名charset="utf8"  # 编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "insert into user_list (user_name,user_num) values(%s,%s)"# 运行sqlcur.execute(sql, (name, num))# 返回这串sql语句影响了多少行数据num = cur.rowcount# 提交con.commit()# 释放资源cur.close()con.close()if num > 0:print("新增成功")return Trueelse:print("新增失败")return False# 数据窗口采集
def datacGet():# 开启摄像头cap = cv2.VideoCapture(0)if cap.isOpened() == False:print("摄像头没开")return# 创建布局layout = [[sg.Text("编号:"), sg.InputText(key="num")],[sg.Text("姓名:"), sg.InputText(key="name")],[sg.Image(key="video")],[sg.Button("关闭"), sg.Button("采集")]]# 创建窗口window = sg.Window("人脸信息采集", layout)# 循环while True:event, value = window.read(timeout=10)# 读取视频ret, frame = cap.read()if event in (None, "关闭"):# 终止循环break# 视频流的处理if ret:# 已经读取到视频,现在进行转换,然后放进image里面imType = cv2.imencode(".png", frame)[1].tobytes()window["video"].update(imType)if event == "采集":# 获取编号和姓名num = value["num"]name = value["name"]# 写入人脸图片iss = cv2.imwrite(f"D:\\HQYJ\\HQYJPY Project\\241031AI OpenCV Project\\face_package\\face_image\\{num}.png",frame)if iss:issAdd = add(name, num)if issAdd:sg.popup("人脸采集成功")else:sg.popup("人脸采集失败")# 资源释放cap.release()window.close()if __name__ == '__main__':datacGet()

人脸识别

import os
import PySimpleGUI as sg
import cv2
import face_recognition
import numpy as np
import pymysql# 新增
def update(num):con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名password="xz413613",  # 密码database="demo1",  # 数据库名charset="utf8"  # 编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "select * from user_list where user_num=%s"# 运行sqlcur.execute(sql, (num,))# 查询rs = cur.fetchall()# 释放资源cur.close()con.close()if len(rs) > 0:print(rs)return rs[0][1]else:return "查无此人"# 数据窗口采集
def datacGet():# 开启摄像头cap = cv2.VideoCapture(0)if cap.isOpened() == False:print("摄像头没开")return# 创建布局layout = [[sg.Image(key="video")],[sg.Button("关闭"), sg.Button("识别")]]# 创建窗口window = sg.Window("人脸信息识别", layout)# 循环while True:event, value = window.read(timeout=10)# 读取视频ret, frame = cap.read()if event in (None, "关闭"):# 终止循环break# 视频流的处理if ret:# 已经读取到视频,现在进行转换,然后放进image里面imType = cv2.imencode(".png", frame)[1].tobytes()window["video"].update(imType)if event == "识别":# 查找人脸库list_dir = os.listdir("D:\\HQYJ\HQYJPY Project\\241031AI OpenCV Project\\face_package\\face_image")if len(list_dir) > 0:for i in list_dir:# 读取一个图片对象img = cv2.imread(f"D:\\HQYJ\HQYJPY Project\\241031AI OpenCV Project\\face_package\\face_image\\{i}")if img is None:print("没有读取图片")breakelse:# 获取已知图片的特征变量en1 = face_recognition.face_encodings(img)[0]# 获取需要检测图片的特征变量en2 = face_recognition.face_encodings(frame)[0]# 计算欧几里得距离rs = np.linalg.norm(en1 - en2)print(rs)if rs < 0.4:b = i.split(".")[0]a = update(b)sg.popup(f"用户{a},打卡成功")breakelse:sg.popup("人脸库没有此人")# 资源释放cap.release()window.close()if __name__ == '__main__':datacGet()

以上代码在不同的设备上使用,需要注意代码中路径的设置,以及检查是否安装了必需的第三方库

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

一夜吸粉10万!AI妖精变身视频如何做的?5分钟你也能赶上末班车!

本文背景 最近有小伙伴跟我发了一个AI视频&#xff0c;问我是怎么做的&#xff1f; 很多人在各大自媒体平台&#xff0c;像某音、蝴蝶号都刷到过下面这种妖精变身的短视频。 我也常刷到&#xff0c;从这类视频能看到点赞、收藏、评论的数据都特别高&#xff0c;动不动就几千、几…

【JAVA项目】基于jspm的【医院病历管理系统】

技术简介&#xff1a;采用jsp技术、MySQL等技术实现。 系统简介&#xff1a;通过标签分类管理等方式&#xff0c;实现管理员&#xff1b;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、…

Oasis:首个可玩的AI生成互动游戏

游戏玩法介绍 Oasis 是由AI公司Decart开发的一款实时生成、可交互的Minecraft风格游戏。这款游戏利用生成式AI技术,创造出独特的“开放世界”体验。Oasis基于大量Minecraft游戏视频进行训练,通过键盘和鼠标输入实时生成游戏画面,模拟物理效果、规则及视觉效果。用户在游戏中…

Python网络爬虫入门篇!

预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;Request包含&#xf…

【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)

文章目录 前言1. auto关键字&#xff08;C11&#xff09;1.1 为什么要有auto关键字1.2 auto关键字的使用方式1.3 auto的使用细则1.4 auto不能推导的场景 2. 基于范围的for循环&#xff08;C11&#xff09;2.1 范围for的语法2.2 范围for的使用条件 3. 指针空值nullptr&#xff0…

科研绘图系列:R语言组合多个不同图形(violin density barplot heatmap)

文章目录 介绍加载R包数据下载函数图1: Boxplots导入数据数据预处理画图图2: Violin导入数据数据预处理画图图3: Density plots per habitat数据预处理画图图4: Density plots per depth数据预处理画图图5: bar plot准备颜色导入数据数据预处理数据预处理画图图6: Mantel Heat…

系统聚类的分类数确定——聚合系数法

breast_cancer数据集分析——乳腺癌诊断 #读取乳腺癌数据 import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer data load_breast_cancer() X data.data y data.target.. _breast_cancer_dataset:Breast cancer wisconsin (diagnosti…

jsp+sevlet+mysql实现用户登陆和增删改查功能

jspsevletmysql实现用户登陆和增删改查功能 一、系统介绍二、功能展示1.用户登陆2.用户列表3.查询用户信息4.添加用户信息5.修改用户信息6.删除用户信息 四、其它1.其他系统实现 一、系统介绍 系统主要功能&#xff1a; 用户登陆、添加用户、查询用户、修改用户、删除用户 二…

一文了解Java序列化

Java 序列化&#xff08;Serialization&#xff09;是将对象的状态转换为字节流&#xff0c;以便将对象的状态保存到文件中或通过网络传输的过程。反序列化&#xff08;Deserialization&#xff09;则是将字节流恢复为原始对象。Java 序列化主要通过 Serializable 接口实现。 为…

斗破QT编程入门系列之前言:认识Qt:获取与安装(四星斗师)

本系列是在学习完C之后&#xff0c;然后通过Qt构建界面来&#xff0c;赋予枯燥的代码新的样貌&#xff0c;这样我们才能开发出更人性化的程序&#xff0c;同时会进一步提高初学者对编程的兴趣&#xff0c;大家加油&#xff0c;斗破Qt来了。 斗破Qt目录&#xff1a; 斗破Qt编程…

Spring Boot - 扩展点 EnvironmentPostProcessor源码分析及真实案例

文章目录 概述EnvironmentPostProcessor 作用EnvironmentPostProcessor 实现和注册创建类并实现接口注册到 Spring Boot常见应用场景 源码分析1. EnvironmentPostProcessor 接口定义2. 扩展点加载流程3. 加载 EnvironmentPostProcessor 实现类4. EnvironmentPostProcessor 执行…

封装的数字滚动组件的实现代码

效果&#xff1a; 学习啦&#xff1a; Vue 是一个渐进式框架&#xff0c;鼓励通过组件化来构建应用&#xff0c;其组件化优势&#xff1a; 代码复用&#xff1a;不同的视图和功能被封装成独立的组件&#xff0c;便于复用。易于维护&#xff1a;每个组件职责单一、耦合度低&…

Unity跨平台基本原理

目录 前言 ​编辑 Mono Unity和Mono的关系 Unity跨平台必备概念 Mono利用 Mono主要构成部分 基于Mono跨平台的优缺点 IL2CPP Mono和IL2CPP的区别 Mono IL2CPP Mono和IL2CPP的使用建议 安装IL2CPP IL2CPP打包存在的问题 类型裁剪 泛型问题 前言 Unity跨平台的基…

计算机网络(3)

UDP是面向无连接的通信协议&#xff0c;UDP数据包括目的端口号和源端口号信息&#xff0c;由于 不需要连接&#xff0c;所以可以实现广播发送&#xff1b; 传输控制层 UDP协议&#xff08;用户数据报协议&#xff09; UDP通信时不需要接收方确认&#xff0c;属于不可靠的传输&a…

2024年11月8日上海帆软用户大会

2024年11月8日上海帆软用户大会 2024年11月8日&#xff0c;上海成功举办了帆软用户大会&#xff0c;主题为“数字聚力&#xff0c;绽放新机”。大会汇聚了众多行业专家和企业代表&#xff0c;共同探讨数字化转型和商业智能领域的最新趋势和实践。 大会亮点&#xff1a; 专家…

PySimpleGUI和Pymysql

PySimpleGUI 库 PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、Qt、WxPython 等&#xff09;&#xff0c;提供了简单易用的 API。PySimpleGUI 包含了大量的控件&#xff08;也称为小部件或组件&#xff09;&…

Qt Event事件系统小探1

目录 Qt Event System From qt.doc 如何传递事件 事件类型 事件处理程序 事件过滤器 发送事件 事件的产生和派发 处理我们的事件 来一段好玩的代码 扩展&#xff1a;QWidget如何处理我们的事件&#xff1f; 扩展2&#xff1a;实现一个变色的Label Qt Event System Fr…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于凸多面体仿射变换的用户侧灵活性资源多元聚合方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

vue3组合式API下封装hooks使用生命周期,在await之后调用hooks会有警告

起因&#xff1a;想封装一个hooks实现echarts图表随屏幕大小resize并且组件销毁时移除监听。结果在组件里面调用这个hooks&#xff0c;有个告警提示 [Vue warn]: onBeforeUnmount is called when there is no active component instance to be associated with. Lifecycle inje…

使用Python实现图像的手绘风格效果

使用Python实现图像的手绘风格效果 一、引言二、代码详细解释与示例三、完整框架流程四、运行五、结论附&#xff1a;完整代码 一、引言 在数字图像处理领域&#xff0c;模拟手绘风格是一项有趣且具有挑战性的任务。手绘风格图像通常具有独特的纹理和深浅变化&#xff0c;给人…