人脸识别——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_original和image_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.Image 和 PIL.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() 函数是一个内置的高阶函数,它用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数在数据处理和筛选时非常有用࿰…...
 
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…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
 
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
 
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
 
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
 
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
