【PYTORCH】使用MTCNN简单进行人脸检测和相似度匹配

【PYTORCH】使用MTCNN简单进行人脸检测

    • 背景
    • 过程代码
    • 最终代码
    • 遇到的问题
      • 内网环境如何手动下载模型
      • 如何确定模型放置的位置
    • 其他
    • 参考

背景

近期看了一遍博客,想建单实现一下人脸检测和识别,使用了下面的代码

过程代码

import torch
import torchvision.transforms as transforms
from facenet_pytorch import MTCNN, InceptionResnetV1
from PIL import Image, ImageDrawfrom PIL import Image, ImageDraw
from facenet_pytorch import MTCNN# 初始化 MTCNN 模型
mtcnn = MTCNN(keep_all=True)# 加载图像
img = Image.open('222.jpg')  # 替换为你自己的图像路径# 检测人脸
boxes, probs = mtcnn.detect(img)# 在图像上绘制人脸边框
img_draw = img.copy()
draw = ImageDraw.Draw(img_draw)
for box in boxes:draw.rectangle(box.tolist(), outline=(255, 0, 0), width=6)# 显示图像
img_draw.show()from facenet_pytorch import InceptionResnetV1
# 初始化人脸识别模型
resnet = InceptionResnetV1(pretrained='vggface2').eval()# 从之前检测到的人脸中提取特征
img_cropped = mtcnn(img)  # 检测并裁剪出人脸print(type(img_cropped))
print(img_cropped.shape)
"""
输出
<class 'torch.Tensor'>
torch.Size([1, 3, 160, 160])
"""# 如果有多个检测结果,可以选择处理第一张人脸
if img_cropped is not None:# 提取特征向量face_embedding = resnet(img_cropped)print(face_embedding)

最终代码


def calculate_distance(embedding1, embedding2):"""计算两个人脸特征向量之间的欧氏距离"""return torch.dist(embedding1, embedding2).item()# 加载两张人脸的图像并提取特征
img1 = Image.open('11.jpg')  # 替换为第一张图像的路径
img2 = Image.open('222.jpg')  # 替换为第二张图像的路径# 检测并提取两张人脸的特征
face_embedding1 = resnet(mtcnn(img1))
face_embedding2 = resnet(mtcnn(img2))# 计算特征向量之间的距离
distance = calculate_distance(face_embedding1, face_embedding2)
print(f"Face distance: {distance}")# 设定阈值判断是否为同一个人
threshold = 0.6
if distance < threshold:print("Same person")
else:print("Different person")

遇到的问题

内网环境如何手动下载模型

执行这个代码的时候resnet = InceptionResnetV1(pretrained=‘vggface2’).eval()会去网上下载模型,如果网络不通会报错

urllib.error.URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试 失败。  

这个时候可以通过如下链接直接去下

https://github.com/timesler/facenet-pytorch/releases/tag/v2.2.9

如何确定模型放置的位置

  1. 打开这个文件D:\Python\Python37\Lib\site-packages\facenet_pytorch\models\inception_resnet_v1.py
  2. 查看这个方法load_weights,在此增加print代码,打印出本地的目录
cached_file = os.path.join(model_dir, os.path.basename(path))  
print(cached_file)  
  1. 新建一个python文件,并运行就会看到打印出的目录
import torch
import torchvision.transforms as transforms
from facenet_pytorch import MTCNN, InceptionResnetV1
from PIL import Image, ImageDraw
from PIL import Image, ImageDraw
from facenet_pytorch import MTCNN
from facenet_pytorch import InceptionResnetV1resnet = InceptionResnetV1(pretrained='vggface2').eval()
  1. 打印的目录如下,所以下周模型后,就在下面的位置放置就可以了
C:\Users\xxxxx/.cache\torch\checkpoints\20180402-114759-vggface2.pt 

其他

在jupyter上,执行修改的源代码D:\Python\Python37\Lib\site-packages\facenet_pytorch\models\inception_resnet_v1.py,比如加print语句后,运行看不到自己的打印消息。这种情况当前没有找到原因,我是通过新建py文件,然后运行,才能看到自己设定的打印消息的。

参考

https://blog.csdn.net/SWZ156/article/details/142987324?spm=1001.2014.3001.5506
https://github.com/timesler/facenet-pytorch

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

NVR小程序接入平台EasyNVR多品牌NVR管理工具/设备:RTMP协议摄像头的接入

随着安防技术的不断进步&#xff0c;越来越多的摄像头开始支持RTMP&#xff08;Real Time Messaging Protocol&#xff09;协议&#xff0c;这种协议使得视频流的实时传输和分发变得更加高效和便捷。NVR小程序接入平台EasyNVR作为一款功能强大的流媒体服务器&#xff0c;支持多…

硬件基础20 数模转换器D/A DAC

目录 一、DAC基本原理 二、倒T形电阻网络D/A转换器 三、权电流型D/A转换器 四、重要技术指标与参数 1、分辨率/位数 2、转换精度 &#xff08;1&#xff09;、比例系数误差 &#xff08;2&#xff09;、失调误差 3、转换速度 4、温度系数 五、DAC的应用 1、数字式可…

Memory consistency model 梳理目录

(图片来源&#xff1a;https://mp.weixin.qq.com/s/uz4fZgJSRNm-MIRdXgBMmw) 闲聊内存模型(Memory Model)https://blog.csdn.net/zhangshangjie1/article/details/143743250?sharetypeblogdetail&sharerId143743250&sharereferPC&sharesourcezhangshangjie1&…

WPF Prism框架

Prism 是一个开源框架&#xff0c;专门用于开发可扩展、模块化和可测试的企业级 XAML 应用程序&#xff0c;适用于 WPF&#xff08;Windows Presentation Foundation&#xff09;和 Xamarin Forms 等平台。它基于 MVVM&#xff08;Model-View-ViewModel&#xff09;设计模式&am…

智能零售柜商品识别

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

SSH远程连接工具详解

SSH远程连接工具指的是基于SSH&#xff08;Secure Shell&#xff09;协议进行远程连接和管理的工具。SSH是一种加密的网络协议&#xff0c;用于在不安全的网络环境中安全地传输数据&#xff0c;并实现远程访问和管理。以下是对远程SSH工具的详细解释&#xff1a; 一、SSH协议概…

卷积层的堆叠、Stacking堆叠法

3个3x3的卷积层串联的效果则相当于1个7x7的卷积层。那为什么选择使用3个3x3的卷积层而不是使用1个7x7的卷积层呢&#xff1f; &#xff08;1&#xff09;3个串联的3x3的卷积层&#xff0c;拥有比1个7x7的卷积层更少的参数&#xff0c;参数量是后者的&#xff08;3x3x3 ) /&…

【模块一】kubernetes容器编排进阶实战之containerd安装及nerdctl客户端⼯具

安装containerd apt/yum安装 #验证仓库版本 [rootk8s-node3 ~]#apt-cache madison containerd containerd | 1.7.12-0ubuntu2~22.04.1 | https://mirrors.aliyun.com/ubuntu jammy-updates/main amd64 Packages containerd | 1.6.12-0ubuntu1~22.04.3 | https://mirrors.aliy…

公司电脑加全屏水印怎么加(怎么打水印满屏)?4个方法精选!包教包会!

在企业管理中&#xff0c;为了保护公司机密信息的安全&#xff0c;给公司电脑添加全屏水印已成为一种常见的安全措施。 全屏水印不仅可以震慑潜在的窥探者&#xff0c;还能在信息不慎泄露时提供追溯线索。 那么&#xff0c;如何给公司电脑添加全屏水印呢&#xff1f; 以下是4…

public or static包下的 html 丢了(404)? 你快回来! 我一人承受不来

没想到吧&#xff0c;我把html还是放到了jar包中&#xff5e; 环境&#xff1a; Spring Boot 版本 2.XJava 版本 1.8.0 及以上 问题&#xff1a; public or static包下的 html 丢了&#xff08;404&#xff09;&#xff1f; 话不多说先上图 我的目录结构是这样的 src └─…

使用多种机器学习调参模型进行二分类建模的全流程,代做分析辅导

使用多种机器学习调参模型进行二分类建模的全流程教程 机器学习全流程分析各个模块用到的总的参数文件 0. 分析参数文件 参数文件名称&#xff1a;total_analysis_params_demo.xlsx &#xff0c;很多分析模块都是这个总的参数文件&#xff0c;我的这个总的参数文件如果有更新…

国家博物馆数据的爬取(包括xlsx文件、csv文件、图片爬取)

1、请求html数据 右键检查这里静态的数据被注释掉了,只能读取一条数据 import json import pandas as pd import requests from bs4 import BeautifulSoup import csv from urllib.parse import quote # 起始网址 header={User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; …

云技术基础介绍

云技术介绍 一、云技术历史 二、云服务 三、公有云服务商 四、云分类 1. 服务层级 IaaS (基础设施即服务) PaaS (平台即服务) SaaS (软件即服务) 2. 云部署模式的分类 公有云 (Public Cloud) 私有云 (Private Cloud) 混合云 (Hybrid Cloud) 社区云 (Community Clo…

常用的c++新特性-->day09

原子变量 C11提供了一个原子类型std::atomic&#xff0c;通过这个原子类型管理的内部变量就可以称之为原子变量&#xff0c;我们可以给原子类型指定bool、char、int、long、指针等类型作为模板参数&#xff08;不支持浮点类型和复合类型&#xff09;。 原子变量会把线程对数据的…

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了&#xff0c;我基本上都是通过docker去管理一些容器如&#xff1a;mysql、redis、mongoDB等之类的镜像&#xff0c;还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…

RAG与知识库搭建,手把手教你构建RAG系统

0. 简介 自从发现可以利用自有数据来增强大语言模型&#xff08;LLM&#xff09;的能力以来&#xff0c;如何将 LLM 的通用知识与个人数据有效结合一直是热门话题。关于使用微调&#xff08;fine-tuning&#xff09;还是检索增强生成&#xff08;RAG&#xff09;来实现这一目标…

【数据结构】10.线索二叉树

一、线索二叉树的产生 采用先序、中序、后序三种方法遍历二叉树后都可以得到一个线性序列&#xff0c;序列上的每一个结点&#xff08;除了第一个和最后一个&#xff09;都有一个前驱和一个后继&#xff0c;但是&#xff0c;这个线性序列只是逻辑的概念&#xff0c;不是物理结…

java实现中小企业的erp系统

项目介绍 技术架构: springboot3jdk17mybatis-plusmysql8kotlinvueuniappelementui等

企业软文营销如何以差异化卖点助力品牌市场曝光?媒介盒子分享

对于市场竞争日益激烈的现下&#xff0c;企业想要获取优势&#xff0c;从市场中脱颖而出并能吸引到更多的消费者&#xff0c;学会创建或找寻到自身的差异点是至关重要的。常言讲“物以稀为贵”&#xff0c;对于消费者而言&#xff0c;品类相同中的品牌需要去以“不同”来获取用…

探索Pillow库:Python图像处理的瑞士军刀

文章目录 **探索Pillow库&#xff1a;Python图像处理的瑞士军刀**1. 背景&#xff1a;为何选择Pillow&#xff1f;2. Pillow是什么&#xff1f;3. 如何安装Pillow&#xff1f;4. 五个简单的库函数使用方法4.1 打开图像4.2 显示图像4.3 转换图像格式4.4 调整图像大小4.5 旋转图像…