PySimpleGUI和Pymysql

PySimpleGUI 库

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

安装

pip install pysimplegui -i https://pypi.tuna.tsinghua.edu.cn/simple

布局和窗口

import datetime
import osimport PySimpleGUI as sg
import cv2
import face_recognition
import numpy as np# 定义布局
layout = [[sg.Text('你好')],[sg.Button('关闭')]
]# 创建窗口
window = sg.Window('我的窗口', layout)# 事件循环
while True:event, values = window.read()# 点击X或退出按钮,关闭窗口if event in (None, "关闭"):break# 关闭窗口
window.close()

 文本输入输出案例

layout = [[sg.Text('编号:', size=(10, 1)), sg.InputText()],[sg.Text(key='text')],[sg.Button('保存'), sg.Button('关闭')]
]# 创建窗口
window = sg.Window('我的窗口', layout)
# 事件循环
while True:# event 鼠标事件  value 接收的值event, values = window.read()# 获取编号id = values[0]if event == '保存':print(f'id = {id}')sg.popup(f'id={id}')# 更新文本window['text'].update('新的文本内容')breakif event == sg.WIN_CLOSED or event == '关闭':breakwindow.close()

视频处理

cap = cv2.VideoCapture(0)
if cap.isOpened() == False:print('没有开启摄像头')layout = [[sg.Button('关闭')],[sg.Image(key='video')],
]
window = sg.Window('视频处理', layout)while True:event, values = window.read(timeout=5)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()

图片上传

# 设置主题
sg.theme('LightBlue')layout = [[sg.Text('请选择一张图片:')],[sg.Input(key='-FILE-', enable_events=True),sg.FileBrowse(file_types=(('Image Files', '*.jpg;*.jpeg;*.png;*.jpeg;*.gif;'),))],[sg.Button('退出')],[sg.Image(key='-IMAGE-')]
]window = sg.Window('图片上传示例', layout)
while True:event, value = window.read()if event in (None, '退出'):breakelif event == '-FILE-':# 更新图片image_path = value['-FILE-']print(image_path)img = cv2.imread(image_path)if img is not None:imgType = cv2.imencode('.png', img)[1].tobytes()window['-IMAGE-'].update(data=imgType)#else:sg.popup('无法加载图片,请选择有效的图片文件。')window.close()

pymsql 库

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

安装

pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

添加数据

'''
ser='root'
password='123456'
database='user_info'
sql = "insert into user_list (user_id,user_name) value (%s,%s)"
sql_query = "select * from user_list where user_id = %s "
需要修改'''
# 添加人脸信息到数据库中
def add(user_id, user_name):# 创建数据库连接con = pymysql.Connect(host='localhost', user='root', password='123456', port=3306, database='user_info',charset='utf8')# 创建游标cur = con.cursor()# 定义sql语句变量sql = "insert into user_list (user_id,user_name) value (%s,%s)"# 定义sql语句变量sql_query = "select * from user_list where user_id = %s "# 执行sqlcur.execute(sql_query, user_id)# 返回查询的结果result = cur.fetchall()if len(result) == 0:# 执行sqlcur.execute(sql, (user_id, user_name))# 执行返回的插入数量num = cur.rowcount# 提交操作con.commit()cur.close()con.close()if num > 0:print(f"({user_id},{user_name})插入成功")return Trueelse:# print("插入失败")# return Falsereturn "插入失败"else:cur.close()con.close()return f'{user_id}已存在'# add('001', '张三')
# add('002', '李四')
# add('003', '王五')
# add('004', '赵六')

查询数据

def query(id):# 创建数据库连接con = pymysql.Connect(host='localhost', user='root', password='123456', port=3306, database='user_info',charset='utf8')# 创建游标cur = con.cursor()# 定义sql语句变量sql = "select * from user_list where user_id = %s "# 执行sqlcur.execute(sql, id)# 返回查询的结果result = cur.fetchall()# 提交操作con.commit()cur.close()con.close()if len(result) > 0:return result[0][1]else:return ('查无此人')# print(query('001'))

删除数据

def delete(id):# 创建数据库连接con = pymysql.Connect(host='localhost', user='root', password='123456', port=3306, database='user_info',charset='utf8')# 创建游标cur = con.cursor()# 定义sql语句变量sql = "delete from user_list where user_id= %s "sql_query = "select * from user_list where user_id = %s "# 执行sqlcur.execute(sql_query, id)# 返回查询的结果result = cur.fetchall()if len(result) == 0:print(f'{id}不存在')else:# 执行sqlcur.execute(sql, id)# 返回删除的数量num = cur.rowcount# 提交操作con.commit()cur.close()con.close()if num > 0:print('删除成功')return Trueelse:print('删除失败')return False# delete('002')

更新数据 

def update(id, name):try:# 创建数据库连接con = pymysql.Connect(host='localhost', user='root', password='123456', port=3306, database='user_info', charset='utf8')# 创建游标with con.cursor() as cur:# 定义sql语句变量sql = "UPDATE user_list SET user_name = %s WHERE user_id = %s"# 执行sqlcur.execute(sql, (name, id))# 提交操作con.commit()# 返回删除的数量num = cur.rowcountif num > 0:print('修改成功')return Trueelse:print('修改失败')return Falseexcept pymysql.MySQLError as e:print(f"数据库错误: {e}")return Falsefinally:if con:con.close()# 示例调用
update(1, '新用户名')

综合应用

人脸采集

(1)准备工作:创建数据库和人脸数据表(user_id,user_name)

(2)存储人脸数据表,人脸图片保存在目录下

def faceGather():cap = cv2.VideoCapture(0)layout = [[sg.Text('工号:', size=(10, 1)), sg.InputText()],[sg.Text('姓名:', size=(10, 1)), sg.InputText()],[sg.Button('人脸采集', size=(10, 1)), sg.Button('退出', size=(10, 1))],[sg.Image(key='image')]]window = sg.Window('人脸采集', layout, location=(350, 300), size=(800, 500))# 开始录入人脸while True:event, values = window.read(timeout=5)ret, frame = cap.read()if event in (None, '退出'):breakif ret:img_encode = cv2.imencode('.png', frame)[1].tobytes()window['image'].update(img_encode)if event == '人脸采集':id = values[0]name = values[1]print(id, name)iss = cv2.imwrite(f'D:\\WorkSpace\\MyProject\\Opencv_learn\\face\\{id}.png', frame)if iss:if add(id, name):sg.popup('采集成功')else:sg.popup('采集失败')else:sg.popup('采集失败')cap.release()window.close()faceGather()

人脸识别

(1)根据视频帧与人脸图片比较,取出其id

(2)在数据库中查询id的对应信息

def faceRecognize():cap = cv2.VideoCapture(0)layout = [[sg.Button('人脸识别', size=(10, 1)), sg.Button('退出', size=(10, 1))],[sg.Image(key='image')]]window = sg.Window('打卡', layout, location=(350, 300), size=(800, 500))# 开始录入人脸while True:event, values = window.read(timeout=5)ret, frame = cap.read()if event in (None, '退出'):breakif ret:img_encode = cv2.imencode('.png', frame)[1].tobytes()window['image'].update(img_encode)if event == '人脸识别':file_path = 'D:\\WorkSpace\\MyProject\\Opencv_learn\\face\\'img_list = os.listdir(file_path)face_list = face_recognition.face_locations(frame)if len(face_list) > 0:# print("检测到人脸")encode1 = face_recognition.face_encodings(frame)[0]# 准备数据result_list = []img_name = ''# 遍历人脸数据库for img_name in img_list:face = cv2.imread(file_path + img_name)encode2 = face_recognition.face_encodings(face)[0]result = np.linalg.norm(encode2 - encode1)# 取出idid = img_name.split('.')[0]result_list.append((id, result))min_id, min_result = min(result_list, key=lambda x: x[1])# 实现最优匹配if min_result < 0.4:re = query(min_id)# 打卡时间current_time = datetime.datetime.now()formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")sg.popup(re, formatted_time, '打卡成功', )break# 遍历到最后一张图片还是没有满足result<0.4else:sg.popup("查无此人")else:sg.popup("没有检测到人脸")cap.release()window.close()faceRecognize()

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

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

相关文章

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;给人…

window中借助nginx配置vite+vue项目的反向代理步骤

在官网下载好nginx的安装包后&#xff0c;解压后 CMD打开 start nginx 是启动命令 nginx -s stop 停止服务 nginx -s reload 如果重写了nginx.conf文件&#xff0c;要执行这条命令 正常情况下 成功启动和成功停止服务长这样 错误情况&解决 如果nginx -s stop失败 ngi…

花指令例子

如图所示&#xff1a; 指令EB FF的汇编代码为jmp -1&#xff0c;CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1)&#xff0c;EIP为6c80c2, 执行后&#xff0c;EIP为0x6c80c1。但是反汇编器无法自动识别该指令。

关于我的编程语言——C/C++——第八篇

&#xff08;叠甲&#xff1a;如有侵权请联系&#xff0c;内容都是自己学习的总结&#xff0c;一定不全面&#xff0c;仅当互相交流&#xff08;轻点骂&#xff09;我也只是站在巨人肩膀上的一个小卡拉米&#xff0c;已老实&#xff0c;求放过&#xff09; 什么是C C语言是结…

博客园美化

1、主题介绍 使用的 SimpleMemory 这款主题 github官网 2、设置主题并申请 js 代码权限 3、主题设置 博客侧边栏公告 <script type"text/javascript">window.cnblogsConfig {info: {blogIcon: https://ts1.cn.mm.bing.net/th/id/R-C.85775e482741cb7ab7f…

SpringBoot基础系列学习(二):配置详解

文章目录 一丶依赖二丶配置文件三丶获取配置文件中的信息1.PropertySource("classpath:application2.properties")2. ConfigurationProperties(prefix "baicaizhi1")3. Value4. 使用EnviromentgBean获取5. 使用ResourceBundle获取 一丶依赖 <dependen…

初识Electron 进程通信

概述 Electron chromium nodejs native API&#xff0c;也就是将node环境和浏览器环境整合到了一起&#xff0c;这样就构成了桌面端&#xff08;chromium负责渲染、node负责操作系统API等&#xff09; 流程模型 预加载脚本&#xff1a;运行在浏览器环境下&#xff0c;但是…

建网站怎么建?只需几个步骤

在这个网络飞速发展的时代&#xff0c;越来越多的人都渴望拥有自己的网站。然而&#xff0c;对于大多数新手来说&#xff0c;如何建立自己的网站可能充满了挑战。本文将为您详细介绍建网站的关键步骤&#xff0c;让您能够轻松搭建自己的网站。 选择适合的建站工具 虽然市面上有…

台达控制器与三菱变频器实现EtherCAT转CC-Link IEFB协议通讯方案

一.项目背景&#xff1a; 在某自动化生产车间中&#xff0c;原有系统采用台达的 EtherCAT 控制器来控制多个设备的运动和操作&#xff0c;但车间内的一些关键设备使用的是三菱变频器&#xff0c;且基于 CC-Link IEFB 协议通讯。为了实现整个系统的集中控制和数据统一管理&#…

Js — 防抖及底层实现

防抖&#xff1a;单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次 防抖实现方式&#xff1a; lodash提供的防抖函数_.debounce(func,[wait0],[option]) 延迟wait毫秒后调用func方法 定时器setTimeout 目标&#xff1a;鼠标在盒子上移动&#xff0c;鼠标停止50…

负载均衡式在线oj项目开发文档2(个人项目)

judge模块的框架 完成了网页渲染的功能之后&#xff0c;就需要判断用户提交的代码是否是正确的&#xff0c;当用户点击提交之后&#xff0c;就会交给路由模块的/judge模块&#xff0c;然后这个路由模块就需要去调用jude模块了&#xff0c;也就是需要一个新的jude模块&#xff…

setContentView调用流程(二) -将布局添加到mContentParent

Android setContentView执行流程(一)-生成DecorView Android setContentView执行流程(二)-将布局添加到mContentParent 上篇博客我们介绍了setContentView的第一步即生成DecorView以及获取到mContentParent的流程&#xff0c;同时还提到继承自Activity和AppCompatActivity生成…

【C#设计模式(2)——工厂模式】

前言 工厂模式&#xff1a;使用工厂创建对象。工厂模式的主要目的是分离对象的创建与调用&#xff0c;通过使用工厂统一管理对象的创建。工厂模式可以隐藏对象的创建细节&#xff0c;使客户终端代码只关注使用对象而不需要关注对象的创建过程。 运行结果 代码 #region 食品 /…

Dockerfile

1. Dockerfile 简介 1.1 什么是Dockerfile Dockerfile是一个用于定义和构建Docker镜像的文本文件&#xff0c;它通过一系列指令和参数来描述镜像的构建过程和配置。这些指令包括基础镜像、软件包安装、文件拷贝、环境变量设置等&#xff0c;使得应用程序及其依赖项可以被打包…

VBA高级应用30例应用3在Excel中的ListObject对象:插入行和列

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

C++OJ_二叉树的层序遍历

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C_OJ 小伞的主页&#xff1a;xiaosan_blog 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff0…

ctfshow-web入门-反序列化(web265-web270)

目录 1、web265 2、web266 3、web267 4、web268 5、web269 6、web270 1、web265 很简单的一个判断&#xff0c;满足 $this->token$this->password; 即可 由于 $ctfshow->tokenmd5(mt_rand()) 会将 token 随机为一个 md5 值&#xff0c;我们使用 & 绕一下&am…