OpenCv之简单的人脸识别项目(登录页面)

人脸识别

  • 一、项目准备
  • 二、登录页面
    • 1.导入所需的包
    • 2.设置窗口
      • 2.1定义窗口外观和大小
      • 2.2设置窗口背景
        • 2.2.1设置背景图片
        • 2.2.2创建label控件
    • 3.运行脚本
      • 3.1定义识别脚本
      • 3.2定义提取脚本
      • 3.3定义标注脚本
      • 3.4定义人脸比对脚本
      • 3.5定义动态处理脚本
      • 3.6定义属性判断脚本
    • 4.创建一个退出对话框
    • 5.按钮设计
      • 5.1人脸识别按钮
      • 5.2人脸提取按钮
      • 5.3特征标注按钮
      • 5.4动态处理按钮
      • 5.5人脸对比按钮
      • 5.6属性判断按钮
      • 5.7退出按钮
    • 6.定义关键函数
  • 完整代码

一、项目准备

提前导入用于人脸识别的haarcascade_frontalface_default.xml数据集、age_net.caffemodel、deploy_age.prototxt、deploy_gender.prototxt、gender_net.caffemodel、model.h5等文件以及用到的相关图片。此项目将实现人脸识别、人脸提取、人脸比对、特征标注、动态处理、属性判断等功能,先做出一个登录页面方便之后连接各个功能的分页面。

二、登录页面

1.导入所需的包

tkinter:这是Python的标准GUI(图形用户界面)库。它用于创建窗口、按钮、文本框、标签等图形界面元素。tkinter非常易于使用,并且可以跨平台运行。

messagebox:这是tkinter的一个模块,用于显示消息框。消息框可以用于显示信息、警告、错误消息或询问用户问题。在您的代码中,messagebox.showinfo函数用于显示一个人脸识别的结果信息。

subprocess:这个模块允许你启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回值。在您的代码中,它可能用于调用外部的人脸识别程序或脚本。

PIL/Pillow:PIL(Python Imaging Library)是一个用于处理图像的库。由于PIL已经不再维护,通常使用它的一个友好的分叉版本Pillow。Pillow提供了广泛的文件格式支持、图像处理功能,如缩放、裁剪、颜色转换等。在您的代码中,它用于处理和显示用户选择的图像。

ImageTk:这是Pillow库的一个模块,它提供了用于Tkinter的图像处理类。ImageTk.PhotoImage类用于将Pillow的图像对象转换为可以在Tkinter中显示的图像。

import tkinter as tk
from tkinter import messagebox
import subprocess
from PIL import ImageTk, Image

2.设置窗口

2.1定义窗口外观和大小

实例化窗口,设置窗口标题,尺寸。

#设置窗口
win=tk.Tk()
win.title('人脸识别系统')
win.geometry('600x650')

2.2设置窗口背景

2.2.1设置背景图片

调用image对象的resize方法来调整图像的大小。将调整大小后的PIL Image对象转换为Tkinter兼容的PhotoImage对象。

#设置背景图
image = Image.open("1.gif")
image = image.resize((600, 650))  # 调整背景图片大小
photo1 = ImageTk.PhotoImage(image)
2.2.2创建label控件

Label控件可以用来显示文本、图像或其他内容。在这里,它被用来显示前面创建的PhotoImage对象,即背景图片。

# 创建Label并将背景图片设置为背景
canvas = tk.Label(win, image=photo1)
canvas.pack()

3.运行脚本

3.1定义识别脚本

定义一个名为 S 的函数,在Python中运行另一个名为 “识别.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

# 定义识别
def S():script_path = "识别.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

3.2定义提取脚本

定义一个名为 T的函数,在Python中运行另一个名为 “提取.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

# 定义提取
def T():script_path = "提取.py"try:# 运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

3.3定义标注脚本

定义一个名为 B的函数,在Python中运行另一个名为 “标注.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

#定义标注
def B():script_path = "标注.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

3.4定义人脸比对脚本

定义一个名为R的函数,在Python中运行另一个名为 “人脸比对.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

# 定义对比
def R():script_path = "人脸比对.py"try:# 运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

3.5定义动态处理脚本

定义一个名为D的函数,在Python中运行另一个名为 “动态处理.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

#定义动态处理
def D():script_path = "动态处理.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

3.6定义属性判断脚本

定义一个名为SXPD的函数,在Python中运行另一个名为 “属性判断.py” 的脚本,并在成功执行后关闭当前的Tkinter窗口 win。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

# 定义属性判断
def SXPD():script_path = "属性判断.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")

4.创建一个退出对话框

定义一个名为 close 的函数,该函数用于在Tkinter图形用户界面中创建一个确认退出对话框。当用户点击“确定”时,窗口 win 将被关闭;如果用户点击“取消”,则不会发生任何操作。

# 定义退出
def close():if messagebox.askokcancel("退出", "确定要退出吗?"):win.destroy()

5.按钮设计

5.1人脸识别按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 S 函数。

# 人脸识别按钮
image = Image.open("2.gif")  # 加载一张图片
photo2 = ImageTk.PhotoImage(image)
bt1 = tk.Button(win, image=photo2, width=198, height=35, command=S)
bt1.place(x=75, y=140)

5.2人脸提取按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 T函数。

#  人脸提取按钮
image = Image.open("3.gif")  # 加载一张图片
photo3 = ImageTk.PhotoImage(image)
bt2 = tk.Button(win,image=photo3,width=198,height=35,command=T)
bt2.place(x=310,y=90)

5.3特征标注按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 B函数。

# 特征标注按钮
image = Image.open("4.gif")  # 加载一张图片
photo4 = ImageTk.PhotoImage(image)
bt3 = tk.Button(win,image=photo4,width=198,height=35,command=B)
bt3.place(x=310,y=185)

5.4动态处理按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 D函数。

# 动态处理按钮
image = Image.open("5.gif")  # 加载一张图片
photo5 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo5,width=198,height=33,command=D)
bt4.place(x=75,y=350)

5.5人脸对比按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 R函数。

# 人脸对比按钮
image = Image.open("F4.gif")  # 加载一张图片
photo6 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo6,width=198,height=33,command=R)
bt4.place(x=75,y=245)

5.6属性判断按钮

设计一个按钮,用于在Tkinter图形用户界面中触发人脸识别功能。当用户点击这个按钮时,会调用之前定义的 SXPD函数。

# 属性判断按钮
image = Image.open("F18.gif")  # 加载一张图片
photo7 = ImageTk.PhotoImage(image)
bt = tk.Button(win, image=photo7,  text="退出",width=198,height=32,command=SXPD)
bt.place(x=310,y=300)

5.7退出按钮

创建一个按钮(bt),这个按钮在界面上显示之前导入的6.gif图像和一个文本标签“退出”,并且当用户点击这个按钮时,会执行一个名为close的函数。

# 退出按钮
image = Image.open("6.gif")  # 加载一张图片
photo8 = ImageTk.PhotoImage(image)
bt = tk.Button(win, image=photo8,  text="退出",width=170,height=110,command=close)
bt.place(x=380,y=400)

用法:close函数通常这个函数用来关闭应用程序窗口。

6.定义关键函数

win.mainloop() 是 Tkinter GUI 应用程序中的一个关键函数,它启动了 Tkinter 的事件循环。
这个事件循环是 GUI 应用程序的核心,它负责处理用户输入(如鼠标点击、按键等),更新窗口内容,以及响应用户的操作。

win.mainloop()

注:当你调用 win.mainloop() 时,以下几件事情会发生:
1.窗口 win 会显示在屏幕上。
2.应用程序会开始监听和响应事件,如按钮点击、输入框文字变化等。
3.当用户进行操作(如点击按钮),Tkinter 会触发相应的事件处理函数(例如,你设置的 command 参数对应的函数)。
4.如果没有事件发生,应用程序会保持空闲状态,不会占用太多CPU资源。
5.当你关闭窗口或者调用 win.destroy() 时,win.mainloop() 会退出,事件循环结束,应用程序终止。
7.登录页面运行结果图
在这里插入图片描述

完整代码

import tkinter as tk
from tkinter import messagebox
import subprocess
from PIL import ImageTk, Image#设置窗口
win=tk.Tk()
win.title('人脸识别系统')
win.geometry('600x650')#设置背景图
image = Image.open("1.gif")
image = image.resize((600, 650))  # 调整背景图片大小
photo1 = ImageTk.PhotoImage(image)
# 创建Label并将背景图片设置为背景
canvas = tk.Label(win, image=photo1)
canvas.pack()#定义识别
def S():script_path = "识别.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")#定义提取
def T():script_path = "提取.py"try:# 运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")#定义标注
def B():script_path = "标注.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")#定义对比
def R():script_path = "人脸比对.py"try:# 运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")#定义动态处理
def D():script_path = "动态处理.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")# 定义属性判断
def SXPD():script_path = "属性判断.py"try:#运行文件subprocess.Popen(["python", script_path])win.destroy()except Exception as e:# 如果有错误,弹出消息框messagebox.showerror("Error", f"无法打开脚本:{e}")#定义退出
def close():if messagebox.askokcancel("退出", "确定要退出吗?"):win.destroy()#按钮设计#人脸识别按钮
image = Image.open("2.gif")  # 加载一张图片
photo2 = ImageTk.PhotoImage(image)
bt1 = tk.Button(win, image=photo2, width=198, height=35, command=S)
bt1.place(x=75, y=140)#人脸提取按钮
image = Image.open("3.gif")  # 加载一张图片
photo3 = ImageTk.PhotoImage(image)
bt2 = tk.Button(win,image=photo3,width=198,height=35,command=T)
bt2.place(x=310,y=90)#特征标注按钮
image = Image.open("4.gif")  # 加载一张图片
photo4 = ImageTk.PhotoImage(image)
bt3 = tk.Button(win,image=photo4,width=198,height=35,command=B)
bt3.place(x=310,y=185)#动态处理按钮
image = Image.open("5.gif")  # 加载一张图片
photo5 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo5,width=198,height=33,command=D)
bt4.place(x=75,y=350)#人脸对比按钮
image = Image.open("F4.gif")  # 加载一张图片
photo6 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo6,width=198,height=33,command=R)
bt4.place(x=75,y=245)# 属性判断按钮
image = Image.open("F18.gif")  # 加载一张图片
photo7 = ImageTk.PhotoImage(image)
bt = tk.Button(win, image=photo7,  text="退出",width=198,height=32,command=SXPD)
bt.place(x=310,y=300)#退出按钮
image = Image.open("6.gif")  # 加载一张图片
photo8 = ImageTk.PhotoImage(image)
bt = tk.Button(win, image=photo8,  text="退出",width=170,height=110,command=close)
bt.place(x=380,y=400)win.mainloop()

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

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

相关文章

智汇云舟与芯瞳完成兼容适配,共建国产化生态体系

近日,智汇云舟的视频孪生系列产品和时空大数据系列产品已完成与芯瞳半导体技术(山东)有限公司GPU产品GB2062/GB2064/CQ2040/CQ2040 MXM/CQ2040 MD的相互兼容性测试认证。双方产品经过严格测试,已完成兼容适配,具备良好…

【设计模式深度剖析】【6】【结构型】【外观模式】| 以电脑开关按钮为例,并结合微服务架构的API网关加深理解

👈️上一篇:桥接模式 | 下一篇:享元模式👉️ 设计模式-专栏👈️ 目 录 外观模式(Facade Pattern)定义英文原文直译如何理解呢?字面理解代码实现中的理解生活案例:操作多功能料理机典型案例…

ARM32开发——串口输入

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求串口数据接收中断函数IDLE中断串口接收流程(了解)完整示例 需求 串口接收PC机发送的数据。 串口数据接…

【ASP】asp中变量、requst参数在html、asp、sql中的调用格式

一、html页面 - 变量 <input name"T_ID" type"hidden" value"<%T_ID%>"> <input name"T_ID" type"hidden" value"<%T_ID%>"> 二、html页面 - requst参数 <input type"hidden&…

如何在 Vue 中实现自定义的响应式系统?

在 Vue 中,我们可以通过自定义响应式系统来实现更复杂的数据处理需求。以下是一个简单的示例,演示如何在 Vue 中创建一个自定义的响应式系统: // 定义一个响应式系统 class ReactiveSystem {constructor() {this.dependencies = new Map();}// 定义一个依赖收集函数track(targe…

primAlgorithm普利姆算法

primAlgorithm普利姆算法 背景代码实现&#xff08;Java&#xff09; 背景 修路问题&#xff08;最短路径&#xff09; 代码实现&#xff08;Java&#xff09; package test01;import java.util.Arrays;/** 普利姆算法解决修路最短路径的问题* 满足条件为&#xff1a;* 1要把…

【fido2100:工业自动化新标杆——高性能DLR交换机引领精准时间同步新时代】

在现代工业自动化和通信网络中&#xff0c;对于高速、稳定和精准的时间同步有着极高的要求&#xff0c;随着工业4.0的提出和智能制造的发展&#xff0c;工业以太网应运而生&#xff0c;而在工业以太网之中交换机是保证通信稳定的重要的一环。工业以太网交换机广泛应用于工业控制…

html+CSS+js部分基础运用13

一、三级联动 效果如下图所示&#xff1a; 图1 三级联动 二、设计江苏福彩投注站彩票投注助手 编程实现江苏福彩投注站彩票投注助手&#xff0c;页面布局效果如图2所示。 图2福彩投注站彩票助手页面 功能要求如下&#xff1a; 单击“机选1注”、“机选5注”或“机选10注”…

一周速览丨YOLOv10 模型+应用一站式体验!一键部署 Llama 3-Chinese-Chat-8b

公共资源速递 This Weekly Snapshots &#xff01;5 个数据集&#xff1a; Llama3 中文化数据集皮马印第安人糖尿病数据集VehicleID 车辆识别数据集LCCC 大规模净化汉语会话语料库NWPU VHR-10 地理空间物体检测遥感数据集 2 个模型&#xff1a; YOLOv10Llama 3-Chinese-Cha…

QT入门知识回顾

1 QT简介 1.1 Qt模块: Qt Core模块: 是QT类库的核心&#xff0c;所有其他模块都依赖这个模块 Qt Gui模块: 提供GUI程序的基本功能 Qt Network模块:提供跨平台的网络功能 Qt Widgets模块:提供创建用户界面的功能 1.2Qt的signal/slot机制 任何一个类只要类体前部书写 Q_OBJ…

香港移民政策放开了,2024拿香港身份的8种方式,申请条件解读

​香港移民政策放开了&#xff0c;2024拿香港身份的8种方式&#xff01; 都2024年了&#xff0c;香港身份还受欢迎吗&#xff1f; 当然受欢迎&#xff0c;我们从数据上就能看出来&#xff0c;去年有超过24万人通过各类人才引入计划申请来港&#xff0c;其中超过14万获批&…

三生随记——作家的噩梦

月光斑驳&#xff0c;李轩独坐于老屋的木桌前&#xff0c;四周的静谧被笔尖划过纸张的沙沙声打破。作为一个小有名气的作家&#xff0c;他的文字总是充满魔力&#xff0c;让读者深陷其中。但今晚&#xff0c;他的故事似乎有些不同寻常。 故事的主角&#xff0c;一个名叫林浩的探…

Java虚拟机的优化方法

随着时间的推移&#xff0c;许多优化已经提高了 JVM 的性能。然而&#xff0c;尽管 Java 通常是第一个成功实现它们的虚拟机&#xff0c;但它们也经常被用于其他类似的平台。 1.即时编译 早期的 JVM 总是解释 Java 字节码。在普通应用程序中&#xff0c;Java 的性能损失比 C …

静态网页实现-人脸识别-案例(web)

&#x1f933;人脸识别&#xff08;web) 基于开源大模型&#xff0c;将人脸识别功能整合到网页中&#xff0c;提供用户友好的界面和强大的功能。 核心功能 人脸轮廓识别&#xff1a; 通过深度学习算法&#xff0c;精确识别人脸的轮廓&#xff0c;包括眼睛、鼻子、嘴巴等关键部…

Sql注入漏洞汇总-上

产生的原因 当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,带入数据库中进行查询,从而导致数据的泄露或者修改。 02 分类 1、按照查询的类型分类 数字型 select * from user whe…

在QML中调用 C++ 函数的方法(四)

文章目录 前言一、qml 和 c++ 交互的官方文档介绍二、QML 中调用 C++ 实现的函数的方法1. Exposing Attributes of C++ Types to QML1.1 暴露 Properties1.2 暴露 Methods(槽函数和Q_INVOKABLE 修饰的函数)1.3 暴露 Signals2. Defining QML Types from C++3. 代码实例3.1 创建一…

【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )

文章目录 一、ArkTS Component 自定义组件生命周期1、自定义组件生命周期2、aboutToAppear 函数执行时机和作用3、aboutToDisappear 函数执行时机和作用4、代码示例 二、ArkTS Entry 页面生命周期1、Entry 页面生命周期2、onBackPress 和 onPageHide 回调函数无关联 三、代码示…

文化若想挣钱,真的很可怕吗?

文化若想挣钱&#xff0c;真的很可怕吗&#xff1f; 近日&#xff0c;我看到受人尊敬的静思有我先生的一个音频作品《会挣钱&#xff0c;遇上有文化&#xff0c;这个地方很可怕》&#xff0c;把这个标题在网上搜一搜&#xff0c;在它下面就跟着有这样一篇文章--商人不可怕&…

vscode 1.85安装remote-ssh后左侧没有图标

vscode安装remote-ssh插件后左侧没有图标。 解决方法 想要左侧有图标&#xff0c;是另一个插件起作用&#xff1a;Remote Explorer 但是这个插件最新版需要1.87&#xff0c;可以switch to Pre-release version之后就能用了。 其实&#xff0c;最后再switch to Release Versio…

PHP网络编程是什么:深入探索其四个方面、五个方面、六个方面与七个方面的核心奥秘

PHP网络编程是什么&#xff1a;深入探索其四个方面、五个方面、六个方面与七个方面的核心奥秘 PHP网络编程&#xff0c;这个看似简单的概念&#xff0c;实则蕴含着丰富的内涵和无尽的探索空间。它不仅是现代网络应用开发的重要基石&#xff0c;更是无数开发者实现创意与梦想的…