大家好,欢迎来到IT知识分享网。
一、人脸对比
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
运行结果:
这是对不同人脸进行作比较
这是同一张人脸,不同角度的对比结果
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/138830.html