【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.rhkb.cn/news/472958.html

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

相关文章

rk3399开发环境使用Android 10初体验蓝牙功能

版本 日期 作者 变更表述 1.0 2024/11/10 于忠军 文档创建 零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0…

Redis实战案例(黑马点评)

List item Redis实战案例&#xff08;黑马点评&#xff09; 一、短信登录 tomcat的运行原理&#xff1a; 当用户发起请求时&#xff0c;会访问tomcat注册的端口&#xff0c;任何程序想要运行&#xff0c;都需要有一个线程对当前端口号进行监听&#xff0c;当用户和tomcat连…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

MySQL数据库:SQL语言入门 【2】(学习笔记)

目录 2&#xff0c;DML —— 数据操作语言&#xff08;Data Manipulation Language&#xff09; &#xff08;1&#xff09;insert 增加 数据 &#xff08;2&#xff09;delete 删除 数据 truncate 删除表和数据&#xff0c;再创建一个新表 &#xff08;3&#xf…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network&#xff08;RNN&#xff0c;循环神经网络&#xff09;1.1 词汇vector的编码方式1.2 RNN的变形…

购物车demo全代码-对接支付宝沙箱环境

创建项目 vue create alipay-demoAlipayDemo.vue <template><div class"cart-container"><h2>商品列表</h2><table class"product-table"><tr><th>商品</th><th>价格</th><th>商品描…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超全超详细使用SAM进行高效图像分割标注(GPU加速推理)

一、前言 &#x1f449; 在计算机视觉任务中&#xff0c;图像分割 是重要的基础工作&#xff0c;但人工标注往往耗时耗力。Meta推出的 SAM&#xff08;Segment Anything Model&#xff09;&#xff0c;大幅提升了分割效率和精度&#xff0c;让标注工作更加轻松。本篇博客将详细…

JavaEE 重要的API阅读

JavaEE API阅读 目的是为了应对学校考试&#xff0c;主要关注的是类的继承关系、抛出错误的类型、包名、包结构等等知识。此帖用于记录。 PageContext抽象类 包名及继承关系 继承自JspContext类。PageContext 实例提供对与某个 JSP 页⾯关联的所有名称空间的访问&#xff0…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

Python学习笔记(2)正则表达式

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中&#xff0c;使用 re 模块提供的函数来处理正则表达式&#xff0c;允许你在字符串中进行模式匹配、搜索和替换操作。 1 正则表达式 正则表达式(Regular Expressi…

整数唯一分解定理

整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。 一、整数唯一分解定理 整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是数论中的一个重…

小版本大不同 | Navicat 17 新增 TiDB 功能

近日&#xff0c;Navicat 17 迎来了小版本更新。此次版本新增了对 PingCap 公司的 TiDB 开源分布式关系型数据库的支持&#xff0c;进一步拓展了 Navicat 的兼容边界。即日起&#xff0c;Navicat 17 所有用户可免费升级至最新版本&#xff0c;通过 Navicat 工具实现 TiDB 数据库…

【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)

#IEEE出版|EI稳定检索#主讲嘉宾阵容强大&#xff01;多位外籍专家出席报告 2024健康大数据与智能医疗国际会议&#xff08;ICHIH 2024&#xff09;2024 International Conference on Health Big Data and Intelligent Healthcare 会议简介 2024健康大数据与智能医疗国际会议…

ADS项目笔记 1. 低噪声放大器LNA天线一体化设计

在传统射频结构的设计中&#xff0c;天线模块和有源电路部分相互分离&#xff0c;两者之间通过 50 Ω 传输线级联&#xff0c;这种设计需要在有源电路和天线之间建立无源网络&#xff0c;包括天线模块的输入匹配网络以及有源电路的匹配网络。这些无源网络不仅增加了系统的插入损…

客厅打苍蝇fly测试总结1116

项目介绍:本项目是关系食品安全重大项目&#xff0c;针对屋子里有苍蝇的问题&#xff0c;通过分析苍蝇特性及对场景分类&#xff0c;设计测试用例16条&#xff0c;有效击杀苍蝇17头&#xff0c;房间里面已经看不到苍蝇的活动痕迹。比较传统蚊拍击打容易在物体表面形成难看且赃的…

物理hack

声明 声明 文章只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致力于网络安全领域&#xff0c;目前作为一名学习者&#xff0c;很荣…

go 集成swagger 在线接口文档

安装swaggo go install github.com/swaggo/swag/cmd/swaglatest 编写swag import ("github.com/gin-gonic/gin""goWeb/internal/service""goWeb/model/response" )// UserRouter 路由 func UserRouter(ctx *gin.RouterGroup) {ctx.GET("/…