| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import os |
| | os.system("pip freeze") |
| | import spaces |
| |
|
| | import gradio as gr |
| | import torch as torch |
| | from diffusers import MarigoldDepthPipeline, DDIMScheduler |
| | from gradio_dualvision import DualVisionApp |
| | from huggingface_hub import login |
| | from PIL import Image |
| |
|
| | CHECKPOINT = "prs-eth/marigold-depth-v1-1" |
| |
|
| | if "HF_TOKEN_LOGIN" in os.environ: |
| | login(token=os.environ["HF_TOKEN_LOGIN"]) |
| |
|
| | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
| | dtype = torch.bfloat16 if torch.cuda.is_available() else torch.float32 |
| |
|
| | pipe = MarigoldDepthPipeline.from_pretrained(CHECKPOINT) |
| | pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing") |
| | pipe = pipe.to(device=device, dtype=dtype) |
| | try: |
| | import xformers |
| | pipe.enable_xformers_memory_efficient_attention() |
| | except: |
| | pass |
| |
|
| |
|
| | class MarigoldDepthApp(DualVisionApp): |
| | DEFAULT_SEED = 2024 |
| | DEFAULT_ENSEMBLE_SIZE = 1 |
| | DEFAULT_DENOISE_STEPS = 4 |
| | DEFAULT_PROCESSING_RES = 768 |
| |
|
| | def make_header(self): |
| | gr.Markdown( |
| | """ |
| | <h2><a href="https://huggingface.co/spaces/prs-eth/marigold" style="color: black;">Marigold Depth Estimation</a></h2> |
| | """ |
| | ) |
| | with gr.Row(elem_classes="remove-elements"): |
| | gr.Markdown( |
| | f""" |
| | <p align="center"> |
| | <a title="Website" href="https://marigoldcomputervision.github.io/" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%E2%99%A5%20Project%20-Website-blue"> |
| | </a> |
| | <a title="diffusers" href="https://huggingface.co/docs/diffusers/using-diffusers/marigold_usage" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A7%A8%20Read_diffusers-Tutorial-yellow?labelColor=green"> |
| | </a> |
| | <a title="arXiv" href="https://arxiv.org/abs/2505.09358" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%93%84%20Read%20-Paper-AF3436"> |
| | </a> |
| | <a title="Github" href="https://github.com/prs-eth/marigold" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/github/stars/prs-eth/marigold?label=GitHub%20%E2%98%85&logo=github&color=C8C" alt="badge-github-stars"> |
| | </a> |
| | <a title="Image Normals" href="https://huggingface.co/spaces/prs-eth/marigold-normals" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A4%97%20Image%20Normals%20-Demo-yellow" alt="imagedepth"> |
| | </a> |
| | <a title="Image Intrinsics" href="https://huggingface.co/spaces/prs-eth/marigold-iid" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A4%97%20Image%20Intrinsics%20-Demo-yellow" alt="imagedepth"> |
| | </a> |
| | <a title="LiDAR Depth" href="https://huggingface.co/spaces/prs-eth/marigold-dc" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A4%97%20LiDAR%20Depth%20-Demo-yellow" alt="imagedepth"> |
| | </a> |
| | <a title="Video Depth" href="https://huggingface.co/spaces/prs-eth/rollingdepth" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A4%97%20Video%20Depth%20-Demo-yellow" alt="videodepth"> |
| | </a> |
| | <a title="Depth-to-3D" href="https://huggingface.co/spaces/prs-eth/depth-to-3d-print" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://img.shields.io/badge/%F0%9F%A4%97%20Depth--to--3D%20-Demo-yellow" alt="depthto3d"> |
| | </a> |
| | <a title="Social" href="https://twitter.com/antonobukhov1" target="_blank" rel="noopener noreferrer" style="display: inline-block;"> |
| | <img src="https://shields.io/twitter/follow/:?label=Subscribe%20for%20updates!" alt="social"> |
| | </a> |
| | </p> |
| | <p align="center" style="margin-top: 0px;"> |
| | Upload a photo or select an example below to compute depth maps in real time. |
| | Use the slider to reveal areas of interest. |
| | Use the radio-buttons to switch between modalities. |
| | Check our other demo badges above for new or relocated functionality. |
| | </p> |
| | """ |
| | ) |
| |
|
| | def build_user_components(self): |
| | with gr.Column(): |
| | ensemble_size = gr.Slider( |
| | label="Ensemble size", |
| | minimum=1, |
| | maximum=10, |
| | step=1, |
| | value=self.DEFAULT_ENSEMBLE_SIZE, |
| | ) |
| | denoise_steps = gr.Slider( |
| | label="Number of denoising steps", |
| | minimum=1, |
| | maximum=20, |
| | step=1, |
| | value=self.DEFAULT_DENOISE_STEPS, |
| | ) |
| | processing_res = gr.Radio( |
| | [ |
| | ("Native", 0), |
| | ("Recommended", 768), |
| | ], |
| | label="Processing resolution", |
| | value=self.DEFAULT_PROCESSING_RES, |
| | ) |
| | return { |
| | "ensemble_size": ensemble_size, |
| | "denoise_steps": denoise_steps, |
| | "processing_res": processing_res, |
| | } |
| |
|
| | def process(self, image_in: Image.Image, **kwargs): |
| | ensemble_size = kwargs.get("ensemble_size", self.DEFAULT_ENSEMBLE_SIZE) |
| | denoise_steps = kwargs.get("denoise_steps", self.DEFAULT_DENOISE_STEPS) |
| | processing_res = kwargs.get("processing_res", self.DEFAULT_PROCESSING_RES) |
| | generator = torch.Generator(device=device).manual_seed(self.DEFAULT_SEED) |
| |
|
| | pipe_out = pipe( |
| | image_in, |
| | ensemble_size=ensemble_size, |
| | num_inference_steps=denoise_steps, |
| | processing_resolution=processing_res, |
| | batch_size=1 if processing_res == 0 else 2, |
| | output_uncertainty=ensemble_size >= 3, |
| | generator=generator, |
| | ) |
| |
|
| | depth_vis = pipe.image_processor.visualize_depth(pipe_out.prediction)[0] |
| | depth_16bit = pipe.image_processor.export_depth_to_16bit_png(pipe_out.prediction)[0] |
| |
|
| | out_modalities = { |
| | "Depth Visualization": depth_vis, |
| | "Depth 16-bit": depth_16bit, |
| | } |
| | if ensemble_size >= 3: |
| | uncertainty = pipe.image_processor.visualize_uncertainty(pipe_out.uncertainty)[0] |
| | out_modalities["Uncertainty"] = uncertainty |
| |
|
| | out_settings = { |
| | "ensemble_size": ensemble_size, |
| | "denoise_steps": denoise_steps, |
| | "processing_res": processing_res, |
| | } |
| | return out_modalities, out_settings |
| |
|
| |
|
| | with MarigoldDepthApp( |
| | title="Marigold Depth", |
| | examples_path="files", |
| | examples_per_page=12, |
| | squeeze_canvas=True, |
| | spaces_zero_gpu_enabled=True, |
| | ) as demo: |
| | demo.queue( |
| | api_open=False, |
| | ).launch( |
| | server_name="0.0.0.0", |
| | server_port=7860, |
| | ) |
| |
|