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()
相关推荐
qq_273900234 分钟前
解析TMalign文本文件中的转换矩阵
python·生物信息学
DuoRuaiMiFa34 分钟前
ChatGPT全新功能Canvas上线:开启智能编程与写作新篇章
人工智能·chatgpt
DisonTangor38 分钟前
Windows 11将新增基于AI的搜索、生成式填充和其它AI功能
人工智能
soso196839 分钟前
【AI自然语言处理应用】通过API调用通义晓蜜CCAI-对话分析AIO应用
人工智能·自然语言·ccai
网安-搬运工42 分钟前
RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
人工智能·自然语言处理·大模型·llm·大语言模型·ai大模型·rag
大模型八哥43 分钟前
大模型扫盲系列——大模型实用技术介绍(上)
人工智能·程序人生·ai·大模型·llm·llama·ai大模型
阿华的代码王国1 小时前
【JavaEE】——文件IO的应用
开发语言·python
被制作时长两年半的个人练习生1 小时前
【pytorch】权重为0的情况
人工智能·pytorch·深度学习
Elastic 中国社区官方博客1 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索