opencv保姆级讲解-guI和pymsql实现人脸识别打卡(6)

news2024/11/7 9:47:09

PySimpleGUI 库

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

安装

pip install pysimplegui

布局和窗口

import PySimpleGUI as sg

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

文本输入输出案例

import PySimpleGUI as sg

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

视频处理

import PySimpleGUI as sg
import cv2

def rendVideo():
    # 读取视频
    cap = cv2.VideoCapture(0)
    #界面布局
    layout =[
        [
            sg.Button("退出", size=(10, 1))
        ],
        [sg.Image(key='image')],
    ]
    #创建一个window对象
    #location 视频位置
    #size 视频大小
    window =sg.Window("视频播放",layout,location=(350,50),size=(800,500))
    # 开始人脸录入
    while  cap.isOpened():
        event, values = window.read(timeout=10)
        ret,frame = cap.read()
        if ret:
            #把数据帧对象转换成bytes数据类型,更新窗口对象window信息
            imgbyts = cv2.imencode('.png', frame)[1].tobytes()
            window['image'].update(data=imgbyts)
        #点击X和退出按钮,关闭窗口
        if event in (None,"退出"):
            break
    #关闭窗口
    window.close()
    cap.release()
if __name__ =="__main__":
    rendVideo()

图片上传

import PySimpleGUI as sg

def main():
    # 设置主题
    sg.theme('LightBlue')
    # 布局定义
    layout = [
        [sg.Text('请选择一张图片:')],
        [sg.Input(key='-FILE-', enable_events=True), sg.FileBrowse(file_types=(("Image Files", "*.png;*.jpg;*.jpeg;*.gif"),))],
        [sg.Button('退出')],
        [sg.Image(key='-IMAGE-')]
    ]
    # 创建窗口
    window = sg.Window('图片上传示例', layout)
    while True:
        event, values = window.read()
        # 处理事件
        if event in (sg.WINDOW_CLOSED, '退出'):
            break
        elif event == '-FILE-':
            # 更新图片
            image_path = values['-FILE-']
            print(image_path)
            if image_path:
                window['-IMAGE-'].update(filename=image_path)

    window.close()
if __name__ == '__main__':
    main()

pymsql 库

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

安装

pip install pymysql

数据添加

import pymysql

#添加人脸信息到数据库中
def add(name,num):
    # 创建数据库连接
    con = pymysql.Connect(host="localhost", user="root", passwd="1234", database="demo01", charset="utf8");
    # 创建游标
    cr = con.cursor();
    # 定义一个sql语句变量
    sql = "insert into user_info (user_name,num) values(%s,%s)";
    # 执行sql
    cr.execute(sql,(name,num))
    # 执行返回的插入数量
    num = cr.rowcount;
    if num > 0:
        print("插入成功");
    else:
        print("插入失败");
    # 提交操作
    con.commit();
    # 关闭连接
    con.close();

数据查询

import PySimpleGUI as sg
import cv2
import pymysql
import os
import face_recognition
import numpy as np
#查询人脸库
def query(id):
    # 创建数据库连接
    con = pymysql.Connect(host="localhost", user="root", passwd="1234", database="demo01", charset="utf8");
    # 创建游标
    cr = con.cursor();
    # 定义一个sql语句变量
    sql = "select * from user_info where num = %s ";
    # 执行sql
    cr.execute(sql,id)
    # 执行返回的插入数量
    num = cr.fetchall()
    print(num)
    if len(num) > 0:
        return num[0][1]
    else:
        return "无"
    # 提交操作
    con.commit();
    # 关闭连接
    con.close();

人脸采集

1 准备工作:创建人脸表

2 完成人脸保存

import PySimpleGUI as sg
import cv2
import pymysql

#添加人脸信息到数据库中
def add(name,num):
    # 创建数据库连接
    con = pymysql.Connect(host="localhost", user="root", passwd="1234", database="demo01", charset="utf8");
    # 创建游标
    cr = con.cursor();
    # 定义一个sql语句变量
    sql = "insert into user_info (user_name,num) values(%s,%s)";
    # 执行sql
    cr.execute(sql,(name,num))
    # 执行返回的插入数量
    num = cr.rowcount;
    if num > 0:
        print("插入成功");
    else:
        print("插入失败");

    # 提交操作
    con.commit();
    # 关闭连接
    con.close();


def rendVideo():
    # 读取视频
    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,50),size=(800,500))

    # 开始人脸录入
    while  cap.isOpened():
        event, values = window.read(timeout=10)
        ret,frame = cap.read()
        if ret:
            #把数据帧对象转换成bytes数据类型,更新窗口对象window信息
            imgbyts = cv2.imencode('.png', frame)[1].tobytes()
            window['image'].update(data=imgbyts)
        #点击X和退出按钮,关闭窗口
        if event in (None,"退出"):
            break
        if event in (None,"人脸采集"):
            # 获取编号
            id = values[0]
            name = values[1]
            print(id,name)
            # 保存人脸
            iss = cv2.imwrite(f"D:\\faceImages\\{id}.png", frame)
            if iss == True:
                add(name,id)
                print("收集人脸成功")
            else:
                print("收集人脸失败")
    #关闭窗口
    window.close()
    cap.release()
if __name__ =="__main__":
    rendVideo()

人脸识别

import PySimpleGUI as sg
import cv2
import pymysql
import os
import face_recognition
import numpy as np
#查询人脸库
def query(id):
    # 创建数据库连接
    con = pymysql.Connect(host="localhost", user="root", passwd="1234", database="demo01", charset="utf8");
    # 创建游标
    cr = con.cursor();
    # 定义一个sql语句变量
    sql = "select * from user_info where num = %s ";
    # 执行sql
    cr.execute(sql,id)
    # 执行查询
    num = cr.fetchall()
    print(num)
    if len(num) > 0:
        return num[0][1]
    else:
        return "无"
    # 提交操作
    con.commit();
    # 关闭连接
    con.close();


def rendVideo():
    # 读取视频
    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,50),size=(800,500))

    # 开始人脸录入
    while  cap.isOpened():
        event, values = window.read(timeout=10)
        ret,frame = cap.read()
        if ret:
            #把数据帧对象转换成bytes数据类型,更新窗口对象window信息
            imgbyts = cv2.imencode('.png', frame)[1].tobytes()
            window['image'].update(data=imgbyts)
        #点击X和退出按钮,关闭窗口
        if event in (None,"退出"):
            break
        if event in (None,"人脸识别"):
            path = os.listdir("D:\\faceImages")
            #print(path)
            for i in path:
                # 获取人脸特征
                img = cv2.imread(f"D:\\faceImages\\{i}")
                en1 = face_recognition.face_encodings(img)[0]
                en2 = face_recognition.face_encodings(frame)[0]
                iss = np.linalg.norm(en1 - en2)
                #print(iss)
                num = i.split(".")[0]
               # print(num)
                if iss < 0.5:
                    rs = query(num)
                    sg.popup(f"此人是{rs}")
                    break
                else:
                    sg.popup(f"查无此人")

    #关闭窗口
    window.close()
    cap.release()
if __name__ =="__main__":
    rendVideo()

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

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

相关文章

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能&#xff0c;今天继续进行开发&#xff0c;创作不易&#xff0c;请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

小新学习k8s第六天之pod详解

一、资源限制 Pod是k8s中的最小的资源管理组件&#xff0c;pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。k8s中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的StatefulSet和Deployment等…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现&#xff0c;建议在阅读本篇之前&#xff0c;先浏览一下前面的文章&#xff0c;以便更好地理解和掌握内容。 这种老派的假反射技术&#xff0c;适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…

【启程Golang之旅】深入理解 Protocol Buffers 及其应用

如果你是 Go 语言的开发者&#xff0c;理解如何在 Go 中使用 Protobuf&#xff0c;将帮助你大幅提升数据传输的效率&#xff0c;并实现更高性能的系统设计。 本篇文章将深入探讨 Go 语言中使用 Protobuf 的基础知识、常见应用以及最佳实践&#xff0c;带你一步步了解如何在项目…

最新发布:数智人才成长引擎

数字经济时代 数智人才缺口不断增大 根据公开发布的信息显示&#xff0c;中国&#xff0c;作为全球最大的数字经济体之一&#xff0c;当前数智人才&#xff08;涵盖了数智人才、数据分析师、AI专家、云计算工程师等关键岗位&#xff09;的总体缺口已攀升至惊人的2500万至3000…

ServletContext介绍

文章目录 1、ServletContext对象介绍1_方法介绍2_用例分析 2、ServletContainerInitializer1_整体结构2_工作原理3_使用案例 3、Spring案例源码分析1_注册DispatcherServlet2_注册配置类3_SpringServletContainerInitializer 4_总结 ServletContext 表示上下文对象&#xff0c;…

Linux的硬盘管理

硬盘有价&#xff0c;数据无价 1. 硬盘的概念 硬盘是一种计算机的存储设备&#xff0c;通常是由一个或者多个磁性盘片组成。硬盘即可以安装在计算机的内部&#xff0c;也可以外接计算机。 保存数据 数据&#xff1a;操作系统&#xff0c;应用程序&#xff0c;文档多媒体文件…

云渲染与汽车CGI图像技术优势和劣势

在数字时代&#xff0c;云渲染技术以其独特的优势在汽车CGI图像制作中占据了重要地位。云渲染通过利用云计算的分布式处理能力&#xff0c;将渲染任务分配给云端的服务器集群进行计算&#xff0c;从而实现高效、高质量的渲染效果。 这种技术的优势主要体现在以下几个方面&#…

鸿蒙NEXT开发-学生管理系统小案例(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

《潜行者2切尔诺贝利之心》游戏引擎介绍

潜行者2切尔诺贝利之心是基于虚幻5引擎&#xff0c;所以画面效果大家不必担心。游戏目前已经跳票了很久&#xff0c;预计发售时间是2024 年 11 月 21 日&#xff0c;这次应该不会再跳票。 潜行者2切尔诺贝利之心是虚幻5吗 答&#xff1a;是虚幻5。 潜行者官方推特之前回复了…

WPF+MVVM案例实战(十八)- 自定义字体图标按钮的封装与实现(ABD类)

文章目录 1、案例效果1、按钮分类2、ABD类按钮实现描述1.文件创建与代码实现2、样式引用与控件封装3、按钮案例演示1、页面实现与文件创建2、运行效果如下3、总结4、源代码获取1、案例效果 1、按钮分类 在WPF开发中,最常见的就是按钮的使用,这里我们总结以下大概的按钮种类,…

在Vue和OpenLayers中使用移动传感器实现飞机航线飞行模拟

项目实现的核心代码 项目概述 该项目的目标是使用Vue.js作为前端框架&#xff0c;结合OpenLayers用于地图显示&#xff0c;实时获取来自手机传感器的数据&#xff08;如经纬度、高度、速度&#xff09;来模拟飞机在地图上的飞行轨迹。整体架构如下&#xff1a; Vue.js 用于构建…

C语言-详细讲解-洛谷P1075 [NOIP2012 普及组] 质因数分解

1.题目要求 2.题目解析 解题点在于如何分解质因数&#xff0c;这里介绍一下短除法。&#xff08;虽然解决这个问题可以不用短除法&#xff09; 3.代码实现 贴一下自己的代码 #include <stdio.h> #include <math.h>int main() {int n, i;scanf("%d",…

基于springboot的音乐网站的设计与实现(源码+lw+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…

Golang | Leetcode Golang题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; type point struct{x, y int }var dirs []point{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func updateMatrix(mat [][]int) [][]int {var m, n len(mat), len(mat[0])var res make([][]int, m)var visited make([][]bool, m)var queue []poin…

前端介绍|基础入门-html+css+js

文章目录 本课程有什么&#xff1f;前端是什么&#xff1f;1. **前端概述**2. **前端的工作职责**3. **前端技术栈**6. **前端开发工具**7. **HTML、CSS、JS的关系** 本课程有什么&#xff1f; 本套课程是零基础入门保姆级课程&#xff0c;课程主要内容包含&#xff1a; HTML…

自动驾驶---“火热的”时空联合规划

1 背景 早期的不少规划算法都是横纵分离的&#xff08;比如Apollo&#xff09;&#xff0c;先求解path之后&#xff0c;依赖path的结果再进行speed的求解。这种横纵解耦的规划方式具有以下特点&#xff1a; 相对较为简单&#xff0c;计算量通常较小&#xff0c;容易实现实时性…