【AI】使用LoFTR进行图像匹配测试Demo

news2025/5/26 12:09:36

LoFTR图像匹配的源码解析我们在上篇文章中已经写了,对于怎么试用一下,我这边再啰嗦一下。

0.环境搭建

详细的搭建教程请点击链接查看,这里只对需要特殊注意的地方做阐述
1.创建的Python环境采用python3.8的环境,因为文章发布较早,使用3.10版本测试的时候发现了依赖版本不兼容的问题
2.torch试用whl文件的安装方式比较稳妥,然后在源码requirements.txt中将torch的依赖注释掉,在安装完torch之后使用pip install -r requirements.txt进行安装依赖。

1.运行文件准备

1.下载预训练权重文件,由于我这边使用的是外景图片,所以下载了outdoor的模型文件。
官方提供了下载地址:https://drive.google.com/drive/folders/1DOcOPZb3-5cWxLqn256AhwUVjBPifhuf,需要一点魔法
2.图片文件随便两张带有重叠景象的图片,我这边随便用了两张
3.注意修改demo文件中的权重路径和图片路径

2.运行demo文件

这里我是在模型源码的demo文件夹下面进行的测试,如果在其他路径下需要注意引入路径问题。

import torch
import cv2
import numpy as np
import matplotlib.cm as cm

from src.utils.plotting import make_matching_figure
from src.loftr import LoFTR, default_cfg


if __name__ == '__main__':
    # 根据图片拍摄场景和下载的预训练模型进行选择 可选:indoor、outdoor
    image_type = 'outdoor'
	# 根据个人图片进行修改
    img0_pth = "images/12003890_f6c899bec0_o.jpg"
    img1_pth = "images/13866250_56e0509621_o.jpg"
    image_pair = [img0_pth, img1_pth]

    # The default config uses dual-softmax.
    # The outdoor and indoor models share the same config.
    # You can change the default values like thr and coarse_match_type.
    matcher = LoFTR(config=default_cfg)
    # load中修改预训练模型地址
    if image_type == 'indoor':
        matcher.load_state_dict(torch.load("indoor_ds.ckpt")['state_dict'])
    elif image_type == 'outdoor':
        matcher.load_state_dict(torch.load("outdoor_ds.ckpt")['state_dict'])
    else:
        raise ValueError("Wrong image_type is given.")
    matcher = matcher.eval().cuda()

    # Rerun this cell (and below) if a new image pair is uploaded.
    img0_raw = cv2.imread(image_pair[0], cv2.IMREAD_GRAYSCALE)
    img1_raw = cv2.imread(image_pair[1], cv2.IMREAD_GRAYSCALE)
    img0_raw = cv2.resize(img0_raw, (640, 480))
    img1_raw = cv2.resize(img1_raw, (640, 480))

    img0 = torch.from_numpy(img0_raw)[None][None].cuda() / 255.
    img1 = torch.from_numpy(img1_raw)[None][None].cuda() / 255.
    batch = {'image0': img0, 'image1': img1}

    # Inference with LoFTR and get prediction
    with torch.no_grad():
        matcher(batch)
        mkpts0 = batch['mkpts0_f'].cpu().numpy()
        mkpts1 = batch['mkpts1_f'].cpu().numpy()
        mconf = batch['mconf'].cpu().numpy()

    # Draw
    color = cm.jet(mconf, alpha=0.7)
    text = [
        'LoFTR',
        'Matches: {}'.format(len(mkpts0)),
    ]
    fig = make_matching_figure(img0_raw, img1_raw, mkpts0, mkpts1, color, mkpts0, mkpts1, text)

    # A high-res PDF will also be downloaded automatically.
    make_matching_figure(img0_raw, img1_raw, mkpts0, mkpts1, color, mkpts0, mkpts1, text, path="LoFTR-colab-demo.pdf")


不论是在pycharm中运行,还是使用jupyter进行测试,都可以使用上述代码。

代码会将匹配的图片存在LoFTR-colab-demo.pdf文件中,这个文件地址可以自行修改。

模型结果展示:

在这里插入图片描述

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

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

相关文章

CMake入门教程【核心篇】添加库(add_library)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1. 基本用法2.STATIC…

DevOps(3)

目录 11.描述root账户? 12.如何在发出命令时打开命令提示符? 14.Linux系统下交换分区的典型大小是多少? 15.什么是符号链接? 11.描述root账户? root账户就像一个系统管理员账户,允许你完全控制系统。 …

[DevOps-03] Build阶段-Maven安装配置

一、简要说明 下载安装JDK8下载安装Maven二、复制准备一台虚拟机 1、VM虚拟复制克隆一台机器 2、启动刚克隆的虚拟机,修改IP地址 刚刚克隆的虚拟机 ,IP地址和原虚拟的IP地址是一样的,需要修改克隆后的虚拟机IP地址,以免IP地址冲突。 # 编辑修改IP地址 $ vi /etc/sysconfig…

6. Mybatis 缓存

6. Mybatis 缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率MyBatis系统中默认定义了两级缓存 一级缓存二级缓存 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存&…

OpenGL如何基于glfw库 进行 点线面 已解决

GLFW是现在较流行、使用广泛的OpenGL的界面库,而glut库已经比较老了。GLEW是和管理OpenGL函数指针有关的库,因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置…

国内CRM系统哪个品牌比较好?

国内CRM系统哪个品牌比较好? 作为简道云第一个以“独立套件”开发出来的业务系统,对于简道云CRM我从来都是“昂首挺胸”的骄傲和自豪的! 下面就从功能、价格、自定义3大块儿来介绍下简道云CRM管理系统! CRM管理系统,即开即用​…

一加 Buds 3正式发布:普及旗舰音质 一加用户首选

1月4日,一加新品发布会正式推出旗下新款耳机一加 Buds 3。延续一加经典美学,秉承音质完美主义追求,一加 Buds 3全面普及一加旗舰耳机体验,其搭载旗舰同款“超清晰同轴双单元”,配备49dB 4000Hz超宽频主动降噪&#xff…

进程和计划任务

一、程序进程 1.1 什么是程序 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具 用于描述进程要完成的功能,是控制进程执行的指令集 二、进程 2.1 什么是进程? 记载到内存中运行&#xff…

Visual Saliency Transformer (VST) 源代码实现

1.论文信息 1.1论文标题:Visual Saliency Transformer (VST) Nian Liu, Ni Zhang, Kaiyuan Wan, Junwei Han, and Ling Shao 1.2 Github源代码地址:https://github.com/nnizhang/VST 1.3论文下载链接:http://openaccess.thecvf.com/conte…

vue+elementUI+XLSX.utils.sheet_to_json实现复杂表头的导入功能

导入表excel 问题 XLSX.utils.sheet_to_json方法不带参数的调用,无法解析我们的复杂表头的excel表格,因此,我们需要通过传参数,来指定表头的真实起始位置。 关键代码分析:XLSX.utils.sheet_to_json XLSX.utils.shee…

Linux驱动开发笔记(六):用户层与内核层进行数据传递的原理和Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135384355 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙

【简介】随着苹果电脑的普及,很多管理员都会通过苹果电脑对飞塔防火墙进行管理。当防火墙需要命令状态下刷新固件时,在macOS下用命令刷新固件,将会是一个小小的挑战。 首先是硬件的连接,USB配置线的USB一头,接入MAC的U…

【springboot+mybatis实现CURD模版项目-Jesus】

springbootmybatis实现CURD模版项目-Jesus STEP 1 项目创建 1.1 新建Spring Initializr项目   1.2 选择需要的依赖 springboot有2.7.2直接选272STEP 2 配置更改 2.1更改maven配置   2.2 检查项目配置jdk、sdk、jre版本一致   2.3 检查pom文件,Maven-Reload pr…

线程池的shutdown和shutdownnow的区别

1、先说结论 shutdown ---- 不再接收新的任务,但是已经在执行中和队列中的任务会等待执行完成, 对workers中空闲的线程执行interrupt shutdownnow ---- 不再接收新的任务,清空队列的任务,对works中所有的线程执行interrupt&…

Vue3 自定义Hooks大全:一站式解决你的疑惑!

前言 不知道喜欢 vue3 的小伙伴和我是不是一样,刚上手vue3 的时候 对自定义hooks 一脸懵逼,在一些视频网站学习的时候老师讲解到自定义hooks 最喜欢用 加减乘除来描述 自定义hooks 是咋用的,可能是我理解能力比较差吧,我看了这个…

C 练习实例19

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如61+2+3.编程找出1000以内的所有完数。 程序分析:请参照:C 练习实例14。 步骤分析: 写一个函数判断是否是完数 找出…

2.4G无线收发芯片XL2407P产品特征介绍,专为多组PWM的应用设计。

XL2407P 芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段,集成微控制器的的 SOC 无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK的通信模式。发射输出功率、工作频道以及通信数据率均可…

SpingBoot的项目实战--模拟电商【5.沙箱支付】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. 沙箱支付是什么 二.Sp…

vscode安装Prettier插件,对vue3项目进行格式化

之前vscode因为安装了Vue Language Features (Volar)插件,导致Prettier格式化失效,今天有空,又重新设置了一下 1. 插件要先安装上 2. 打开settings.json {"editor.defaultFormatter": "esbenp.prettier-vscode","…

Springcloud 微服务实战笔记 Feign

优点 基于Netflix Feign实现&#xff0c;整合了Spring cloud Ribbon 和 Spring cloud Hystrix 提供了声明式的WEB服务客户端定义方式 扩展了Spring MVC的注解支持 使用 1、pom导入包&#xff1a; <dependency><groupId>org.springframework.cloud</groupId…