人脸识别系统---人脸对比

一、人脸对比

1.定义全局变量来存储选择的图片路径和标签

save_image1 = None
save_image2 = None
image_label1 = None
image_label2 = None

2.定义了一个名为compare_faces的函数,用于比较两张图片中的人脸是否相似

def compare_faces():
    if save_image1 and save_image2:

2.1加载图片并转换为RGB

img1 = face_recognition.load_image_file(save_image1)
    img2 = face_recognition.load_image_file(save_image2)

2.2提取人脸编码

face1_encodings = face_recognition.face_encodings(img1)
    face2_encodings = face_recognition.face_encodings(img2)

2.3如果没有检测到人脸,返回相似度为0

if not face1_encodings or not face2_encodings:
        return 0.0

2.4比较人脸编码

face1_encoding = face1_encodings[0]
    face2_encoding = face2_encodings[0]

2.5计算相似度

similarity = face_recognition.compare_faces([face1_encoding], face2_encoding)[0]

    # 注意:compare_faces返回的是布尔值,我们需要计算相似度分数(如果需要的话)
    # 这里使用compare_faces的默认行为,即返回是否相似的布尔值
    # 若要计算具体相似度分数,则需要使用其他方法(如余弦相似度等)

    if similarity:
        b5.config(text="人脸相似")
    else:
        b5.config(text="人脸不相似")
else:
    b5.config(text="请先选择两张图片!")

3.选择文件和单人脸提取中的选择文件部分一致

4.定义了一个名为display_image的函数,用于在图形用户界面(GUI)上显示图像

def display_image(image_path, label_var):
    global image_label1, image_label2

4.1根据传入的label_var来设置正确的标签

if label_var == 1:
    current_label = image_label1
else:
    current_label = image_label2

4.2如果之前已经有一个标签,先销毁它

if current_label:
    current_label.destroy()

image = Image.open(image_path)
image = image.resize((250, 300), Image.Resampling.LANCZOS)
photo = ImageTk.PhotoImage(image)

4.3创建新的标签并显示图片

current_label = Label(win, image=photo)
current_label.image = photo  # 保持对PhotoImage对象的引用,防止被垃圾回收
current_label.place(x=60 if label_var == 1 else 360, y=150)

4.4更新全局变量

if label_var == 1:
    image_label1 = current_label
else:
    image_label2 = current_label

5.定义选择文件函数(前几篇文章有做过详细介绍)

def s1(label_var):
    def select_image():    #定义选择图片的函数
    #指明label_var不是一个局部变量也不是全局变量,而是外部函数s1的参数。这样,select_image函数就可以修改s1函数的参数
		nonlocal label_var
        #弹出选择文件的对话框,以及被选择文件的类型
        file_path = filedialog.askopenfilename(title="选择图片",
                                               filetypes=(("图片文件", "*.png;*.jpg;*.jpeg;*.bmp"),
                                                          ("所有文件", "*.*")))
        #如果选择了文件
        if file_path:
            global save_image1, save_image2
#这是一个条件判断,根据label_var的值来决定将用户选择的文件路径赋值给哪一个全局变量。如果label_var等于1,则将文件路径赋值给save_image1;否则,赋值给save_image2
            if label_var == 1:
                save_image1 = file_path
            else:
                save_image2 = file_path
            display_image(file_path, label_var)

    return select_image

运行结果:
这是对不同人脸进行作比较
在这里插入图片描述
这是同一张人脸,不同角度的对比结果
在这里插入图片描述

相关推荐

  1. 人脸识别系统

    2024-06-15 21:42:02       13 阅读
  2. 基于python实现人脸识别登录系统

    2024-06-15 21:42:02       32 阅读
  3. Python实现的人脸识别系统

    2024-06-15 21:42:02       11 阅读
  4. 人脸识别系统代码--预测年龄

    2024-06-15 21:42:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 21:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 21:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 21:42:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 21:42:02       20 阅读

热门阅读

  1. 正则表达式

    2024-06-15 21:42:02       6 阅读
  2. MyBatis-Plus 源码解说

    2024-06-15 21:42:02       4 阅读
  3. Linux Ubuntu 24.04 C语言gcc编译过程详解

    2024-06-15 21:42:02       7 阅读
  4. mac 本地启动rocketmq

    2024-06-15 21:42:02       5 阅读
  5. SpringBoot面试准备 第一天

    2024-06-15 21:42:02       6 阅读
  6. vscode创建一个jest测试框架的项目

    2024-06-15 21:42:02       6 阅读
  7. css3新增伪元素有哪些?

    2024-06-15 21:42:02       8 阅读
  8. Android中的KeyEvent详解

    2024-06-15 21:42:02       10 阅读