OpenCV基础05_GUI和PyMsql

目录

一、PySimpleGUI

1、布局和窗口

2、文本框组件

3、视频处理

4、图片处理

二、pymsql

1、数据库操作

2、数据采集

3、人脸识别


一、PySimpleGUI

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

安装

pip install pysimplegui

1、布局和窗口

import PySimpleGUI as sg# 创建一个布局组件layout = [[sg.Button('关闭'), sg.Button('保存')]
]
# 创建窗口
window = sg.Window('第一个窗口', layout)while True:# 读取窗口信息,返回窗口的事件和数据event, value = window.read()# 点击X和退出按钮,关闭窗口if event in (None, '关闭'):# 提示sg.popup('已退出窗口')break# 资源释放
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 == '保存':# 获取编号id = value['id']name = value['name']print(f'id={id},name={name}')# 提示sg.popup(f'id={id},name={name}')window['msg'].update(f'id={id},name={name}')if event in (None, '关闭'):# 提示sg.popup('已退出窗口')break# 资源释放
window.close()

3、视频处理

import cv2
import PySimpleGUI as sgdef rendvideo():# 开启摄像头cap = cv2.VideoCapture('../video/1.mp4')if cap.isOpened() == False:print('没有开启摄像头')return# 创建layoutlayout = [[sg.Button('关闭')],[sg.Image(key='video')]]# 创建一个window对象# location 视频位置# size 视频大小window = sg.Window('视频处理', layout, location=(50, 50))while True:# 读取窗口信息,返回窗口的事件和数据event, value = window.read(timeout=10)# 读取数据帧ret, frame = cap.read()# None 表示未进行任何事件if event in (None, '关闭'):breakif ret:imgType = cv2.imencode('.png', frame)[1].tobytes()window['video'].update(imgType)# 释放资源cap.release()window.close()if __name__ == '__main__':rendvideo()

4、图片处理

import cv2
import PySimpleGUI as sgdef rendpicture():# 设置主题sg.theme('LightBlue')# 创建layoutlayout = [[sg.Text('选择一张图片:')],[sg.Button('关闭'), sg.Button('上传')],[sg.Input(key='-FILE-', enable_events=True),sg.FileBrowse(file_types=(('imageFiles', '*.png;*.jpg;*.jpeg;*.gif'),))],[sg.Image(key='-Image-')]]# 创建窗口window = sg.Window('文件处理', layout)while True:event, value = window.read()if event in (None, '关闭'):breakif event == '上传':# 图片路径不能用中文path = value['-FILE-']print(path)window['-Image-'].update(filename=path)# 释放资源window.close()if __name__ == '__main__':rendpicture()

二、pymsql

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

安装

pip install pymysql

1、数据库操作

import pymysql# 新增
def add(name, num):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"   # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "insert into user_info (user_name,user_num) value (%s,%s)"# 运行sql(增删改查sql的函数)cur.execute(sql, (name, num))# 执行增删改sql的函数,返回一个受影响行数的数值num = cur.rowcountif num > 0:print("新增成功")else:print("新增失败")# 提交con.commit()# 释放资源cur.close()con.close()# 修改name
def update(name, id):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"  # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "update user_info set user_name=%s where user_id=%s"# 运行sql(增删改查sql的函数)cur.execute(sql, (name, id))# 执行增删改sql的函数,返回一个受影响行数的数值num = cur.rowcountif num > 0:print("修改成功")else:print("修改失败")# 提交con.commit()# 释放资源cur.close()con.close()# 查询
def query(num):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"  # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "select * from user_info where user_num=%s"# 运行sql(增删改查sql的函数)cur.execute(sql, (num,))# 查询rs = cur.fetchall()print(rs)cur.close()con.close()if len(rs) > 0:print(rs[0][1])return rs[0][1]else:return "无"# 删除
def delNum(id):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"  # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "delete from user_info where user_id=%s"# 运行sql(增删改查sql的函数)cur.execute(sql, (id,))# 执行增删改sql的函数,返回一个受影响行数的数值num = cur.rowcountif num > 0:print("删除成功")else:print("删除失败")# 提交con.commit()# 释放资源cur.close()con.close()if __name__ == "__main__":# add("王五", 1)# add("李四", 1)# update("路人甲", 3)# query(10)delNum(1)

2、数据采集

import cv2
import pymysql
import PySimpleGUI as sg"""
脸信息记录新增
"""
def add(name, num):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"   # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "insert into user_info (user_name,user_num) value (%s,%s)"# 运行sql(增删改查sql的函数)cur.execute(sql, (name, num))# 执行增删改sql的函数,返回一个受影响行数的数值num = cur.rowcount# 提交con.commit()# 释放资源cur.close()con.close()if num > 0:print("新增成功")return Trueelse:print("新增失败")return False"""
数据采集窗口
"""
def dataget():# 开启摄像头cap = cv2.VideoCapture('../video/1.mp4')if cap.isOpened() == False:print('没有开启摄像头')return# 创建layout布局layout = [[sg.Text("编号:"), sg.InputText(key='num')],[sg.Text("姓名:"), sg.InputText(key='name')],[sg.Image(key='video')],[sg.Button('关闭'), sg.Button('人脸采集')]
]# 创建一个window窗口window = sg.Window('人脸信息采集', layout)while True:# 读取窗口信息,返回窗口的事件和数据event, value = window.read(timeout=10)# 读取数据帧ret, frame = cap.read()# None 表示未进行任何事件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'E:\\images\\{num}.png', frame)if iss:isadd = add(name, num)if isadd:sg.popup('人脸采集成功!')else:sg.popup('人脸采集失败!')# 释放资源cap.release()window.close()if __name__ == '__main__':dataget()

3、人脸识别

import os
import cv2
import face_recognition
import pymysql
import numpy as np
import PySimpleGUI as sg"""
人脸信息记录查找
"""
# 查询
def query(num):# 创建数据库连接con = pymysql.connect(host="localhost",  # 数据库地址user="root",  # 用户名passwd="1234",  # 密码port=3306,  # 端口database="demo91",  # 数据库名charset="utf8"  # 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = "select * from user_info where user_num=%s"# 运行sql(增删改查sql的函数)cur.execute(sql, (num,))# 查询rs = cur.fetchall()# print(rs)cur.close()con.close()if len(rs) > 0:# print(rs[0][1])return rs[0][1]else:return "查无此人""""
数据采集窗口
"""
def rendVideo():# 读取视频cap = cv2.VideoCapture('../video/1.mp4')if not cap.isOpened():print('没有读取到视频')return# 创建layout布局layout = [[sg.Image(key='video')],[sg.Button('关闭'), sg.Button('人脸识别')]]# 创建一个window窗口window = sg.Window('人脸信息识别', layout)while True:# 读取窗口信息,返回窗口的事件和数据event, value = window.read(timeout=10)# 读取数据帧ret, frame = cap.read()# None 表示未进行任何事件if event in (None, '关闭'):breakif ret:# 把数据帧对象转换成bytes数据类型,更新窗口对象window信息imgType = cv2.imencode('.png', frame)[1].tobytes()window['video'].update(imgType)if event == '人脸识别':# 查找人脸库list_dir = os.listdir("E:\\images")if len(list_dir) > 0:for i in list_dir:# 读取一个图片对象 获取人脸特征img = cv2.imread(f'E:\\images\\{i}')if img is None:print('没有读取到图片')breakelse:# 获取已知图片的特征变量en01 = face_recognition.face_encodings(img)[0]# 获取需要识别的图片的特征变量en02 = face_recognition.face_encodings(frame)[0]# 计算欧几里得距离re = np.linalg.norm(en01 - en02)if re < 0.45:num = i.split('.')[0]result = query(num)sg.popup(f'此人是{result}')breakelse:sg.popup('人脸库没有此人')# 释放资源cap.release()window.close()if __name__ == '__main__':rendVideo()

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

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

相关文章

动态代理IP的应用场景有哪些?

在数字化时代&#xff0c;数据的价值不言而喻&#xff0c;而动态代理IP则如同企业数据采集的隐形翅膀&#xff0c;助力企业在信息海洋中翱翔。本文将深入探讨动态代理IP的应用场景&#xff0c;揭示其如何帮助企业提升业务成功率&#xff0c;保障数据采集的安全性与稳定性。 动…

从实验室到晶圆厂:光刻胶剥离液的关键转变

根据QYResearch调研团队最新发布的《全球光刻胶剥离液市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球光刻胶剥离液市场规模将攀升至15.8亿美元&#xff0c;未来几年将以8.9%的复合年增长率&#xff08;CAGR&#xff09;持续增长。 上述图表及数据均来源于QY…

基本开关电源电路分析

一、BOOST电路&#xff08;升压&#xff09;&#xff1a; 下图为Boost电路的最基本拓扑&#xff0c;从左至右包括电源&#xff0c;储能电感L1&#xff0c;开关管Q1&#xff0c;二极管D1&#xff0c;输出滤波电容C1及负载电阻R1。 工作原理&#xff1a; 开关管导通状态&#xf…

【解决】Pico 串流 Unity 开发环境 Preview 黑屏问题

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Pico SDK   一、问题描述 在 Unity 开发环境下运行 测试 PicoVR 表现时&#xff0c;出现 Game视窗 PicoVR投屏 呈现黑屏效果。详细背景如下&#xff1a; UnitySwitch PlateformPICO Integration SDKPICO Live Preview6…

网站域名注册流程详解

随着互联网的普及&#xff0c;网站已经成为人们获取信息、传播观点和开展业务的重要途径。在创建自己的网站之前&#xff0c;第一步是选择并注册一个合适的域名。域名是您网站的地址&#xff0c;它将帮助用户找到您的在线空间。在这篇文章中&#xff0c;我们将详细介绍网站域名…

AI赋能人才管理:东软助力企业数字化转型

在数字化转型大潮席卷全球的今天&#xff0c;如何在新时代背景下实现高效、智能的管理升级&#xff0c;也成为了广大企业关注的焦点。 不久前&#xff0c;东软正式发布TalentBase数智人力资本管理产品&#xff0c;以AI人才管理模式为企业人力资源管理注入了新的活力。 数字化转…

专治拖延症❗❗提升学习效率的秘密武器⏰【当当狸智能时间管理器D2】养成高效自律好习惯

孩子有拖延的习惯&#xff0c;做事磨蹭拖拉&#xff0c;学习效率底下❓ 尤其是低年龄段的孩子时间观念不强&#xff0c; 所以就很懒散很被动&#xff0c;做事的效率也很低 缺乏时间管理能力的孩子可能会 面临学业压力增大、成绩下滑、情绪消极等后果❌ 所以&#xff0c;一…

Python字符串(一图秒了)

一、概念 在Python中用单引号或双引号引起来的内容 定义 s abc123 s "abc" s #空字符串 s "" #空字符串 s #空格字符串 s " " #空格字符串 注意&#xff1a;空格字符串不是空字符串 二、字符串的访问&…

Linux权限管理和文件属性

目录 1. 权限的概念 2. 权限管理 2.1 文件访问者的分类 2.2 文件类型和访问权限&#xff08;事物属性&#xff09; 2.2.1 文件类型 2.2.2 file指令 2.2.3 基本权限 3. 文件访问权限的相关设置方法 3.1 chmod 3.2 chown 和 chgrp 3.3 umask 4. 粘滞位 1. 权限的…

【Python实战案例】爬虫项目实例(附赠源码)

文章目录 声明安装必要的库项目结构技术细节小结 声明 请您遵守网站的robots文件规定&#xff0c;本文目的只是做学习交流使用&#xff0c;包括多个模块&#xff0c;例如数据存储、日志记录、错误处理、多线程或异步请求 安装必要的库 pip install requests beautifulsoup4 sq…

Spring Boot 与 Vue 共筑电影院选票新体验

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

基于java+SpringBoot+Vue的星之语明星周边产品销售网站设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

leetcode - 每日一题 - 3226. 使两个整数相等的位更改次数

位运算 3226. 使两个整数相等的位更改次数 题目 想法 n k 直接返回 0n & k ! k&#xff0c; 直接返回 -1 &#xff08;从题目来说&#xff0c;只能将位的值 从1改为0&#xff0c;&&#xff1a;只有两个数中位的数都是1&#xff0c;才为1&#xff0c;所以符合答案的一…

宠物空气净化器哪家好?希喂、安德迈、霍尼韦尔除毛能力测评

宠物空气净化器哪家好&#xff1f;最近猫咪们开始换毛了&#xff0c;咱猫咖店里的30多只小家伙们集体换毛&#xff0c;掉毛量超多。为了解决这满屋子的猫毛&#xff0c;我特地买了好几台宠物空气净化器&#xff0c;把它们分散放在店里的各个角落&#xff0c;几乎全天24小时不间…

人才画像系统:助力企业打造动态人才成长体系

在当今竞争激烈的市场环境中&#xff0c;人才已成为企业发展的核心竞争力。为了满足企业发展对人才的需求&#xff0c;人才画像系统应运而生&#xff0c;通过以岗位胜任力模型为基础定义人才标准&#xff0c;多维度采集员工信息进行人才对标和盘点&#xff0c;为企业的人才选拔…

浅谈特朗普上台后对IT行业的影响

想必大家都已经知晓&#xff0c;特朗普在2024年再次上台&#xff0c;本篇文章主要来自网络&#xff0c;如果不喜&#xff0c;请勿喷&#xff0c;主要瞎掰下特朗普上台后对IT行业的影响&#xff1a; 贸易政策和关税&#xff1a;特朗普可能会实施更高的关税&#xff0c;这对IT行业…

⭐DINOv2: Learning Robust Visual Features without Supervision 2023 CVPR

GitHub - facebookresearch/dinov2: PyTorch code and models for the DINOv2 self-supervised learning method. 用于估计图像深度、图像分割、特征提取等视觉任务 前段时间&#xff0c;Meta AI 高调发布了 Segment Anything&#xff08;SAM&#xff09;&#xff0c;SAM 以交互…

Node.js回调函数以及事件循环使用介绍(基础介绍 三)

回调函数 Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现&#xff0c;但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用&#xff0c;Node 使用了大量的回调函数&#xff0c;Node 所有 API 都支持回调函数。 例如&#xff0c;我们可以…

Linux系列-进程的属性

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们上一篇文章当中讲到了进程的概念&#xff0c;我们知道进程信息是放到一个tast_struct的结构体当中的&#xff0c;这个结构体也叫做PCB。 PCB是内存级的操作&#xff0c;我们…

PLC单键启停控制的多种写法

题目&#xff1a;编写程序&#xff0c;实现当按下SB1按钮奇数次&#xff0c;灯亮&#xff1b;当按下SB1按钮偶数次&#xff0c;灯灭&#xff0c;即单键启停控制&#xff0c;设计梯形图。 解法一&#xff1a;使用标志位进行自锁互锁 &#xff08;1&#xff09;刚上电&#xff0c…