当前位置: 首页 > news >正文

人脸识别——OpenCV

人脸识别

    • 创建窗口
    • 创建按钮
    • 设置字体
    • 定义标签用于显示图片
    • 选择并显示图片
    • 检测图片中的人脸
    • 退出程序
    • 返回主界面

创建窗口

导入tkinter库,创建窗口,设置窗口标题和窗口大小。

import tkinter as tkwin = tk.Tk()
win.title("人脸识别")
win.geometry("1000x800")win.mainloop()

创建按钮

创建选择图片和识别人脸,退出系统,返回系统的按钮

button_select = tk.Button(win, text="选择图片",fg='red')
button_select.place(x=333,y=12)button_detect = tk.Button(win, text="识别人脸", fg='red')
button_detect.place(x=666,y=12)esc = tk.Button(win,text='退出系统',fg='red')
esc.place(x=10,y=10)t = tk.Button(win,text='返回系统',fg='red')
t.place(x=900,y=10)

设置字体

“Times New Roman”:这是字体名称。20:这是字体大小。

my_font = ("Times New Roman", 20)

并添加在按钮中
在这里插入图片描述
代码位置:
在这里插入图片描述

定义标签用于显示图片

两个标签控件用于显示图片,并将它们放置在窗口中。image_label_originalimage_label_detected,分别用于显示原始图像和检测到人脸的图像。将这两个标签放置在窗口的左侧,并设置内边距。

image_label_original = tk.Label(win)
image_label_original.pack(side=tk.LEFT, padx=10, pady=80)image_label_detected = tk.Label(win)
image_label_detected.pack(side=tk.LEFT, padx=10, pady=80)

代码位置:
在这里插入图片描述
在这里插入图片描述

选择并显示图片

定义全局变量用于存储用户选择的图片路径

selected_image_path = None

导入所需要的包
filedialog: 这是tkinter的一个扩展模块,它提供了一个对话框,允许用户选择文件或目录。在您的程序中,它用于打开一个文件选择对话框,让用户可以选择一张图片。
cv2: 这是OpenCV库的Python接口。OpenCV是一个强大的计算机视觉库,支持各种图像和视频处理功能。在您的程序中,它用于加载和处理图像,以及进行人脸检测。
PIL.ImagePIL.ImageTk: 这些是Python Imaging Library (PIL)的一部分,现在被称为Pillow。PIL是一个用于处理图像的库,而PIL.ImageTk是一个将PIL图像转换为tkinter兼容的PhotoImage对象的模块。在您的程序中,它们用于将OpenCV的图像转换为可以在tkinter中显示的格式。

from tkinter import filedialog
import cv2
from PIL import Image, ImageTk

定义一个函数来打开文件选择对话框,加载用户选择的图片,并将其显示在标签上。

def select_image():global selected_image_path# filedialog.askopenfilename() 打开一个文件选择对话框,允许用户选择一个图片文件。selected_image_path = filedialog.askopenfilename()# 使用OpenCV的 imread 函数加载用户选择的图片。img = cv2.imread(selected_image_path)#将OpenCV加载的BGR格式图片转换为RGB格式,因为PIL和Tkinter只支持RGB格式。img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#使用PIL的 fromarray 函数将RGB格式的图片转换为PIL图像img_pil = Image.fromarray(img_rgb)#使用Tkinter的 PhotoImage 函数将PIL图像转换为Tkinter可以识别的格式。img_tk = ImageTk.PhotoImage(image=img_pil)# 显示原始图片# config 方法用于修改控件的配置image_label_original.config(image=img_tk)#将Tkinter的 PhotoImage 对象绑定到标签上。image_label_original.image = img_tk

在选择图片的按钮上调用此函数
在这里插入图片描述
代码位置:在这里插入图片描述
在这里插入图片描述

检测图片中的人脸

导入所需要的库:
messagebox: 这是tkinter的一个模块,用于显示消息框。消息框可以用于显示信息、警告或错误提示。在您的程序中,它用于在未检测到人脸时显示提示信息。

from tkinter import messagebox

定义一个函数来检测图片中的人脸,如果检测到人脸,就在人脸周围画矩形框,并显示检测结果。

def detect_faces():global selected_image_path
#检查是否已经被赋值。如果已经选择了图片,这个变量将包含图片的路径。if selected_image_path:# 使用OpenCV的imread函数加载用户选择的图片img = cv2.imread(selected_image_path)
#cvtColor函数将加载的图片从BGR颜色空间转换为灰度颜色空间gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#haarcascade_frontalface_default.xml是OpenCV提供的一个预训练的人脸检测模型,用于检测图像中的人脸。face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')#人脸检测模型在灰度图像上检测人脸。detectMultiScale函数返回一个包含检测到的脸部位置的矩形列表。faces = face_cascade.detectMultiScale(gray, 1.1, 4)# 判断是否检测到人脸if len(faces) > 0:# 在人脸周围画矩形框for (x, y, w, h) in faces:#原始图像上画一个矩形框,表示检测到的人脸位置。矩形的坐标是(x, y),宽度和高度分别是w和h,矩形的颜色是蓝色(RGB值255, 0, 0),线宽为2。cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)# 转换为PIL格式并显示
#检测到人脸后的图像从BGR颜色空间转换为RGB颜色空间。因为Tkinter和PIL库不支持BGR颜色空间。img_rgb_detected = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#将转换后的图像从NumPy数组转换为PIL图像对象。img_pil_detected = Image.fromarray(img_rgb_detected)
#将PIL图像对象转换为Tkinter可以显示的格式。img_tk_detected = ImageTk.PhotoImage(image=img_pil_detected)
#显示转换后的图像。image_label_detected.config(image=img_tk_detected)
#将Tkinter的PhotoImage对象绑定到标签上,以保持图片的引用。这样,即使图片被更新,标签仍然会显示最新的图片。image_label_detected.image = img_tk_detected  # keep a referenceelse:# 提示未检测到人脸messagebox.showinfo("提示", "未检测到人脸")else:messagebox.showinfo("提示", "请先选择一张图片")

在识别人脸的按钮上调用此函数
在这里插入图片描述
在这里插入图片描述

退出程序

def Esc():win.destroy()

在退出系统的按钮上调用此函数
在这里插入图片描述
代码位置:在这里插入图片描述

返回主界面

导入所需要的库:
subprocess: 这个模块允许你创建新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回值。在您的程序中,它用于启动一个新的Python进程来运行另一个脚本main.py。

import subprocessdef one():subprocess.Popen(["python", "main.py"])win.destroy()

在返回系统的按钮上调用此函数
在这里插入图片描述
代码位置:
在这里插入图片描述

相关文章:

人脸识别——OpenCV

人脸识别 创建窗口创建按钮设置字体定义标签用于显示图片选择并显示图片检测图片中的人脸退出程序返回主界面 创建窗口 导入tkinter库,创建窗口,设置窗口标题和窗口大小。 import tkinter as tkwin tk.Tk() win.title("人脸识别") win.geom…...

深入探索容器:什么是容器及其在现代软件开发中的作用

深入探索容器:什么是容器及其在现代软件开发中的作用 引言 在今天的软件开发和运维领域,容器技术已经成为了一个不可或缺的工具。从初创企业到大型企业,从Web应用到微服务架构,容器都在发挥着其独特的作用。那么,什么…...

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC ? NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller 。它 是内核的器件,所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中…...

【介绍下WebStorm开发插件】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...

推荐丨一键申请SSL证书,让网站实现HTTPS访问!

申请HTTPS证书可以简化为以下几个直接步骤,以便您能快速理解和操作: 1. 确定证书类型: - 单域名证书:适用于一个特定域名。 - 通配符证书:适用于同一主域名下的所有子域名。 - 多域名证书:覆盖多个不同的域…...

交叉导轨在医疗设备上的作用!

随着医疗器械行业的需求逐步增长,交叉导轨给医疗器械行业带来了广阔的发展前景。作为重要的精密传动元件,交叉导轨具有寿命长、高精度、高刚性、高耐腐蚀性和高稳定性等优点,满足精密仪器上对产品的高要求使用场景。 在医疗设备领域中交叉导轨…...

【云原生】Docker Compose 使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 搭建 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版/如果不是最新可替换最新版本 3.2.2 设置权限 3.2.…...

通过LabVIEW提升生产设备自动化水平

现代制造业对生产设备的自动化水平提出了越来越高的要求。使用LabVIEW这一强大的图形化编程环境,可以显著提升生产设备的自动化程度,改善生产效率和产品质量。本文将详细分析如何通过LabVIEW改善生产设备的自动化水平,并提供具体的实施策略与…...

面试题vue+uniapp(个人理解-面试口头答述)未编辑完整....

1.vue2和vue3的区别(vue3与vue2的区别(你不知道细节全在这)_vue2和vue3区别-CSDN博客)参考 Vue3 在组合式(Composition )API,中使用生命周期钩子时需要先引入,而 Vue2 在选项API&am…...

PPP-B2b精密产品使用注意事项及分析

1、因为在使用PPP-B2b进行定轨的时候,发的精密轨道产品是B3频点的,需要改正的卫星质心(Com)与SP3精密星历对比。 2、PPP-B2b产品吸收了电离层误差,因此电离层提取方面与IGS电离层完全无法对其。 3、由于PPP-B2b产品精…...

C语言(结构体)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…...

Python filter()用法:深入解析与实战应用

Python filter()用法:深入解析与实战应用 在Python编程中,filter() 函数是一个内置的高阶函数,它用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数在数据处理和筛选时非常有用&#xff0…...

k8s集群的存储卷、pvc和pv

目录 简介 简介 PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,这个通常都是由运维工程师来定义。 PVC 的全称是 Persistent Volume Claim,是持久化存储的请求。它是用来描述希望使用什么样的或者说…...

二分搜索树深度优先遍历

二分搜索树深度优先遍历 二分搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,它具有以下特性:对于树中的任意节点,其左子树中的所有元素都小于该节点的值,其右子树中的所有元素都大于该…...

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘‘

参考自: [Bug]: ImportError: cannot import name packaging from pkg_resources (/usr/local/lib/python3.10/dist-packages/pkg_resources/__init__.py) Issue #15863 AUTOMATIC1111/stable-diffusion-webui GitHub ImportError: cannot import name packaging from pkg…...

灯塔歌曲音乐下载官网

灯塔歌曲音乐下载官网网址:www.dengtamp3.com 灯塔音乐下载上线以“用心服务,认真负责”为核心价值。 我们的团队是一个青春的团队,朝气蓬勃。我们采用最新的服务模式,以网为媒为广大客户提供服务,我们坚持以“用心&a…...

数据结构的归并排序(c语言版)

一.归并排序的基本概念 1.基本概念 归并排序是一种高效的排序算法,它采用了分治的思想。它的基本过程如下: 将待排序的数组分割成两个子数组,直到子数组只有一个元素为止。然后将这些子数组两两归并,得到有序的子数组。不断重复第二步,直到最终得到有序的整个数组。 2.核心…...

ubuntu使用Docker笔记

一、参考资料 1、B站视频 尚硅谷Docker实战教程 2、有心人整理的笔记 Docker笔记(周阳版) 3、菜鸟教程 Docker 教程 以下是本人的折腾实践。 二、Docker的安装 2.1、使用清华源安装docker,清华源官方教程。 本人是在ubuntu20.04下安装的…...

PHP编程入门:揭开Web开发的神秘面纱

PHP编程入门:揭开Web开发的神秘面纱 在数字化时代,PHP作为一种广泛使用的服务器端脚本语言,为Web开发领域注入了强大的活力。无论你是编程新手还是有一定经验的开发者,掌握PHP编程都将为你开启一扇通往Web开发新世界的大门。接下…...

曲线拟合工具软件(免费)

曲线拟合是数据处理中经常用到的数值方法,本质是使用某一个模型(方程或者方程组)将一系列离散的数据拟合成平滑的曲线或者曲面,数值求解出对应的函数参数,大家可以利用MATLAB的曲线拟合工具箱也可以使用第三方的拟合软件,今天我们介绍Welsim免费的曲线拟合软件 1、MATLA…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

Redis专题-实战篇一-基于Session和Redis实现登录业务

GitHub项目地址&#xff1a;https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码&#xff1a;e34399f 基于Redis实现登录业务提交版本码&#xff1a;60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...