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 分钟前
DENIAL-OF-SERVICE POISONING ATTACKS ON LARGE LANGUAGE MODELS
人工智能·语言模型·自然语言处理
Null箘14 分钟前
从零创建一个 Django 项目
后端·python·django
云空18 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
红色的山茶花29 分钟前
YOLOv9-0.1部分代码阅读笔记-loss_tal.py
笔记·深度学习·yolo
玖年1 小时前
Python re模块 用法详解 学习py正则表达式看这一篇就够了 超详细
python
岑梓铭1 小时前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
边缘计算社区1 小时前
首个!艾灵参编的工业边缘计算国家标准正式发布
大数据·人工智能·边缘计算
游客5201 小时前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主1 小时前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习