11.6学习日志
PySimpleGUI 库
PySimpleGUI 是一个用于简化 GUI 编程的 Python 包,它封装了多种底层 GUI 框架(如 tkinter、Qt、WxPython 等),提供了简单易用的 API。PySimpleGUI 包含了大量的控件(也称为小部件或组件),这些控件可以帮助你快速构建用户界面
安装
pip install pysimplegui
布局和窗口
import PySimpleGUI as sgdef windows():# 定义布局layout = [[sg.Text('你好')],[sg.Button('关闭')]]# 创建窗口window = sg.Window('我的窗口', layout)# 事件循环while True:event, values = window.read()# 点击X和退出按钮,关闭窗口if event in (None, "关闭"):break# 关闭窗口window.close()def texts():# 定义布局layout = [[sg.Text("编号:", size=(10, 1)), sg.InputText(key='id')],[sg.Text("姓名:", size=(10, 1)), sg.InputText(key='name')],[sg.Text(key="text")],[sg.Button('保存'), sg.Button('关闭')]]# 创建窗口window = sg.Window('我的窗口', layout)# 事件循环while True:event, values = window.read()if event in (sg.WIN_CLOSED, '关闭'):break# 确保values中包含有效的输入id_value = values.get('id') # 使用.get()来获取值,避免None值的错误name = values.get('name')if event == '保存' and id_value is not None:print(f'id={id_value}')print(f'name={name}')window['text'].update(f'id={id_value},name={name}')window.close()if __name__ == '__main__':# windows()texts()
视频处理
import cv2
import PySimpleGUI as sgdef 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:img_type = cv2.imencode('.png',frame)[1].tobytes()print(img_type)window['video'].update(img_type)cap.release()window.close()if __name__ == '__main__':demo()
图片上传
import cv2
import PySimpleGUI as sgdef demo():# 创建layoutlayout = [[sg.Image(key='-IMAGE-')],[sg.Input(key='-FILE-', enable_events=True),sg.FileBrowse(file_types=(("Image Files", "*.png;*.jpg;*.jpeg;*.gif"),))],[sg.Button('上传'), sg.Button('关闭')]]# 创建窗口window = sg.Window('文件处理',layout)while True:# 读取数据和事件event,value = window.read()if event in ('关闭',None) :breakif event == '上传':# 更新图片image_path = value['-FILE-']print(image_path)img = cv2.imread(image_path)if img is None:sg.popup_error(f"无法加载图像:{image_path}\n请确保文件路径正确且文件不是损坏的!")continue # 跳过后续代码,重新等待用户选择有效的图像img_type = cv2.imencode(".png", img)[1].tobytes()window['-IMAGE-'].update(img_type)window.close()if __name__ == '__main__':demo()
pymsql 库
PyMySQL
是一个用于连接 MySQL 数据库的纯 Python 实现。它允许 Python 程序与 MySQL 数据库进行交互,执行 SQL 查询,并处理结果集
安装
pip install pymysql
数据处理
import pymysql# 新增
def add(name,num):# 创建数据库连接con = pymysql.connect(host= 'localhost',# 数据库地址user = 'root',# 用户名passwd = 'shijianxu123',# 密码port= 3306,# 端口database= 'demo',# 数据库名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()#释放资源con.close()cur.close()# 查询
def query(num):# 创建数据库连接con = pymysql.connect(host= 'localhost',# 数据库地址user = 'root',# 用户名passwd = 'shijianxu123',# 密码port= 3306,# 端口database= 'demo',# 数据库名charset = 'utf8'# 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = 'select * from user_info where user_num = %s'# 运行sql(增删改查sql的函数)cur.execute(sql,(num,))# 查询rs = cur.fetchall()#释放资源con.close()cur.close()if len(rs) > 0:return rs[0][1]else:return'查无此人'def del_num(id):# 创建数据库连接con = pymysql.connect(host= 'localhost',# 数据库地址user = 'root',# 用户名passwd = 'shijianxu123',# 密码port= 3306,# 端口database= 'demo',# 数据库名charset = 'utf8'# 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = 'delete from user_info where user_num = %s'# 运行sql(增删改查sql的函数)cur.execute(sql,(id,))# 查询num = cur.rowcount#释放资源if num > 0:print('删除成功')else:print('删除失败')# 提交con.commit()# 释放资源con.close()cur.close()if __name__ == '__main__':# add('王五',1)# add('李四', 2)# rs = query(2)# print(rs) del_num(2)
人脸采集
1 准备工作:创建人脸表
2 完成人脸保存
import pymysql
import cv2
import PySimpleGUI as sg# 人脸入库新增
def add(name,num):# 创建数据库连接con = pymysql.connect(host= 'localhost',# 数据库地址user = 'root',# 用户名passwd = 'shijianxu123',# 密码port= 3306,# 端口database= 'demo',# 数据库名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()#释放资源con.close()cur.close()if num > 0:print('新增成功')return Trueelse:print('新增失败')return False# 数据采集窗口
def data_get():cap = cv2.VideoCapture(0)if not cap.isOpened():print('没有开启摄像头')return# 创建layoutlayout = [[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:img_type = cv2.imencode('.png', frame)[1].tobytes()window['video'].update(img_type)if event =='人脸采集':num = value['num']name = value['name']# 写入人脸图片iss = cv2.imwrite(f'E:/pych/pythonProject_study/image/{num}.png',frame)if iss:is_add = add(name,num)if is_add:sg.popup('人脸采集成功')else:sg.popup('人脸采集失败')cap.release()window.close()if __name__ == '__main__':data_get()
人脸识别
import pymysql
import cv2
import PySimpleGUI as sg
import face_recognition
import os
import numpy as np# 查询
def query(num):# 创建数据库连接con = pymysql.connect(host= 'localhost',# 数据库地址user = 'root',# 用户名passwd = 'shijianxu123',# 密码port= 3306,# 端口database= 'demo',# 数据库名charset = 'utf8'# 中文编码)# 创建游标对象,包含了增删改查的函数cur = con.cursor()# 定义sqlsql = 'select * from user_info where user_num = %s'# 运行sql(增删改查sql的函数)cur.execute(sql,(num,))# 查询rs = cur.fetchall()#释放资源con.close()cur.close()if len(rs) > 0:return rs[0][1]else:return'查无此人'# 数据采集窗口
def data_get():cap = cv2.VideoCapture(0)if not cap.isOpened():print('没有开启摄像头')return# 创建layoutlayout = [[sg.Image(key='video')],[sg.Button('关闭'),sg.Button('人脸识别')]]# 创建窗口window = sg.Window('人脸识别', layout)# 标记是否已经成功识别recognition_success = Falsewhile True:# 读取数据和事件event, value = window.read(timeout=10)# 读取视频ret, frame = cap.read()if event in ('关闭', None):breakif ret:img_type = cv2.imencode('.png', frame)[1].tobytes()window['video'].update(img_type)if event =='人脸识别':# 查找人脸库list_dir = os.listdir('E:/pych/pythonProject_study/image')if len(list_dir)>0:for i in list_dir:# 读取一个图片对象img = cv2.imread(f'E:/pych/pythonProject_study/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.5:a = query(i)sg.popup(f'用户{a}识别成功')recognition_success = True # 标记为已识别break # 一旦识别成功,退出循环if not recognition_success:sg.popup('识别失败')cap.release()window.close()if __name__ == '__main__':data_get()