MiDaS、ZoeDepth、Depth-Anything ai算法深度图估计

news2024/12/22 22:15:38

1、MiDaS

参考:
https://github.com/isl-org/MiDaS
https://pytorch.org/hub/intelisl_midas_v2/
https://colab.research.google.com/github/pytorch/pytorch.github.io/blob/master/assets/hub/intelisl_midas_v2.ipynb#scrollTo=5A32CL3tocrZ

在这里插入图片描述

代码

import cv2
import torch
import urllib.request

import matplotlib.pyplot as plt

url, filename = ("https://github.com/pytorch/hub/raw/master/images/dog.jpg", "dog.jpg")
urllib.request.urlretrieve(url, filename)


model_type = "DPT_Large"     # MiDaS v3 - Large     (highest accuracy, slowest inference speed)
#model_type = "DPT_Hybrid"   # MiDaS v3 - Hybrid    (medium accuracy, medium inference speed)
#model_type = "MiDaS_small"  # MiDaS v2.1 - Small   (lowest accuracy, highest inference speed)

midas = torch.hub.load("intel-isl/MiDaS", model_type)

在这里插入图片描述

device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
midas.to(device)
midas.eval()

midas_transforms = torch.hub.load("intel-isl/MiDaS", "transforms")

if model_type == "DPT_Large" or model_type == "DPT_Hybrid":
    transform = midas_transforms.dpt_transform
else:
    transform = midas_transforms.small_transform

img = cv2.imread(filename)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

input_batch = transform(img).to(device)

with torch.no_grad():
    prediction = midas(input_batch)

    prediction = torch.nn.functional.interpolate(
        prediction.unsqueeze(1),
        size=img.shape[:2],
        mode="bicubic",
        align_corners=False,
    ).squeeze()

output = prediction.cpu().numpy()

plt.imshow(output)
# plt.show()

在这里插入图片描述

在这里插入图片描述

视频

import cv2
import torch
import numpy as np
import torch.nn.functional as F

# 假设你已经有一个训练好的模型 'midas'
# midas = torch.load('path_to_your_model')
# midas.eval()

# 加载视频
video_path = '20240807_024802.mp4'
cap = cv2.VideoCapture(video_path)

# 获取视频的宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 获取视频的帧率
fps = cap.get(cv2.CAP_PROP_FPS)

# 创建 VideoWriter 对象
output_path = 'output_video2.mp4'
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height), isColor=True)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 将帧转换为模型输入格式
    img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    input_batch = transform(img).to(device)

    with torch.no_grad():
        prediction = midas(input_batch)

        prediction = torch.nn.functional.interpolate(
            prediction.unsqueeze(1),
            size=frame.shape[:2],
            mode="bicubic",
            align_corners=False,
        ).squeeze()

    output = prediction.cpu().numpy()

    # 可视化结果
    output = (output - output.min()) / (output.max() - output.min())  # 归一化到 [0, 1]
    # output = (output * 255).astype(np.uint8)
    # output = cv2.cvtColor(output, cv2.COLOR_GRAY2BGR)

    output = cv2.applyColorMap((output * 255).astype(np.uint8), cv2.COLORMAP_JET)

    # 写入视频
    out.write(output)



cap.release()
out.release()
cv2.destroyAllWindows()

在这里插入图片描述

2、ZoeDepth

https://huggingface.co/spaces/shariqfarooq/ZoeDepth

https://github.com/isl-org/ZoeDepth
https://colab.research.google.com/github/isl-org/ZoeDepth/blob/main/notebooks/ZoeDepth_quickstart.ipynb#scrollTo=OJ9bY7rrVuAq

报错:ZoeDepth: Unexpected key(s) in state_dict: “core.core.pretrained.model.blocks.0.attn.relative_position_index”
解决: pip install timm==0.6.7

代码:
git clone https://github.com/isl-org/ZoeDepth.git
cd ZoeDepth

import torch
from zoedepth.utils.misc import get_image_from_url, colorize
from PIL import Image
import matplotlib.pyplot as plt


zoe = torch.hub.load(".", "ZoeD_N", source="local", pretrained=True, version='ZoeD_N-Nov13-2023')
zoe = zoe.to('cuda')

#@title Predicting depth from a url image
img_url = "http://static1.squarespace.com/static/6213c340453c3f502425776e/62f2452bc121595f4d87c713/62f3c63c5eec2b12a333f851/1661442296756/Screenshot+2022-08-10+at+15.55.27.png?format=1500w" #@param {type:"string"}
img = get_image_from_url(img_url)
depth = zoe.infer_pil(img)


colored_depth = colorize(depth)
fig, axs = plt.subplots(1,2, figsize=(15,7))
for ax, im, title in zip(axs, [img, colored_depth], ['Input', 'Predicted Depth']):
  ax.imshow(im)
  ax.axis('off')
  ax.set_title(title)

在这里插入图片描述
本地图片

img = Image.open("/content/loong.png").convert("RGB")  # load
# depth_numpy = zoe.infer_pil(image)  # as numpy

depth = zoe.infer_pil(img)


colored_depth = colorize(depth)
fig, axs = plt.subplots(1,2, figsize=(15,7))
for ax, im, title in zip(axs, [img, colored_depth], ['Input', 'Predicted Depth']):
  ax.imshow(im)
  ax.axis('off')
  ax.set_title(title)

在这里插入图片描述
看着原图与深度图尺寸一致
在这里插入图片描述

本地运行完整代码:

import torch

from zoedepth.utils.misc import get_image_from_url, colorize
from PIL import Image
import matplotlib.pyplot as plt

# Zoe_N
model_zoe_n = torch.hub.load(r".", "ZoeD_N", source="local", pretrained=True)

img = Image.open(r"C:\Users\loong\Downloads\loong.png").convert("RGB")  # load
# depth_numpy = zoe.infer_pil(image)  # as numpy

depth = model_zoe_n.infer_pil(img)

print(depth.shape,depth)

colored_depth = colorize(depth)
fig, axs = plt.subplots(1,2, figsize=(15,7))
for ax, im, title in zip(axs, [img, colored_depth], ['Input', 'Predicted Depth']):
  ax.imshow(im)
  ax.axis('off')
  ax.set_title(title)

# Save the figure
output_filename = "output_image.png"
plt.savefig(output_filename)

# Show the figure
plt.show()

彩色

import numpy as np

img = Image.open("/content/loong.png").convert("RGB")  # load

depth = zoe.infer_pil(img)


# 归一化深度图
depth_normalized = (depth - depth.min()) / (depth.max() - depth.min())
# 反转颜色映射
depth_normalized = 1 - depth_normalized
# 应用颜色映射
colored_depth = plt.get_cmap('jet')(depth_normalized)
# 将 RGBA 转换为 RGB
colored_depth = (colored_depth[:, :, :3] * 255).astype(np.uint8)
    
fig, axs = plt.subplots(1, 2, figsize=(15, 7))
for ax, im, title in zip(axs, [img, colored_depth], ['Input', 'Predicted Depth']):
    ax.imshow(im)
    ax.axis('off')
    ax.set_title(title)

plt.show()

在这里插入图片描述

transformers加载使用
https://huggingface.co/docs/transformers/main/en/model_doc/zoedepth

from transformers import pipeline
from PIL import Image
import requests

# url = "http://images.cocodataset.org/val2017/000000039769.jpg"
# image = Image.open(requests.get(url, stream=True).raw)


image = Image.open(r"C:\Users\loong\Downloads\right1.png")

pipe = pipeline(task="depth-estimation", model="Intel/zoedepth-nyu-kitti")
result = pipe(image)
depth = result["depth"]

在这里插入图片描述
在这里插入图片描述

3、Depth-Anything

https://github.com/DepthAnything/Depth-Anything-V2

from transformers import pipeline
from PIL import Image

pipe = pipeline(task="depth-estimation", model="depth-anything/Depth-Anything-V2-Small-hf")
image = Image.open(r"C:\Users\loong\Downloads\right1.png")
result = pipe(image)
depth = result["depth"]

在这里插入图片描述

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

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

相关文章

如何使用midjourney?MidJourney订阅计划及国内订阅教程

国内如何订阅MidJourney 第三方代理 参考: zhangfeidezhu.com/?p474 使用信用卡订阅教程 办理国外信用卡: 这个各自找国外的银行办理就好了。 登录MidJourney: 登录MidJourney网站,进入订阅中心。如果是在Discord频道&#x…

idea启动报错Improperly specified VM option.

我本来是想解决idea启动占内存的问题,在网上找了个修改启动参数,这么改的 因为格式不正确,idea启动报错: Improperly specified VM option. To fix the problem, edit your JVM optionsand remove the options that are obsolete…

19 OptionMenu 组件

OptionMenu 组件使用指南 Tkinter 的 OptionMenu 组件是一个下拉选择框,允许用户从一组预定义的选项中选择一个。它通常用于提供用户一个有限的选项集合来选择。以下是对 OptionMenu 组件的详细说明和一个使用案例。 OptionMenu 组件属性 variable: 与 OptionMen…

一个开源可视化网页编辑器,为开发者提供一个快速构建 Web 应用的平台

大家好,今天给大家分享的是一款功能强大、灵活且开源的 可视化网页编辑器框架GrapesJS。它允许用户通过拖拽、点击等直观的方式,无需编写代码即可创建自定义的网页、邮件模板、仪表盘等 项目介绍 GrapesJS 是一个免费的开源 Web 构建器框架,…

常用FTP等工具配置

一、WINSCP 常用配置 1、配置putty:选项-应用程序-路径,记住会话密码传给PUTTY. 2、配置传输777权限:选项->传输->编辑->设置0777权限。 二、PUTTY 常用配置 1、putty 日志路径配置。logging-logfilename: D:/puttylog/&H-&a…

统一多场景自动编译加速——支持动态shape场景,一套架构搞定训推需求

为了让飞桨开发者们掌握第一手技术动态、让企业落地更加高效,飞桨官方在7月至10月特设《飞桨框架3.0全面解析》系列技术稿件及直播课程。技术解析加代码实战,带大家掌握包括核心框架、分布式计算、产业级大模型套件及低代码工具、前沿科学计算技术案例等…

【TCP】确认应答、超时重传机制和TCP报头

TCP 相关机制 TCP 基本特点:有连接、可靠传输、面向字节流、全双工 有连接、面向字节流和全双工都能在前面的代码中体现有连接:必须要先调用 accept 建立联系才能处理面向字节流:会拿到 clientSocket 对象的 InputStream 和 OutputStream&a…

【hot100篇-python刷题记录】【数组中的第K个最大元素】

R5-堆篇 笑死,摆烂式 class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:nums.sort()return nums[-k] 堆排序 堆排序(英语:Heapsort)是指利用堆(heap)这种数据结构所设计的一…

C++面试基础系列-double_colon(::)

系列文章目录 文章目录 系列文章目录C面试基础系列-double_colon(::)Overview1.double_colon(::)关键点2.double_colon(::)使用示例2.1.访问类成员2.2.静态成员访问2.3.命名空间中的实体2.4.全局变量和函数2.5.友元类2.6.类型转换2.7.枚举类成员访问2.8.模板参数 关于作者 C面试…

简述灰点工业相机的相关知识

灰点相机是一种特殊的相机类型,它的名称来源于其拍摄时可能产生的灰点效果,但并非所有灰点相机都会直接产生这种效果,这一命名更多是基于其品牌或某种特定的视觉特性。以下是对灰点相机的解析: 一、基本定义 类型:灰…

【Redis】Redis典型应用-缓存(cache)

目录 什么是缓存 使用Redis作为缓存 缓存的更新策略 缓存预热(cache preheating) 缓存穿透(cache penetration) 缓存雪崩(cache avalanche) 缓存击穿(cache breakdown) 什么是…

最小路径和[中等]

优质博文:IT-BLOG-CN 一、题目 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[…

四十一、【人工智能】【机器学习】- Bayesian Logistic Regression算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

分布式缓存———数据一致性问题

分布式基础理论 CAP理论 与 BASE理论-CSDN博客 分布式系统会的三座大山:NPC。 N:Network Delay,网络延迟P:Process Pause,进程暂停(GC)C:Clock Drift,时钟漂移 在当前…

汇昌联信科技做拼多多电商有哪些策略?

在当今竞争激烈的电商平台上,汇昌联信科技以其独到的策略成功立足拼多多。他们不仅凭借对市场的深刻理解,还通过一系列创新举措,实现了品牌的快速成长和市场份额的不断扩大。接下来,我们将深入探讨汇昌联信科技在拼多多平台上所采…

基于Python的火车票售票系统/基于django的火车购票系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&…

三节点 DMHS 级联同步搭建

一、环境配置 完成三节点数据库部署并初始化,配置参数如下: 节点 192.168.2.132 192.168.2.133 192.168.2.130 数据库版本 DM8 DM8 DM8 实例名 DM1 DM2 DM3 端口号 5236 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmd…

【Hot100】LeetCode—19. 删除链表的倒数第 N 个结点

目录 1- 思路双指针 2- 实现⭐19. 删除链表的倒数第 N 个结点——题解思路 3- ACM 实现 原题连接:19. 删除链表的倒数第 N 个结点 1- 思路 双指针 定义 dummyHead 处理头结点情况slow 指针:初始化为 dummyHead 定位到被移除元素的前一个fast 指针&…

海外短剧系统开源代码+快速搭建部署指南

前言: 海外短剧系统是一个专门为海外观众设计和运营的内容平台。这个系统不仅包含了丰富的短剧资源,还提供了全面的技术支持和运营服务,以确保短剧内容能够顺利地面向全球观众传播。 一、市场背景 由于国内短剧市场的急剧增长,…