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

devtools/2024/11/6 22:35:23/

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.ppmy.cn/devtools/131853.html

相关文章

国家级汽车检测中心联合开源网安打造安全解决方案,提升行业安全检测水平

某汽车检测中心是我国交通运输行业智能商用车领域的国家级检测中心&#xff0c;以商用车智能化、网联化检测能力引领&#xff0c;拥有交通运输部及工业和信息化部认定的“智能网联汽车自动驾驶封闭测试场地测试基地”和“交通运输部自动驾驶交通技术研发中心”&#xff0c;主要…

GPT-SoVITS 部署方案

简介 当前主流的开源TTS框架&#xff0c;这里介绍部署该服务的主要流程和我在使用过程中出现的问题。 使用的技术 Docker、Jupyter、Python、C# 部署 docker的使用 拉取命令 docker pull jupyter/base-notebook:python-3.10.11jupyter的访问 docker运行以后可以直接使用…

【C++】RBTree——红黑树

文章目录 一、红黑树的概念1.1 红⿊树的规则&#xff1a;1.2 理解最长路径长度不超过最短路径长度的 2 倍1.3 红⿊树的效率 二、 红⿊树的实现2.1 红⿊树的结构2.2 红⿊树的插⼊2.2.1 红⿊树树插⼊⼀个值的⼤概过程 2.3 红⿊树的插⼊代码实现 一、红黑树的概念 红⿊树是⼀棵⼆…

Claude发布桌面客户端!新功能支持分析100页PDF的图像!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

在鸿蒙应用中&#xff0c;Canvas 组件可以实现丰富的动态效果&#xff0c;适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画&#xff0c;以及性能优化策略。 关键词 Canvas 组件动态绘制动画效果动态进度条旋转和缩放性能优…

信息学科平台系统开发:Spring Boot实用指南

3系统分析 3.1可行性分析 通过对本基于保密信息学科平台系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于保密信息学科平台系统采用Spring Boot框架&a…

数据库基础(6) . DDL

3.2.DDL 数据定义语言 DDL : Data Definition Language 用于创建新的数据库、模式&#xff08;schema&#xff09;、表&#xff08;tables&#xff09;、视图&#xff08;views&#xff09;以及索引&#xff08;indexes&#xff09;等。 常见的DDL语句包括SHOW、CREATE、DRO…

Spring Boot驱动的导师双选系统:设计与实现

第一章 绪论 1.1 选题背景 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;尽管身边每时每刻都在产生大量信息&#xff0c;这些信息也都会在短时间内得到处理&#xff0c;并迅速传播。因为很多时候&#xff0c;管理层决策需要大量信…