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()
相关推荐
Java后端的Ai之路1 分钟前
【分析式AI】-过拟合(含生活案例说明)
人工智能·aigc·生活·过拟合·分析式ai
企业智能研究2 分钟前
数据分析Agent白皮书:揭秘Data x AI的底层逻辑与未来关键
大数据·人工智能·数据分析
jqrbcts5 分钟前
关于发那科机器人视觉补偿报警设置
人工智能·算法
_Li.8 分钟前
机器学习-线性判别函数
人工智能·算法·机器学习
AI营销干货站10 分钟前
原圈科技推动AI营销内容生产革新:高质量素材每日自动生成
人工智能·科技
全栈陈序员10 分钟前
【Python】基础语法入门(二十)——项目实战:从零构建命令行 To-Do List 应用
开发语言·人工智能·python·学习
jcsx14 分钟前
如何将django项目发布为https
python·https·django
Elastic 中国社区官方博客14 分钟前
Elasticsearch:你是说,用于混合搜索(hybrid search)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
神州问学15 分钟前
Gemini 3.0 科普:Google 这次把 AI 做成“能看懂世界的助手”了
人工智能
LaughingZhu20 分钟前
Product Hunt 每日热榜 | 2025-12-18
人工智能·经验分享·神经网络·搜索引擎·产品运营