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

人脸识别

一、项目准备

提前导入用于人脸识别的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中显示的图像。

python 复制代码
import tkinter as tk
from tkinter import messagebox
import subprocess
from PIL import ImageTk, Image

2.设置窗口

2.1定义窗口外观和大小

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

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

2.2设置窗口背景

2.2.1设置背景图片

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

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

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

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

3.运行脚本

3.1定义识别脚本

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

python 复制代码
# 定义识别
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。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

python 复制代码
# 定义提取
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。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

python 复制代码
#定义标注
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。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

python 复制代码
# 定义对比
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。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

python 复制代码
#定义动态处理
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。如果在这个过程中出现任何异常,它会弹出一个错误消息框,显示具体的错误信息。

python 复制代码
# 定义属性判断
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 将被关闭;如果用户点击"取消",则不会发生任何操作。

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

5.按钮设计

5.1人脸识别按钮

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

python 复制代码
# 人脸识别按钮
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函数。

python 复制代码
#  人脸提取按钮
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函数。

python 复制代码
# 特征标注按钮
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函数。

python 复制代码
# 动态处理按钮
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函数。

python 复制代码
# 人脸对比按钮
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函数。

python 复制代码
# 属性判断按钮
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的函数。

python 复制代码
# 退出按钮
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 应用程序的核心,它负责处理用户输入(如鼠标点击、按键等),更新窗口内容,以及响应用户的操作。

python 复制代码
win.mainloop()

注:当你调用 win.mainloop() 时,以下几件事情会发生:

1.窗口 win 会显示在屏幕上。

2.应用程序会开始监听和响应事件,如按钮点击、输入框文字变化等。

3.当用户进行操作(如点击按钮),Tkinter 会触发相应的事件处理函数(例如,你设置的 command 参数对应的函数)。

4.如果没有事件发生,应用程序会保持空闲状态,不会占用太多CPU资源。

5.当你关闭窗口或者调用 win.destroy() 时,win.mainloop() 会退出,事件循环结束,应用程序终止。

7.登录页面运行结果图

完整代码

python 复制代码
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()
相关推荐
大龄程序员狗哥5 小时前
第47篇:使用Speech-to-Text API快速构建语音应用(操作教程)
人工智能
KKKlucifer5 小时前
数据安全合规自动化:策略落地、审计追溯与风险闭环技术解析
人工智能·安全
m0_748554816 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
RWKV元始智能6 小时前
RWKV超并发项目教程,RWKV-LM训练提速40%
人工智能·rnn·深度学习·自然语言处理·开源
dyj0956 小时前
Dify - (一)、本地部署Dify+聊天助手/Agent
人工智能·docker·容器
墨染天姬6 小时前
【AI】Hermes的GEPA算法
人工智能·算法
小超同学你好6 小时前
OpenClaw 深度解析系列 · 第8篇:Learning & Adaptation(学习与自适应)
人工智能·语言模型·chatgpt
紫微AI6 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
码途漫谈6 小时前
Easy-Vibe开发篇阅读笔记(四)——前端开发之结合 Agent Skills 美化界面
人工智能·笔记·ai·开源·ai编程
smj2302_796826526 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode