PySimpleGUI库和pymysql库

1.PySimpleGUI 库

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

安装:

pip install PySimpleGUI==4.60.5

说明:5.0以上的版本不免费

1.布局和窗口

import PySimpleGUI as sg# 创建一个布局组件
layout = [[sg.Button("关闭"),sg.Button("人脸采集")]
]
# 创建窗口
window = sg.Window("我的窗口", layout)while True:# 读取窗口信息 返回窗口的数据和事件event, value = window.read()if event in("关闭",None):# 提示print("你点了关闭")sg.popup("你点了关闭按钮")breakif event in("人脸采集",):# 提示sg.popup("你点了人脸采集1按钮")
window.close()

2.文本框组件

import PySimpleGUI as sg# 创建一个布局组件
layout = [[sg.Text("编号:",size=(10,1)),sg.InputText(key="id")],[sg.Text("名字:",size=(10,1)),sg.InputText(key="name")],[sg.Text(key="msg")],[sg.Button("关闭"),sg.Button("保存")]
]
# 创建窗口
window = sg.Window("我的窗口", layout)while True:# 读取窗口信息 返回窗口的数据和事件event, value = window.read()if event == "关闭":# 提示print("你点了关闭")sg.popup("你点了关闭按钮")breakif event in("保存",):# 提示# 获取编号id_value = value["id"]name_value = value["name"]window["msg"].update(f"id:{id_value},name:{name_value}")sg.popup("保存")
window.close()

3.视频处理

import cv2
import PySimpleGUI as sg# 开启摄像头
def demo():cap = cv2.VideoCapture(0)if not cap.isOpened():print("没有开启摄像头")return# 窗体创建layoutlayout = [[sg.Image(key="video")],[sg.Button("关闭")],]# 创建窗口window = sg.Window("视频", layout)while True:# 读取数据事件event ,value = window.read(timeout=10)# 读取数据帧ret, frame = cap.read()if event in ("关闭",None):# 提示breakif ret:# 将图片转换为png格式imgType = cv2.imencode(".png", frame)[1].tobytes()print(imgType)window["video"].update(imgType)# 释放资源cap.release()window.close()demo()

4.图片处理

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(timeout=10)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()

2.pymysql

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

安装:

pip install pymysql

对数据库中数据的增删改查:

import pymysql# 新增
def sql_add(name, num):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "insert into demo01 (user_name,user_num) value (%s, %s)"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (name,num))# 执行增删改sq1函数 返回一个受影响行数的数值num = cur.rowcountif num > 0:print("新增成功!")else:print("新增失败!")# 提交con.commit()# 释放资源cur.close()con.close()# 修改
def sql_update(name,num):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "update  demo01 set user_name=%s where user_num=%s"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (name, num))# 执行增删改sq1函数 返回一个受影响行数的数值num = cur.rowcountif num > 0:print("修改成功!")else:print("修改失败!")# 提交con.commit()# 释放资源cur.close()con.close()def sql_query(num):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "select * FROM demo01 WHERE user_num=%s"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (num,))# 查询的结构返回到一个变量rs = cur.fetchall()"""print(rs)print(rs[0][1])"""cur.close()con.close()if len(rs) > 0:return rs[0][1]else:return "查无此人"def sql_delete(id):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "delete from demo01 where user_id=%s"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (id,))# 执行增删改sq1函数 返回一个受影响行数的数值num = cur.rowcountif num > 0:print("删除成功!")else:print("删除失败!")# 提交con.commit()# 释放资源cur.close()con.close()
if __name__ == '__main__':"""sql_add("lisi",2)sql_update("王五",1)sql_query(3)"""sql_delete(1)

3.PySimpleGUI库和pymysql库组合实现人脸采集和人脸识别

1.人脸采集

准备:

  • 创建一个文件夹接收采集的人脸图片
  • 数据库中创建一张用来接收身份信息的表

实现:

import pymysql
import PySimpleGUI as sg
import cv2# 人脸用户的记录
def sql_add(name, num):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "insert into demo01 (user_name,user_num) value (%s, %s)"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (name,num))# 执行增删改sq1函数 返回一个受影响行数的数值num = cur.rowcount# 提交con.commit()# 释放资源cur.close()con.close()if num > 0:print("新增成功!")return Trueelse:print("新增失败!")return False# 数据采集
def dataGet():# 开启摄像头cap = cv2.VideoCapture(0)if not cap.isOpened():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):# 终止循环breakif ret:imgType = cv2.imencode(".png",frame)[1].tobytes()window["video"].update(imgType)if event == "采集":num = value["num"]name = value["name"]# 写入人脸图片iss = cv2.imwrite(f"..\\face_images\\{num}.png",frame)if iss:is_add = sql_add(name,num)if is_add:sg.popup("收集人脸成功")else:sg.popup("收集人脸失败")cap.release()window.close()dataGet()

2.人脸识别

import cv2
import PySimpleGUI as sg
import pymysql
import face_recognition
import os
import numpy as npdef sql_query(num):# 创建数据库链接con = pymysql.connect(host="localhost",user="root",passwd="123456",port=3306,database="demo01",charset="utf8")# 创建游标对象 增删改查函数cur = con.cursor()sq1 = "select * FROM demo01 WHERE user_num=%s"# 运行sq1(增删改sq1的函数)cur.execute(sq1, (num,))# 查询的结构返回到一个变量rs = cur.fetchall()"""print(rs)print(rs[0][1])"""cur.close()con.close()if len(rs) > 0:return rs[0][1]else:return "查无此人"def queryGet():# 开启摄像头cap = cv2.VideoCapture(0)if not cap.isOpened():print("摄像头没有开启")return# 创建布局layout=[[sg.Image(key = "video")],[sg.Button("人脸识别"),sg.Button("关闭")]]# 创建窗口window = sg.Window("人脸信息采集",layout)# 循环list_dir = os.listdir("../face_images")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()window["video"].update(imgType)if event == "人脸识别":if len(list_dir) > 0:for i in list_dir:# 读取图片img = cv2.imread(f"../face_images/{i}")print(i)if img is None:print("没有图片")else:# 获取已知图片的特征变量en1 = face_recognition.face_encodings(img)[0]en2 = face_recognition.face_encodings(frame)if len(en2) == 0:sg.popup("未检测到人脸")breakelse:# 计算欧几里得距离rs = np.linalg.norm(en2[0] - en1)print(rs)if rs < 0.5:b = i.split(".")[0]a = sql_query(b)sg.popup(f"用户{a}打卡成功")list_dir.remove(i)# 终止循环breakelse:sg.popup("人脸库没有此人")else:sg.popup("已全部完成打卡!")breakcap.release()window.close()
if __name__ == '__main__':queryGet()

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

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

相关文章

数据库概论实验一

声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 本文章对数据库概论实验一_求出一箱(每箱装100个)零件的重量 并将输出结果-CSDN博客文章浏览阅读2.7k次&#xff0c;点赞4次&#xff0c;收藏25次。实验数据库&#xff0c;表…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球风电运维市场的规模将攀升至307.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;其年复合增长率&#xff08;CAGR&#xff09;将达到12.5%。 上述图表及…

gerrit 搭建遇到的问题

1、启动Apache&#xff0c;端口被占用 : AH00072: make sock: could not bind to address (0S 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。: AH00072: make sock: could not bind to address 0.0.0.:443 a AH00451: no listening sockets available, shutti…

栈和队列相关题 , 用队列实现栈, 用栈实现队列 ,设计循环队列 C/C++双版本

文章目录 1.用队列实现栈2.用栈实现队列3. 设计循环队列 1.用队列实现栈 225. 用队列实现栈 思路&#xff1a; 使用两个队列&#xff0c;始终保持一个队列为空。 当我们需要进行压栈操作时&#xff0c;将数据压入不为空的队列中&#xff08;若两个都为空&#xff0c;则随便压…

关于STM32在代码中的而GPIO里面的寄存器(ODR等)不需要宏定义的问题

1.GPIO为什么需要宏定义地址 在 STM32 这样的微控制器中&#xff0c;硬件寄存器的地址是固定的并且特定于每个外设&#xff08;比如 GPIOA、GPIOB 等&#xff09;。为了方便代码访问这些硬件寄存器&#xff0c;我们通常会使用宏定义来指定每个外设的基地址。这样做有几个理由&a…

kimi智能助手,5大高阶玩法,95%的人还不知道

01 智能搜索:精准定位,一键获取最佳答案 Kimi,作为您的AI助手,拥有卓越的网络搜索能力。 我们能够迅速穿梭于信息海洋,为您筛选出五篇精选网络文章,并提供直接的网址链接。 Kimi的总结能力同样出色,特别适合那些追求效率、不愿深陷长篇文章的用户。 02 PDF速读:快速把…

关于数学建模的一些介绍

为了更好了解世界&#xff0c;我们可以通过数学来描述许多特定的现象&#xff0c;而数学模型就是现实世界的理想化&#xff0c;不过它永远不能完全精确地表示现实世界。 在这篇文章中&#xff0c;我将介绍一些数学建模的基本概念以及相应的基础知识&#xff0c;而关于更具体的…

远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!

一&#xff0c;概述 FP7209是台湾远翔一款非同步升压LED驱动IC&#xff0c;封装有2种&#xff0c;分别是SOP-8L(EP), TSSOP-14L(EP)。控制外部开关NMOS。 输入低启动电压2.8V&#xff0c;可支持单节锂电池供电。工作电压5V&#xff0c;VFB反馈电压0.25V&#xff0c;反馈电压低…

算法日记 18 day 二叉树

最后三题&#xff0c;二叉树就结束啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;修剪二叉搜索树 669. 修剪二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

hashcat使用

0.介绍 Hashcat 软件是一款非常强大的、开源的、号称世界上最快的密码破解软件&#xff0c;配合强大的字典&#xff0c;可以破译超过百分之九十的密码。Hashcat 目前支持各类公开算法高达240类&#xff0c;市面上公开的密码加密算法基本都支持&#xff0c;有 Microsoft LM 哈希…

mysql 安装 windows

新版安装 新版本安装 如果出现initializing database无法安装 则用我当前版本传送门 如MySQL 安装时没有developer default 选项 解决方法传送门 如果上述还不行 可以选择full 汉化下载 传送门

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

vue常见题型(1-10)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式&#xff0c;由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…

C语言变量与强制类型转换深度解析

在上一篇文章中&#xff0c;小编对数据类型进行了详细的讲解与剖析&#xff0c;所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩&#xff0c;来波鸡汤&#xff0c;学习一定不能着急&#xff0c;无法一下就学明白的知识我们需要给他时间&#xff0c;一定不要在一个知…

JAVA+微信小程序前后端源码 微信OCR识别 识别身份证信息

官方文档:身份证识别 | 微信开放文档 实现效果 : 用的奥巴马的网络图片测试,图片 后端JAVA代码 这里用的若依的后端,前后端分离版的 package com.ruoyi.common.utils;import java.io.File; import java.io.IOException;import org.apache.http.HttpEntity; import org.apac…

SL6605 输入0.8-5.5V 单颗锂电池驱动LED升压恒流限流方案

一、芯片特性 输入电压范围广&#xff1a;SL6605可接受0.8V至5.5V的输入电压&#xff0c;使其能够轻松应对各种锂电池电压波动。升压恒流功能&#xff1a;该芯片具有升压能力&#xff0c;可将低电压输入转换为适合LED驱动的高电压&#xff0c;并保持恒定的输出电流。限流保护&…

ubuntu 安装go和vscode

1 安装Go 打开终端&#xff0c;执行以下命令下载Golang安装包&#xff1a; wget https://golang.org/dl/go1.xx.x.linux-amd64.tar.gz注意&#xff1a;替换命令中的“1.xx.x”为最新版本号&#xff0c;例如&#xff1a;1.23.2. 2. 解压安装包&#xff1a; sudo tar -C /usr/…

[spring源码]spring启动流程

spring启动流程 AnnotationConfigApplicationContext的构造方法 1.父类构造方法&#xff0c;构造一个DefaultListableBeanFactory 在调用AnnotationConfigApplicationContext的构造方法之前&#xff0c;会调用父类GenericApplicationContext的无参构造方法&#xff0c;会构造…

Kafka自动生产消息软件(自动化测试Kafka)

点击下载《Kafka服务端(含Zookeeper)一键自启软件》 点击下载《kafka客户端生产者消费者kafka可视化工具&#xff08;可生产和消费消息&#xff09;》 点击下载《Kafka自动生产消息软件》 1. 前言 在软件开发过程中&#xff0c;Kafka常被用作消息队列来处理特定的业务功能。为…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…