Spaces:
Running
on
Zero
Running
on
Zero
# MIT License | |
# Copyright (c) 2022 Intelligent Systems Lab Org | |
# Permission is hereby granted, free of charge, to any person obtaining a copy | |
# of this software and associated documentation files (the "Software"), to deal | |
# in the Software without restriction, including without limitation the rights | |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
# copies of the Software, and to permit persons to whom the Software is | |
# furnished to do so, subject to the following conditions: | |
# The above copyright notice and this permission notice shall be included in all | |
# copies or substantial portions of the Software. | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
# SOFTWARE. | |
# File author: Shariq Farooq Bhat | |
import numpy as np | |
from torchvision.transforms import ToTensor | |
from PIL import Image | |
from zoedepth.utils.misc import get_image_from_url, colorize | |
import torch | |
from zoedepth.models.builder import build_model | |
from zoedepth.utils.config import get_config | |
from pprint import pprint | |
torch.hub.help("intel-isl/MiDaS", "DPT_BEiT_L_384", force_reload=True) | |
DEVICE = "cuda" if torch.cuda.is_available() else "cpu" | |
if DEVICE == "cpu": | |
print("WARNING: Running on CPU. This will be slow. Check your CUDA installation.") | |
print("*" * 20 + " Testing zoedepth " + "*" * 20) | |
conf = get_config("zoedepth", "infer") | |
print("Config:") | |
pprint(conf) | |
model = build_model(conf).to(DEVICE) | |
model.eval() | |
x = torch.rand(1, 3, 384, 512).to(DEVICE) | |
print("-"*20 + "Testing on a random input" + "-"*20) | |
with torch.no_grad(): | |
out = model(x) | |
if isinstance(out, dict): | |
# print shapes of all outputs | |
for k, v in out.items(): | |
if v is not None: | |
print(k, v.shape) | |
else: | |
print([o.shape for o in out if o is not None]) | |
print("\n\n") | |
print("-"*20 + " Testing on an indoor scene from url " + "-"*20) | |
# Test img | |
url = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS4W8H_Nxk_rs3Vje_zj6mglPOH7bnPhQitBH8WkqjlqQVotdtDEG37BsnGofME3_u6lDk&usqp=CAU" | |
img = get_image_from_url(url) | |
orig_size = img.size | |
X = ToTensor()(img) | |
X = X.unsqueeze(0).to(DEVICE) | |
print("X.shape", X.shape) | |
print("predicting") | |
with torch.no_grad(): | |
out = model.infer(X).cpu() | |
# or just, | |
# out = model.infer_pil(img) | |
print("output.shape", out.shape) | |
pred = Image.fromarray(colorize(out)) | |
# Stack img and pred side by side for comparison and save | |
pred = pred.resize(orig_size, Image.ANTIALIAS) | |
stacked = Image.new("RGB", (orig_size[0]*2, orig_size[1])) | |
stacked.paste(img, (0, 0)) | |
stacked.paste(pred, (orig_size[0], 0)) | |
stacked.save("pred.png") | |
print("saved pred.png") | |
model.infer_pil(img, output_type="pil").save("pred_raw.png") |