bilegentile's picture
Upload folder using huggingface_hub
c19ca42 verified
raw
history blame
1.82 kB
from PIL import Image
import numpy as np
import torch
from transformers import AutoImageProcessor, DPTForDepthEstimation
from modules import devices
from modules.shared import opts
image_processor: AutoImageProcessor = None
class DPTDetector:
def __init__(self, model=None, processor=None, model_path=None):
self.model = model
self.processor = processor
self.model_path = model_path or "Intel/dpt-large"
def __call__(self, input_image=None, model_path=None):
from modules.control.processors import cache_dir
if model_path is not None and model_path != self.model_path:
self.model_path = model_path
self.processor = None
self.model = None
if self.processor is None:
self.processor = AutoImageProcessor.from_pretrained(self.model_path, cache_dir=cache_dir)
if self.model is None:
self.model = DPTForDepthEstimation.from_pretrained(self.model_path, cache_dir=cache_dir)
self.model.to(devices.device)
with devices.inference_context():
inputs = self.processor(images=input_image, return_tensors="pt")
inputs.to(devices.device)
outputs = self.model(**inputs)
predicted_depth = outputs.predicted_depth
prediction = torch.nn.functional.interpolate(
predicted_depth.unsqueeze(1),
size=input_image.size[::-1],
mode="bicubic",
align_corners=False,
)
output = prediction.squeeze().cpu().numpy()
formatted = (output * 255 / np.max(output)).astype("uint8")
if opts.control_move_processor:
self.model.to('cpu')
depth = Image.fromarray(formatted)
depth = depth.convert('RGB')
return depth