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

一、人脸对比

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_image2if label_var == 1:save_image1 = file_pathelse:save_image2 = file_pathdisplay_image(file_path, label_var)return select_image

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux环境打包QML程序

第一次打包linux下的QML程序,一路磕磕绊绊,如果有更好的方式,欢迎留言。 1、使用release编译出可执行文件,这一步大家都知道吧; 2、将可执行文件放入新建文件夹project中,同时创建copylib.sh文件&#xf…

魔众文库系统v6.7.0版本用户注册登录优化,已知问题修复

2024-06-14 更新日志 用户注册登录优化,已知问题修复 [新功能] Hidden 组件支持序列化类型,避免入库异常 [新功能] 增加命令执行函数和数组多键值排序方法 [新功能] 后台安全提醒修改密码链接不存在问题 [新功能] 优化 Nav 组件,支持链式…

远程开发端口转发

应用推荐场景: 1.服务器跑后台,本地出前端应用。 比如Stable Diffusion的大模型打标应用。 2.Docker容器服务器。 对于本地服务想要转出去,跑出来前端。该项能克服虚拟机的端口与ip访问问题。 正文: 涉及的软件: …

电压kV为什么k要小写,原因你知道吗?

国际标准的计量单位一般用小写。仅在涉及以名字命名的单位,比如伏特V、安培A、开尔文K、瓦特W等,为了表示对科学家前辈的尊重,就用大写,其余的非以人名命名的单位一般用小写。这里解释了为何V是大写。 其次,对于量词&…

二级造价师精选基础知识题库(含答案)

一.单项选择题: 1.大中型建设工程项目立项批准后,在工程开工前,应当由( )按照有关规定申请领取施工许可证。A.建设单位 B.施工单位 C.总承包单位 D.监理单位 2.建设单位申领建筑工程施工许可证后,既不开工又不申请延期或者超过延期时限的&a…

YOLOv10改进|采用ADown降采样模块有效融合

📚 专栏地址:《YOLOv10算法改进实战》 👉 独家改进,对现有YOLOv10进行二次创新,提升检测精度,适合科研创新度十足,强烈推荐 🌟 统一使用 YOLOv10 代码框架,结合不同模块来构建不同的YOLO目标检测模型。 💥 本博客包含大量的改进方式,降低改进难度,改进点包含【B…

14,15-EET/DHET Hypertension ELISA Kit--Detroit RD

用于14,15-EET/DHET测量的DH2与用于14,15-DHET测量的DH1相同。与DH2相比,与DH1的唯一区别是样品制备步骤(而不是Elisa试剂盒),其中EET被化学改为DHET。 货号:DH2 名称:14,15-EET/DHET Hypertension ELISA…

C#——值类型和引用类型的区别详情

值类型和引用类型的区别 值类型 值类型: 常用的基本数据类型都是值类型:bool 、char、int、 double、 float、long 、 byte 、ulong、uint、枚举类型、 结构体类型等特点: 在赋值的过程当中,把值的本身赋值给另一个变量,再修改…

使用 PNPM 从零搭建 Monorepo,测试组件并发布

1 目标 通过 PNPM 创建一个 monorepo(多个项目在一个代码仓库)项目,形成一个通用的仓库模板。 这里以在该 monorepo 项目中搭建 web components 类型的组件库为例,介绍从仓库搭建、组件测试到组件发布的整个流程。 这个仓库既可…

gpt、llama大模型模型结构细节探索

参考: https://github.com/naklecha/llama3-from-scratch(一定要看看) https://github.com/karpathy/build-nanogpt/blob/master/play.ipynb 视频: https://www.youtube.com/watch?vl8pRSuU81PU https://tiktokenizer.vercel…

SiLM59xx系列SiLM5932SHOCG-DG 一款支持主动短路保护功能(ASC)单通道隔离驱动器

SiLM59xx系列SiLM5932SHOCG-DG是一款单通道隔离驱动器,提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V,输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压…

Java面向对象之static关键字,可变参数,递归,数组常见算法,对象数组,方法参数

第一章.static关键字 1.static的介绍以及基本使用 1.概述:static是一个静态关键字 2.使用:a.修饰一个成员变量:static 数据类型 变量名b.修饰一个方法:修饰符 static 返回值类型 方法名(形参){方法体return 结果}3.调用静态成员:类名直接调用(不用new对象)4.静态成员特点:a.静…

go grpc安装protobuf

1. https://github.com/protocolbuffers/protobuf/releases -> assets 下载 protoc-27.1-win64.zip window*64位 找个位置解压, 并将解压文件的bin目录复制加入环境变量,cmd输入protoc查看安装是否成功 https://github.com/protocolbuffe…

后端返回前端时间格式化

时间格式化的方法总共包含以下 5 种。 1.前端时间格式化 JS 版时间格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function dateFormat(fmt, date) { let ret; const opt { "Y": date.getFullYear().toString(), // 年 …

Python学习从0开始——Kaggle深度学习002

Python学习从0开始——Kaggle深度学习002 一、单个神经元1.深度学习2.线性单元示例 - 线性单元作为模型多个输入 3.Keras中的线性单元 二、深度神经网络1.层多种类型的层 2.激活函数3.堆叠密集层4.构建Sequential模型 三、随机梯度下降1.介绍2.损失函数3.梯度下降法1.梯度下降法…

掌握.gitignore与标签(Tag)的高效使用

前言 在软件开发过程中,版本控制是不可或缺的一环,而Git作为当前最流行的分布式版本控制系统,以其高效、灵活的特点被广泛应用于项目管理中。本文将深入探讨Git中的两个重要概念:.gitignore文件和标签(Tag&#xff09…

计算机组成原理历年考研真题对应知识点(计算机的性能指标)

目录 1.3计算机的性能指标 1.3.1计算机的主要性能指标 【命题追踪——与机器字长位数相同的部件(2020、2021)】 【命题追踪——提高系统性能的综合措施(2010)】 【命题追踪——时钟脉冲信号和时钟周期的相关概念(2019)】 【命题追踪——主频和时钟周期的转换计算(2013)】 …

FL Studio(FL 21)软件下载-详细安装教程视频

​fl studio 编曲软件即,简称FL,是音乐人熟知的水果编曲软件.可以完成完整的音乐制作环境或数字音频工作站(DAW)就是大家熟悉的水果 编曲软件,一个全能的音乐制作软件,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室。…

DeepSORT(目标跟踪算法) 卡尔曼滤波的完整流程

DeepSORT(目标跟踪算法) 卡尔曼滤波的完整流程 flyfish DeepSORT(目标跟踪算法)中的状态向量与状态转移矩阵 DeepSORT(目标跟踪算法)中卡尔曼滤波器中的更新 DeepSORT(目标跟踪算法&#xf…

海南云亿商务咨询有限公司解锁抖音电商新纪元

在当今数字化浪潮中,抖音电商以其独特的魅力和强大的用户基础,迅速成为企业营销的新宠。海南云亿商务咨询有限公司,作为专注于抖音电商服务的领先企业,凭借专业的团队和丰富的经验,为众多企业提供了高效、精准的电商服…