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

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

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

背景

近期看了一博客,想简单实现一下人脸检测和识别,使用了下面的代码,环境是
python 3.7.7
1.13.1+cpu

过程代码

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/14659.html

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

相关文章

opencv(c++)----图像的读取以及显示

opencv(c)----图像的读取以及显示 imread: 作用&#xff1a;读取图像文件并将其加载到 Mat 对象中。参数&#xff1a; 第一个参数是文件路径&#xff0c;可以是相对路径或绝对路径。第二个参数是读取标志&#xff0c;比如 IMREAD_COLOR 表示以彩色模式读取图像。 返回值&#x…

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

【计算机网络】【传输层】【习题】

计算机网络-传输层-习题 文章目录 10. 图 5-29 给出了 TCP 连接建立的三次握手与连接释放的四次握手过程。根据 TCP 协议的工作原理&#xff0c;请填写图 5-29 中 ①~⑧ 位置的序号值。答案技巧 注&#xff1a;本文基于《计算机网络》&#xff08;第5版&#xff09;吴功宜、吴英…

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路&#xff1a; 这是一个二叉树的布尔评估问题。树的每个节点包含一个值&#xff0c;其中叶子节点值为 0 或 1&#xff0…

2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 A题 量子计算机在信用评分卡组合优化中的应用 原题再现&#xff1a; 在银行信用卡或相关的贷款等业务中&#xff0c;对客户授信之前&#xff0c;需要先通过各种审核规则对客户的信用等级进行评定&#xff0c;通过评定后的客户才能…

嵌入式开发套件(golang版本)

1. watchdog&#xff08;软件看门狗&#xff1a;守护升级&#xff09; 2. gate&#xff08;主程序&#xff09; 3. web&#xff08;api版本 升级包&#xff09; OTA 升级流程 watchdog启动后检查守护进程gate是否正在运行&#xff0c;如果没有&#xff0c;api对比版本号&am…

解压专家 2.4.12| 多功能解压缩工具,支持密码共享、音乐播放和歌词匹配。

解压专家是一款功能强大的解压缩软件&#xff0c;提供了类似于WIFI万能钥匙的密码分享功能&#xff0c;帮助用户快速获取共享的解压密码。作为专业的解压缩工具&#xff0c;它支持多种常见和不常见的压缩包格式&#xff0c;如ZIP、RAR、7z、TAR.GZ和ISO等&#xff0c;并且还支持…

并发编程(10)——内存模型和原子操作

文章目录 十、day101. 内存模型基础1.1 对象和内存区域1.2 改动序列 2. 原子操作及其类型2.1 原子操作2.2 原子类型2.3 内存次序2.4 std::atomic_flag2.4.1 自旋锁 2.5 std::atomic&#xff1c;bool&#xff1e;2.6 std::atomic<T*>2.7 标准整数原子类型2.8 std::atomic&…

【Flink】-- flink新版本发布:v2.0-preview1

目录 1、简介 2、非兼容变更 2.1、API 2.2、连接器适配计划 2.3、配置 2.4、其它 3、重要新特性 3.1、存算分离状态管理 3.2、物化表 3.3、批作业的自适应执行 3.4、流式湖仓 4、附加 4.1、非兼容性的 api 程序变更 4.1.2、Removed Classes # 4.1.3、Modified Cl…

ffmpeg+D3D实现的MFC音视频播放器,支持录像、截图、音视频播放、码流信息显示等功能

一、简介 本播放器是在vs2019下开发&#xff0c;通过ffmpeg实现拉流解码功能&#xff0c;通过D3D实现视频的渲染功能。截图功能采用libjpeg实现&#xff0c;可以截取jpg图片&#xff0c;图片的默认保存路径是在C:\MYRecPath中。录像功能采用封装好的类Mp4Record实现&#xff0c…

webpack指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack-指南 概念 中文&#xff1a; webpack | webpack中文文档 | webpack中文网 英文&…

把越南语翻译成中文一般用什么翻译工具?《越南语翻译通》App或许能满足你的技术痛点需求!

在多语言交流日益频繁的今天&#xff0c;掌握越南语对于商务、旅游或学术交流都是一项重要技能。《越南语翻译通》App应运而生&#xff0c;旨在通过技术手段简化越南语学习和翻译过程&#xff0c;满足用户在不同场景下的需求。 核心技术 《越南语翻译通》App采用了先进的自然语…

Android Framework AMS(16)进程管理

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读AMS 进程方面的知识。关注思维导图中左上侧部分即可。 我们本章节主要是对Android进程管理相关知识有一个基本的了解。先来了解下L…

Rust Struct 属性初始化

结构体是用户定义的数据类型&#xff0c;其中包含定义特定实例的字段。结构有助于实现更容易理解的抽象概念。本文介绍几种初始化结构体对象的方法&#xff0c;包括常规方法、Default特征、第三方包实现以及构建器模式。 Struct声明与初始化 struct Employee {id: i32,name: …

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址&#xff1a;utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

数据结构:队列

目录 概念与结构底层结构的选择队列的实现队列头文件&#xff08;queue.h&#xff09;队列初始化队列的销毁入队列检查队列是否为空出队列查询队列第一个数据查询队列末尾数据查询队列有效数据个数代码试运行 概念与结构 概念&#xff1a;只允许在⼀端进行插⼊数据操作&#x…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…

i春秋-SQLi(无逗号sql注入,-- -注释)

练习平台地址 竞赛中心 题目描述 后台有获取flag的线索应该是让我们检查源码找到后台 题目内容 空白一片 F12检查源码 发现login.php 访问login.php?id1 F12没有提示尝试sql注入 常规sql注入 //联合注入得到表格列数 1 order by 3 # 1 union select 1,2,3 #&#xff08…

基于Spring Boot的电子商务平台架构

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架&#xff0c;并且可以不需要配置任何的XML文件就可以&#xff0c;因为Spring Boot里面自带了很多接口&#xff0c;只需要配置不同的接口就会自动的应用并且识别需要的依赖&#xff0c;在配置方面非…