OpenCV基础05_GUI和PyMsql

news2024/11/13 17:58:01

目录

一、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 sg


def rendvideo():
    # 开启摄像头
    cap = cv2.VideoCapture('../video/1.mp4')
    if cap.isOpened() == False:
        print('没有开启摄像头')
        return
    # 创建layout
    layout = [
        [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, '关闭'):
            break
        if 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 sg


def rendpicture():
    # 设置主题
    sg.theme('LightBlue')
    # 创建layout
    layout = [
        [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, '关闭'):
            break
        if 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()
    # 定义sql
    sql = "insert into user_info (user_name,user_num) value (%s,%s)"
    # 运行sql(增删改查sql的函数)
    cur.execute(sql, (name, num))
    # 执行增删改sql的函数,返回一个受影响行数的数值
    num = cur.rowcount
    if 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()
    # 定义sql
    sql = "update user_info set user_name=%s where user_id=%s"
    # 运行sql(增删改查sql的函数)
    cur.execute(sql, (name, id))
    # 执行增删改sql的函数,返回一个受影响行数的数值
    num = cur.rowcount
    if 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()
    # 定义sql
    sql = "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()
    # 定义sql
    sql = "delete from user_info where user_id=%s"
    # 运行sql(增删改查sql的函数)
    cur.execute(sql, (id,))
    # 执行增删改sql的函数,返回一个受影响行数的数值
    num = cur.rowcount
    if 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()
    # 定义sql
    sql = "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 True
    else:
        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, '关闭'):
            break
        if 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()
    # 定义sql
    sql = "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, '关闭'):
            break
        if 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('没有读取到图片')
                        break
                    else:
                        # 获取已知图片的特征变量
                        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}')
                            break
                        else:
                            sg.popup('人脸库没有此人')

    # 释放资源
    cap.release()
    window.close()


if __name__ == '__main__':
    rendVideo()

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

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

相关文章

ModuleNotFoundError: No module named ‘_ssl‘ centos7中的Python报错

报错 ModuleNotFoundError: No module named ‘_ssl’ 解决步骤&#xff1a; 1.下载openssl wget https://www.openssl.org/source/openssl-3.0.7.tar.gz tar -zxvf openssl-3.0.7.tar.gz cd openssl-3.0.72.编译安装 ./config --prefix/usr/local/openssl make make install3…

外呼系统只需这 3 种功能,电销效率快速提升

在当今竞争激烈的商业环境中&#xff0c;电销团队面临着诸多挑战。如何提高电销效率&#xff0c;成为了企业关注的焦点。今天&#xff0c;小编就给大家介绍&#xff0c;沃创云三种外呼系统功能&#xff0c;让你的电销效率快速提升。 一、智能拨号功能 传统的电销方式中&#x…

18. Mouse 鼠标、KeyBoard 键盘和 Action 消息事件处理

在本节的例子中&#xff0c;会自定义很多UI控件实现不同的事件响应&#xff0c;如下图所示&#xff1a; IOKit 事件框架 事件流程 OS X的事件依赖 IOKit 框架&#xff0c;事件发生后首先会传递到IOKit框架中处理&#xff0c;然后通知Window Server服务层处理&#xff0c;由…

C# 实现对指定句柄的窗口进行键盘输入的实现

在C#中实现对指定句柄的窗口进行键盘操作&#xff0c;可以通过多种方式来实现。以下是一篇详细的指南&#xff0c;介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中&#xff0c;我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…

Word大珩助手:超大数字怎么读?35位数字?69位数字?

俄罗斯日前对谷歌开出了20000000000000000000000000000000000&#xff08;35位数字&#xff09;美元的罚款 这一数字远超全球GDP总和&#xff0c;消息一出很快就登上热搜。 面对这样一个庞大的数字&#xff0c;人们不禁好奇&#xff0c;这样的数字该如何读出来&#xff1f; …

asp.net文件防盗链

URLRewriter实现 可以参考下面的文章 代码 .net framework 新建asp.net framework的web项目&#xff0c;新建AntiTheftChainHandler using System.Web;namespace AntiTheftChainStu01.Handler {public class AntiTheftChainHandler : IHttpHandler{public bool IsReusable…

【含开题报告+文档+PPT+源码】基于SSM的蛋糕店销售管理系统的设计与实现

开题报告 在现代社会&#xff0c;蛋糕作为一种受欢迎的甜点&#xff0c;广泛应用于各种庆祝活动和节日。传统的蛋糕预订方式往往需要用户亲自到店面进行预订&#xff0c;预订流程繁琐&#xff0c;时间和地点限制也给用户带来了不便。随着智能手机和移动互联网的普及&#xff0…

政治经济学笔记

【拯救者】政治经济学速成&#xff08;基础习题&#xff09; 研究生产关系必须联系生产力和上层建筑 1.生产力与生产关系 生产力代表生产的物质内容&#xff0c;生产关系是生产的社会形式。生产力决定生产关系&#xff0c;生产关系对生产力具有 反作用 *其中的”反作用”指的是…

005.精读《B-Tree vs LSM-Tree》

文章目录 1. 引言&#xff1a;2. 精读2.1 性能指标2.2 B-tree2.3 LSM-tree2.4 性能对比 3. 写在最后 1. 引言&#xff1a; 在本期的技术深度解析中&#xff0c;我们将聚焦于数据领域的两个重要成员——B-Tree和LSM-Tree。这两种数据结构在数据管理系统中最为普遍且广泛采用的数…

关于 el-table 的合计行问题

目录 一.自定义合计行 二.合计行不展示&#xff0c;只有缩放/变大窗口或者F12弹出后台时才展示 三.合计行出现了表格滚动条下方 四.合计行整体样式的修改 五.合计行单元格样式修改 1.css 2.jsx方式 六.合计行单元格合并 一.自定义合计行 通过 show-summary 属性开启合计…

C++ | Leetcode C++题解之第554题砖墙

题目&#xff1a; 题解&#xff1a; class Solution { public:int leastBricks(vector<vector<int>>& wall) {unordered_map<int, int> cnt;for (auto& widths : wall) {int n widths.size();int sum 0;for (int i 0; i < n - 1; i) {sum wi…

如何使用 C# 编写一个修改文件时间属性的小工具?

下面是简鹿办公一个用 C# 编写的简单工具&#xff0c;它可以批量修改文件的创建时间、最后访问时间和最后修改时间。我们将使用 .NET Framework 或 .NET Core 来实现这个功能。 完整示例代码 1. 创建一个新的 C# 控制台应用程序 您可以使用 Visual Studio 或 .NET CLI 创建一个…

使用FTP与多个合作伙伴传文件,如何处理运维管理和数据安全问题

许多行业的企业使用FTP与外部客户、供应商等合作伙伴进行文件交换&#xff0c;如大型保险公司、研究所、IC设计企业、汽车制造厂商等。基于FTP可以满足企业与外部合作伙伴文件收发的基础需求&#xff0c;但在IT运维管理、数据安全保障及业务便利性上仍存在不同程度的缺陷和不足…

Simulink中Matlab function使用全局变量

目录 一. 引言二. 普通Matlab function使用全局变量三. Simulink中的Matlab function使用全局变量四. 如何利用Matlab function的全局变量施加随机噪声 一. 引言 最近发现了之前仿真中的一个问题&#xff0c;记录一下备忘。 Matlab function中有时候需要用到全局变量&#xf…

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型&#xff1a; 其中xx为输入量&#xff0c;y^​预测量&#xff0c;σ()激活函数。   逻辑回归主要用于二分类问题的拟合&#xff1a;0≤y^P(y1∣x)≤1&#xff0c;σ(z)如图&#xff1a; ​ 问题&#xff…

华为OD机试 - 最低位排序 - 数组(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

C语言:文件操作2(又一万字?)

关于文件操作这章内容&#xff0c;因为知道内容较多所以我分两篇发了&#xff0c;但是还是没料到第二篇还是这么多&#xff0c;达到了一万多字&#xff01;&#xff01;&#xff01;作者本人真的将知识点进行了超级详解分析并且举了很多例子来帮助读者理解&#xff0c;本文章较…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type&#xff1a;队列类型1.2、Name&#xff1a;队列名称1.3、Durability&#xff1a;声明队列是否持久化1.4、Auto delete&#xff1a; 是否自动删除1.5、Exclusive&#xff1a;1.6、Arguments&#xff1a;队列的其他属性&#xf…