用Python实现一个简单的——人脸相似度对比

Siamese网络实战:用Python手把手教你实现人脸相似度对比(附完整代码) 本文详细介绍了如何使用Siamese网络(孪生神经网络)实现人脸相似度对比,包括环境配置、数据预处理、网络架构设计、模型训练技巧和实际应用优化。通过PyTorch框架,从零构建可商用的人脸对比系统,附完整代码和预训练模型,帮助开发者快速掌握这一技术。 阅读详情

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。

幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!

整体思路:

1、预先导入所需要的人脸识别模型;

2、遍历循环识别文件夹里面的图片,让模型“记住”人物的样子;

3、输入一张新的图像,与前一步文件夹里面的图片比对,返回最接近的结果。

使用到的第三方模块和模型:

1、模块:os,dlib,glob,numpy;

2、模型:人脸关键点检测器,人脸识别模型。

第一步:导入需要的模型。

这里解释一下两个dat文件:

它们的本质是参数值(即神经网络的权重)。人脸识别算是深度学习的一个应用,事先需要经过大量的人脸图像来训练。所以一开始我们需要去设计一个神经网络结构,来“记住”人类的脸。

对于神经网络来说,即便是同样的结构,不同的参数也会导致识别的东西不一样。在这里,这两个参数文件就对应了不同的功能(它们对应的神经网络结构也不同):

shape_predictor.dat这个是为了检测人脸的关键点,比如眼睛,嘴巴等等;dlib_face_recognition.dat是在前面检测关键点的基础上,生成人脸的特征值。

所以后面使用dlib模块的时候,其实就是相当于,调用了某个神经网络结构,再把预先训练好的参数传给我们调用的神经网络。顺便提一下,在深度学习领域中,往往动不动会训练出一个上百M的参数模型出来,是很正常的事。

import os,dlib,glob,numpy
from skimage import io

# 人脸关键点检测器
predictor_path = "shape_predictor.dat"
# 人脸识别模型、提取特征值
face_rec_model_path = "dlib_face_recognition.dat"
# 训练图像文件夹
faces_folder_path ='train_images' 

# 加载模型
detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor(predictor_path)
facerec = dlib.face_recognition_model_v1(face_rec_model_path)

第二步:对训练集进行识别。

在这一步中,我们要完成的是,对图片文件夹里面的人物图像,计算他们的人脸特征,并放到一个列表里面,为了后面可以和新的图像进行一个距离计算。关键地方会加上注释,应该不难理解。

candidate = []         # 存放训练集人物名字
descriptors = []       #存放训练集人物特征列表

for f in glob.glob(os.path.join(faces_folder_path,"*.jpg")):
    print("正在处理: {}".format(f))
    img = io.imread(f)
    candidate.append(f.split('\\')[-1].split('.')[0])
    # 人脸检测
    dets = detector(img, 1)
    for k, d in enumerate(dets): 
        shape = sp(img, d)
        # 提取特征
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        v = numpy.array(face_descriptor) 
        descriptors.append(v)

print('识别训练完毕!')

当你做完这一步之后,输出列表descriptors看一下,可以看到类似这样的数组,每一个数组代表的就是每一张图片的特征量(128维)。然后我们可以使用L2范式(欧式距离),来计算两者间的距离。

举个例子,比如经过计算后,A的特征值是[x1,x2,x3],B的特征值是[y1,y2,y3], C的特征值是[z1,z2,z3]。

那么由于A和B更接近,所以会认为A和B更像。想象一下极端情况,如果是同一个人的两张不同照片,那么它们的特征值是不是应该会几乎接近呢?知道了这一点,就可以继续往下走了。

第三步:处理待对比的图片。

其实是同样的道理,如法炮制,目的就是算出一个特征值出来,所以和第二步差不多。然后再顺便计算出新图片和第二步中每一张图片的距离,再合成一个字典类型,排个序,选出最小值,搞定收工!

try:
##    test_path=input('请输入要检测的图片的路径(记得加后缀哦):')
    img = io.imread(r".\test_images\test6.jpg")
    dets = detector(img, 1)
except:
    print('输入路径有误,请检查!')

dist = []
for k, d in enumerate(dets):
    shape = sp(img, d)
    face_descriptor = facerec.compute_face_descriptor(img, shape)
    d_test = numpy.array(face_descriptor) 
    for i in descriptors:                #计算距离
        dist_ = numpy.linalg.norm(i-d_test)
        dist.append(dist_)

# 训练集人物和距离组成一个字典
c_d = dict(zip(candidate,dist))                
cd_sorted = sorted(c_d.items(), key=lambda d:d[1])
print ("识别到的人物最有可能是: ",cd_sorted[0][0])

这里我用了一张“断水流大师兄”林国斌的照片,识别的结果是,果然,是最接近黎明了(嘻嘻,我爱黎明)。但如果你事先在训练图像集里面有放入林国斌的照片,那么出来的结果就是林国斌了。

为什么是黎明呢?我们看一下输入图片里的人物最后与每个明星的距离,输出打印一下:

{‘刘亦菲’: 0.5269014581137407,

‘刘诗诗’: 0.4779630331578229,

‘唐艺昕’: 0.45967444611419184,

‘杨幂’: 0.4753850256188804,

‘迪丽热巴’: 0.5730399094704894,

‘郑秀妍’: 0.40740137304879187,

‘郑秀晶’: 0.45325515192940385,

‘郭富城’: 0.7624925709626963,

‘黎明’: 0.8925473299225084}

没错,他和黎明的距离是最小的,所以和他也最像了!

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

​

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

Python兼职渠道推荐

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓
​

人脸比对指标 -- 人脸相似度 在实际商业落地中,人脸检测也可独立于人脸识别进行使用,典型应用如近期在海内外大热的AI测温机,只在检测到人脸时激活测温模块,从而降低产品长期运行的损耗与能耗,该过程就无需对人脸进行识别。比如在门禁场景下,要求FAR低于十万分之一,此时FRR越低,算法效果越好。应用角度:研发质量模型,对检测到的人脸质量进行评价,质量较差则不识别,如虹软视觉开放平台的FQ(人脸图像质量检测算法)工程角度:施加场景限制,比如刷脸解锁,人脸闸机,会场签到时,都要求用户在良好的光照条件下正对摄像头,以避免采集到质量差的图片。 阅读详情

相关推荐

人脸对比的Python实现

人脸对比的Python实现人脸对比是计算机视觉领域中的一个重要任务,它涉及将两张人脸图像进行比较,以确定它们是否属于同一个人。在本文中,我们将介绍如何使用Python来实现人脸对比,并提供相应的源代码。要实现人脸对比,我们需要使用人脸识别和特征提取算法。在Python中,有许多开源库可以帮助我们完成这些任务,其中最受欢迎的是dlib和OpenCV。我们将使用这两个库来实现人脸对比。首先,我们需要安装dlib和OpenCV库。安装完成后,我们可以开始编写代码。接下来,我们需要加载两张人脸图像。

code88888的博客 810

【百度AI_人脸识别】图片对比相似度、人脸对比登录(调摄像头)

两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值。 存档一张图片与调用的摄像中的人脸进行对比。

m0_70083523的博客 4831

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9809

python图片对比相似度_Python实现人脸识别(50行代码包会)

一、安装windows c++,cmake,dlib,face_recognition1. 安装visualStudio, visualStudio 结果不对的,至少要选上C++开发环境;3. pip安装的下载地址超级慢会出现报错的情况,换成国内阿里镜像(可换为国内其他镜像),下载就很快,命令:pip config set global.index-url https://mirrors.aliy...

weixin_39715460的博客 1702

使用Python实现简单的人脸相似度对比嵌入式

人脸相似度对比是计算两张人脸图片之间相似度的一种常见任务。在本篇文章中,我们将使用Python编程语言实现一个简单的人脸相似度对比嵌入式系统。我们将使用OpenCV和dlib库来进行人脸检测和特征提取,并使用欧氏距离来计算相似度。确保这两张图片中包含的是人脸区域,而且这些人脸区域是清晰可见的。函数,它接受一个图片路径作为输入,并返回该图片中检测到的人脸的特征向量列表。请注意,这只是一个简单的人脸相似度对比嵌入式系统的实现示例。函数来计算两个特征向量之间的欧氏距离,作为相似度的度量。

ZwdvIot的博客 375

AMBA VIP基础使用方式(AXI)

AXI环境配置 1)基础配置 作为master或者slave使用时,对应的is_active = 1 只作为i监测(monitor)使用时,对应slave_cfg的is_active = 0(对应端口连接也有所区别) class smu_axi_cfg extends svt_axi_system_configuration; `uvm_object_utils(smu_aix_cfg) function new(string name="smu_axi_cfg); super.new(n..

qq_37573794的博客 7984

python人脸比对算法_用Python实现一个简单的——人脸相似度对比

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!整体思路:1、预先导入所需要的人脸...

weixin_39562554的博客 1968

在国产麒麟系统上,用Postfix和Dovecot手搓一个内部邮件服务器(附Foxmail配置)

本文详细介绍了在国产麒麟系统上使用Postfix和Dovecot搭建内部邮件服务器的完整流程,包括系统准备、核心配置、安全加固及客户端适配。针对国产环境的特殊需求,提供了依赖包适配、配置差异和Foxmail客户端配置的实用解决方案,助力企业实现高效内部协作。

weixin_33722405的博客 371

python人脸对比相似度_相似度算法原理及python实现

“古之善为士者,微妙玄通,深不可识。夫唯不可识。故强为之容:豫兮,若冬涉川;犹兮,若畏四邻;俨兮,其若客;涣兮,若冰之将释;孰兮,其若朴;旷兮,其若谷;浑兮,其若浊。孰能浊以止,静之徐清?孰能安以久,动之徐生?”在数据挖掘和数据分析中,经常会遇到需要知道个体数据间差异的大小,进而需要得到个体数据间的相似度,最常见的就是电商平台中对于物品的推荐以及内容平台中对于信息的推送等等。相似度就是两个item...

weixin_34352633的博客 2406

Linux系统遭遇挖矿病毒深度排查与根治指南

本文提供了一份详尽的Linux服务器挖矿病毒排查与根治指南。当CPU异常满载但常规top命令无法定位进程时,需警惕病毒通过ld.so.preload文件隐藏。文章逐步指导如何清除恶意文件、进程、定时任务,并重点应对pamdicks等顽固变种,最后给出深度排查与系统加固方案,确保服务器安全。

weixin_29207533的博客 453

ArduPilot移植到自定义硬件:完整指南

详解如何将ArduPilot成功移植到自定义硬件平台,涵盖环境搭建、代码配置与调试技巧。无论是初学者还是进阶开发者,都能快速掌握ArduPilot在不同硬件上的适配方法,提升开发效率。

weixin_28931449的博客 638

python类似于countif_用Python实现一个简单的——人脸相似度对比

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!整体思路:1、预先导入所需要的人脸...

weixin_39971138的博客 244

告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置)

本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。

weixin_28720767的博客 317

简单几步用Python实现人脸对比

简单几步用Python实现人脸对比 说明:这是我暑假应实习单位需求使用百度api编写的一个简单的人脸相似度对比,其间处理了十万左右的照片,主要是为了判断是否为同一人 a.获取百度人脸识别api的api key 和secret key 去哪获取呢?网址:http://ai.baidu.com/tech/face,创建应用 b.获取AccessToken 这一部分在百度的说明文档里也有教你怎么获取和拼接,在这里我就简单的说明一下。 a.向授权服务地址:发送请求并在URL后带上一下参数: grand_type

weixin_44146046的博客 2155

TMS320F28377D双核开发例程 - DSP开发

首先,我们需要创建一个新的工程来进行开发。然后,选择适当的目标设备为TMS320F28377D,并设置工程的名称和存储位置。在上面的代码中,我们定义了一个128个元素的输入数组和输出数组。然后,我们使用一个简单的数字信号处理算法,将输入数组中的每个元素平方,并将结果存储到输出数组中。这个芯片的双核架构提供了更高的计算能力和灵活性,使得数字信号处理的开发更加高效和可靠。希望本文对您有所帮助!当应用程序在TMS320F28377D芯片上运行时,它将对输入数组中的每个元素进行平方运算,并将结果打印出来。

IfllUnity的博客 2517

SAP-ABAP:FI财务会计模块常用BAPI及核心用途实例说明

SAP FI模块的BAPI覆盖了从主数据管理、凭证过账到财务关账的全流程操作,是系统集成与自动化的重要工具。实际应用中需结合业务场景选择合适的BAPI,并严格遵循事务控制与校验规则。如需扩展功能,可通过BAdI或用户出口增强标准逻辑。

baidu_35680696的博客 1601
上一篇: 入门学习Python推荐书籍
下一篇: Python-Flask 快学
大模型产品经理
博客等级 码龄3年 1万+粉丝 1120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值