人脸识别——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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展,消费者对电动汽车(EV)的需求正在不断增长,电动汽车已经成为了未来出行方式的重要组成部分。然而,电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 (一)存储卷定义 (二)存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 (三)存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …

ArcGIS中几个好用的空间分析工具

ArcGIS是一款经典的GIS应用,其空间分析能力很强,有着丰富的空间分析工具。今天,我们一起来了解几个好用的空间分析工具的功用及操作。 注:演示版本为ArcMap10.4.1 1.方向分布(标准差椭圆) 路径&#xff…

四川汇聚荣聚荣科技有限公司综合实力怎么样?

在科技日新月异的今天,企业的综合实力成为衡量其市场竞争力的重要指标。四川汇聚荣聚荣科技有限公司作为一家在行业内具有一定影响力的企业,其综合实力如何,自然成为外界关注的焦点。以下将从多个维度深入分析该公司的实力。 一、公司概况与核…

Java利用POI绘制表格

前提需求 最近公司要求写一些记录的表格,并且带有导出功能。再深入学习后,表格的底层其实就是list遍历塞值,导出功能的话可以由前端,后端实现,但技多不压身嘛,这里我自己就写了后端的导出功能,…

【小白专用 已验证24.5.30】ThinkPHP6 视图

ThinkPHP6 视图 模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的 标签类型描述普通标签主要用于输出变量、函数过滤和做一些基本的运算操作XML标签也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展 c…

双指针法 ( 三数之和 )

题目 :给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

计算机网络学习笔记——网络层(b站)

目录 网络层概述 网络层提供的两种服务 ①面向连接的虚电路服务 ②无连接的数据报服务 IPv4 路由选择 路由器转发IP数据报 静态路由选择 动态路由选择 路由信息协议RIP 开放最短路径优先OSPF(Open Shortest Path First) 内部网关协议IGP&…

Linux网络编程:回顾网络通信

1.数据从应用层到数据链路层的本质 数据的封装: 用户在用户级缓冲区输入数据,经过应用层协议进行序列化成字节流数据,拷贝到传输层的缓冲区。而操作系统在传输层维护了sk_buff这一个结构体,然后data指针指向这段数据的开头&#x…

【C++面试50题】

以下是针对C程序员面试可能遇到的一些问题,涵盖了从基础语法、面向对象、STL、内存管理、模板、异常处理、并发编程等多个方面。 ### 基础概念与语法 1. C与C的主要区别是什么? 2. 什么是构造函数和析构函数?它们何时被调用? 3. 什…

xml 取值错误 #{} boolean 一直为 false

取值时 #{param.msgStatus} 一直是false&#xff0c;java代码里面显示true。 <select id"findPageOaReading" resultType"com.focusin.data.office.func.dto.ProcessMessageInfoDTO">select i.*, t.template_name procdefNamefrom process_message_…

常见的Web漏洞——CORS

渗透做了多年的朋友都知道&#xff0c;大洞小洞都是漏洞。因此也学习、沉淀一下以前没重视的漏洞。 简介 CORS&#xff08;Cross-Origin Resource Sharing&#xff0c;跨源资源共享&#xff09;是一种由Web浏览器实现的安全策略&#xff0c;用于控制一个Web页面&#xff08;服…

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…

机器学习18个核心算法模型

1. 线性回归&#xff08;Linear Regression&#xff09; 用于建立自变量&#xff08;特征&#xff09;和因变量&#xff08;目标&#xff09;之间的线性关系。 核心公式&#xff1a; 简单线性回归的公式为&#xff1a; , 其中 是预测值&#xff0c; 是截距&#xff0c; 是斜…

leetcode第867题:转置矩阵

matrix[i][j]需要放在转置矩阵的(j,i)位置 public class Solution {public int[][] Transpose(int[][] matrix) {int rows matrix.Length; int columns matrix[0].Length; int[][] array2 new int[columns][];// 初始化内部数组&#xff08;列数&#xff09;for (int i 0…

MySQL数据库常见工具的基础使用_1

在上一篇文章中提到了对MySQL数据库进行操作的一些常见工具 mysqlcheck mysqlcheck是一个用于数据库表的检查&#xff0c;修复&#xff0c;分析和优化的一个客户端程序 分析的作用是查看表的关键字分布,能够让sql生成正确的执行计划(支持InnoDB,MyISAM,NDB)检查的作用是检查…

Linux系统编程(七)网络编程TCP、UDP

本文目录 一、基础知识点1. IP地址2. 端口3. 域名4. 网络协议类型5. IP协议类型6. 字节序7. socket套接字 二、TCP 常用API1. socket套接字描述符2. bind套接字绑定3. listen设置最大排队数4. accept接收客户端请求5. connect连接服务端6. read读取数据7. write发送数据 三、UD…

240.搜索二维矩阵

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

【AI大模型】基于Langchain和Openai借口实现英文翻译中文应用

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

CSPM.pdf

PDF转图片 归档&#xff1a;