【人脸识别】基于facenet_pytorch实现人脸识别

article/2025/8/27 18:29:18

        该代码可以在Pycharm、Jupyter、Python等Python编译器中运行,本文我使用的是Pycharm。

一、安装

(一)安装pytorch(cpu)

        首先在Pycharm中新建一个名为facenet_test的项目,并创建一个名为fp.py的Python文件。

        打开PyTorch官网Start Locally | PyTorch,在主页中根据自己的电脑选择Linux、Mac或Windows,其余如下图所示,系统将给出对应的安装语句,如我这里为“pip3 install torch torchvision torchaudio”。

        由于不加镜像下载速度比较慢,所以我们加上清华镜像在pycharm的terminal终端中输入以下命令:

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

        稍等片刻后,系统显示“successfully installed……”。之后在终端中输入以下命令,来测试是否安装成功。

python               # 进入Python环境
import torch         # 导入torch模块,若没有报错说明安装成功
torch.__version__    # 查看版本号

         效果如下所示,说明安装成功了。

(二)安装facenet_pytorch库

        在终端中键入如下命令:(在此之前先按Ctrl+Z并回车退出Python环境)

pip install facenet_pytorch

        安装好之后到“C:\Users\用户名\”路径下查看是否有“.cache”文件夹。如果没有,可以在终端的python环境下,运行以下两句命令:

import torchvision.models as models
alexnet=models.alexnet(pretrained=True)

        安装好之后重新查看“C:\Users\用户名\”路径,发现已经有了“.cache”文件夹。接着我们需要到如下网盘链接中下载InceptionResnetV1预训练模型,并将压缩包解压放置在“C:\Users\用户名\.cache\torch\hub\checkpoints”或“C:\Users\用户名\.cache\torch\checkpoints”路径下。如图所示。

链接:https://pan.baidu.com/s/1UrnggoOLL8lv2Nj4odBfWw?pwd=w6x8 
提取码:w6x8 

 

 二、代码实现

        首先选择两张图片作为待识别的图片,并将它们与fp.py放置在同一目录中。在这里我选择以下两张图片,分别命名为“zj.jpg”和“zj2.jpg”。

        接着在fp.py中输入以下代码:

import cv2
import torch
from facenet_pytorch import MTCNN, InceptionResnetV1# 获得人脸特征向量
def load_known_faces(dstImgPath, mtcnn, resnet):aligned = []knownImg = cv2.imread(dstImgPath) # 读取图片face = mtcnn(knownImg)  # 使用mtcnn检测人脸,返回【人脸数组】if face is not None:aligned.append(face[0])aligned = torch.stack(aligned).to(device)with torch.no_grad():known_faces_emb = resnet(aligned).detach().cpu()  # 使用resnet模型获取人脸对应的特征向量print("\n人脸对应的特征向量为:\n", known_faces_emb)return known_faces_emb, knownImg# 计算人脸特征向量间的欧氏距离,设置阈值,判断是否为同一个人脸
def match_faces(faces_emb, known_faces_emb, threshold):isExistDst = Falsedistance = (known_faces_emb[0] - faces_emb[0]).norm().item()print("\n两张人脸的欧式距离为:%.2f" % distance)if(distance < threshold):isExistDst = Truereturn isExistDstif __name__ == '__main__':# help(MTCNN)# help(InceptionResnetV1)# 获取设备device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')print(device)# mtcnn模型加载【设置网络参数,进行人脸检测】mtcnn = MTCNN(min_face_size=12, thresholds=[0.2, 0.2, 0.3], keep_all=True, device=device)# InceptionResnetV1模型加载【用于获取人脸特征向量】resnet = InceptionResnetV1(pretrained='vggface2').eval().to(device)MatchThreshold = 0.8    # 人脸特征向量匹配阈值设置known_faces_emb, _ = load_known_faces('zj.jpg', mtcnn, resnet)  # 已知人物图# bFaceThin.png  lyf2.jpgfaces_emb, img = load_known_faces('zj2.jpg', mtcnn, resnet) # 待检测人物图isExistDst = match_faces(faces_emb, known_faces_emb, MatchThreshold)  # 人脸匹配print("设置的人脸特征向量匹配阈值为:", MatchThreshold)if isExistDst:boxes, prob, landmarks = mtcnn.detect(img, landmarks=True)  # 返回人脸框,概率,5个人脸关键点print('由于欧氏距离小于匹配阈值,故匹配')else:print('由于欧氏距离大于匹配阈值,故不匹配')

        第一次运行时系统需要下载预训练的vggface模型,时间会比较久,耐心等待下载好之后程序便可以运行。

        

        程序的输出结果包括运行设备、两张图片中人脸对应的特征向量、两张人脸的欧式距离、设置的人脸特征向量匹配阈值和两张人脸是否匹配。

        部分运行结果如下所示:

         根据运行结果,两张图片中人脸的欧氏距离小于设定的匹配阈值,故匹配,也就是说两张人脸是同一个人。下面,我们尝试将zj2.jpg替换为周杰伦的照片zjl.jpg,来看看会有什么结果。

         结果显示,两张图片中人脸的欧氏距离大于设定的匹配阈值,故不匹配,也就是说两张人脸不是同一个人。

        这样的话,我们的代码就能实现简单的人脸识别啦。


http://chatgpt.dhexx.cn/article/yeGfhWxg.shtml

相关文章

人脸识别基础(FaceNet)

文章目录 Face verification VS Face recoginitionEncoderTriplet Loss 主要思路参考&#xff1a; FaceNet论文:FaceNet: A Unified Embedding for Face Recognition and Clustering吴恩达视频Keras 大佬 Face verification VS Face recoginition 对于人脸验证&#xff0c;我…

使用pyTorch搭建自己的facenet

很长时间没有发自己学习过程的博客了&#xff0c;这次发的是初次使用pyTorch搭建自己的facenet。 参考博主博客&#xff1a;https://blog.csdn.net/weixin_44791964/article/details/108220265 源代码地址&#xff1a;https://github.com/bubbliiiing/facenet-pytorch 本次使…

人脸识别系列(十八):MobileFaceNets

原文链接&#xff1a;MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices MobileNet 可分离卷积&#xff08;Depthwise separable conv&#xff09;&#xff1a; 可分离卷积可以减少参数量与计算量&#xff1a; 例如输入是100*100…

聪明的人脸识别2——Keras 利用Retinaface+Facenet搭建人脸识别平台

聪明的人脸识别2——Keras 利用RetinafaceFacenet搭建人脸识别平台 学习前言什么是Retinface和Facenet1、Retinface2、Facenet 整体实现代码实现流程一、数据库的初始化二、检测图片的处理1、人脸的截取与对齐2、利用Facenet对矫正后的人脸进行编码3、将实时图片中的人脸特征与…

人脸识别之facenet代码实现

上一篇博文介绍了facenet的原理&#xff0c;这篇讲解一下代码的实现&#xff0c;对于facenet的代码目前也有写好的部分。具体见链接facenet代码实现 。大家可以通过git直接下载代码&#xff0c;然后运行里面的validata_on_lfw.py。输入对应的lfw数据的路径就可以检测模型对lfw数…

聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台

聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台 学习前言什么是Facenet源码下载Facenet的实现思路一、预测部分1、主干网络介绍2、根据初步特征获得长度为128的特征向量3、l2标准化4、构建分类器&#xff08;用于辅助Triplet Loss的收敛&#xff09; 二、训练部分1、…

人脸识别系列(六):FaceNet

原文链接&#xff1a;FaceNet:A Unified Embedding for Face Recognition and Clustering 首先可以看一下最终的效果&#xff0c;数字表示两张图片经过Facenet提取的特征之间的欧式距离&#xff0c;可以直接表示两张图片的差异&#xff1a; 从图中可以看出&#xff0c;若取阈值…

人脸识别(Facenet)

人脸识别是目前应用非常广泛的一种生物识别技术&#xff0c;与其他生物识别技术&#xff08;指纹识别&#xff0c;掌形识别&#xff0c;眼虹膜识别和声音识别&#xff09;相比&#xff0c;人脸识别具有以下优势&#xff1a; 其他每种生物识别方法都需要一些人的配合动作&#x…

全网首发,Swin Transformer+FaceNet实现人脸识别

目录 一、 简介 二、Swin Transformer作为Backbone 1.Swin Transformer整体结构 2.PatchEmbed Patch Partition Linear Embedding 3.Swin Transformer Block &#xff08;1&#xff09;Window Partition &#xff08;2&#xff09;Shifted Window based Self-Attenti…

深度学习之facenet人脸识别网络介绍

1.前言 照例先来一段废话&#xff0c;不要跟我说什么物质决定意识&#xff0c;也不要告诉我意识超越物质。在我眼中&#xff0c;这个世界本就是一个战场。软弱的意志自然无法战胜物质&#xff0c;但是足够强大的意识也是能够做到的。在战争没有进行完之前&#xff0c;谁也不知道…

聪明的人脸识别4——Pytorch 利用Retinaface+Facenet搭建人脸识别平台

睿智的目标检测51——Pytorch 利用RetinafaceFacenet搭建人脸识别平台 学习前言什么是Retinface和Facenet1、Retinface2、Facenet 整体实现代码实现流程一、数据库的初始化二、检测图片的处理1、人脸的截取与对齐2、利用Facenet对矫正后的人脸进行编码3、将实时图片中的人脸特征…

Facenet 原理介绍

引子[编辑 | 编辑源代码] 这篇wiki主要介绍facenet人脸相似比较的基本原理&#xff0c;另外两篇wiki主要介绍基于tensorflow实现facenet的准确率测试及源码解读。经过在网上的一番搜索&#xff0c;找到了facenet实现人脸聚类的论文和论文解读&#xff0c;以及github上根据facen…

【 facenet-retinaface】快速复现 实现 facenet-retinaface-pytorch 人脸识别 windows上 使用cpu实现

目录 0 前言1 搭建环境与项目2 人脸预测与结果展示 0 前言 这一次要复现的是人脸识别中的 facenet-retinaface-pytorch 是在上一次博客的内容上更进一步 快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比 参考了&#xff1a; Pytorch 利用Facenet和Re…

FaceNet

摘要&#xff1a; 尽管人脸识别领域最近取得了重大进展[10,14,15,17]&#xff0c;但大规模有效地实施人脸验证和识别对当前方法提出了严峻挑战。在本文中&#xff0c;我们提出了一个称为 FaceNet 的系统&#xff0c;它直接学习从人脸图像到紧凑欧几里得空间的映射&#xff0c;其…

【facenet】快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比

目录 0 前言1 搭建环境与项目2 人脸预测与结果展示 0 前言 这一次要复现的是人脸识别中的 facenet-pytorch 参考了&#xff1a; Pytorch 搭建自己的Facenet人脸识别网络&#xff08;Bubbliiiing 深度学习 教程&#xff09; https://gitee.com/xiaozhao123666/facenet-pytorch …

利用MTCNN和facenet实现人脸检测和人脸识别

利用MTCNN和facenet实现人脸检测和人脸识别 人脸检测和人脸识别技术算是目前人工智能方面应用最成熟的技术了。本博客将利用mtcnn和faceNet搭建一个实现人脸检测和人脸识别的系统。基本思路也很简单&#xff0c;先利用mtcnn的进行人脸检测&#xff0c;当然也可以使用其他的人脸…

facenet 总结一

Facenet是谷歌研发的人脸识别系统&#xff0c;该系统是基于百万级人脸数据训练的深度卷积神经网络&#xff0c;可以将人脸图像embedding&#xff08;映射&#xff09;成128维度的特征向量。以该向量为特征&#xff0c;采用knn或者svm等机器学习方法实现人脸识别。 CASIA-WebFac…

【人脸识别】FaceNet详解

论文题目&#xff1a;《FaceNet: A Unified Embedding for Face Recognition and Clustering》 论文地址&#xff1a;FaceNet 1、概述 FaceNet&#xff08;A Unified Embedding for Face Recognition and Clustering&#xff09;直接把输入图像变成欧式空间中的特征向量&#…

人脸识别系统FaceNet原理

1. 概述 近年来&#xff0c;随着深度学习在CV领域的广泛应用&#xff0c;人脸识别领域也得到了巨大的发展。在深度学习中&#xff0c;通过多层网络的连接&#xff0c;能够学习到图像的特征表示&#xff0c;那么两张人脸的图像&#xff0c;是不是可以通过深度学习判别其是否是相…

聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台

聪明的人脸识别3——Pytorch 搭建自己的Facenet人脸识别平台 学习前言什么是Facenet源码下载Facenet的实现思路一、预测部分1、主干网络介绍2、根据初步特征获得长度为128的特征向量3、l2标准化4、构建分类器&#xff08;用于辅助Triplet Loss的收敛&#xff09; 二、训练部分1…