| import gradio as gr |
| import numpy as np |
| from PIL import Image, ImageFilter, ImageOps |
| from transformers import pipeline |
| from pathlib import Path |
| import zipfile |
| import shutil |
| import os |
| import cv2 |
|
|
| print("DEPTH AAA ENGINE (CLEAN REBUILD)") |
|
|
| |
| |
| |
| MODEL_ID = "depth-anything/Depth-Anything-V2-Base-hf" |
|
|
| |
| device = 0 if os.environ.get("CUDA_VISIBLE_DEVICES", "") != "" else -1 |
|
|
| pipe = pipeline( |
| task="depth-estimation", |
| model=MODEL_ID, |
| device=device |
| ) |
|
|
| |
| |
| |
| def normalize_depth(depth_img: Image.Image) -> np.ndarray: |
| d = np.array(depth_img).astype(np.float32) |
| d_min = d.min() |
| d_max = d.max() |
| d = (d - d_min) / (d_max - d_min + 1e-6) |
| return d |
|
|
| def refine_depth(depth_np: np.ndarray) -> Image.Image: |
| img = Image.fromarray((depth_np * 255).astype(np.uint8)) |
|
|
| |
| img = img.filter(ImageFilter.GaussianBlur(1.0)) |
|
|
| |
| img = ImageOps.autocontrast(img, cutoff=0.3) |
|
|
| return img |
|
|
| def colorize_depth(depth_gray: Image.Image) -> Image.Image: |
| arr = np.array(depth_gray) |
| color = cv2.applyColorMap(arr, cv2.COLORMAP_INFERNO) |
| color = cv2.cvtColor(color, cv2.COLOR_BGR2RGB) |
| return Image.fromarray(color) |
|
|
| def process(files): |
| if not files: |
| return None, None |
|
|
| out_dir = Path("depth_output") |
| if out_dir.exists(): |
| shutil.rmtree(out_dir) |
| out_dir.mkdir(parents=True, exist_ok=True) |
|
|
| zip_path = "DEPTH_RESULT.zip" |
|
|
| preview_items = [] |
|
|
| with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf: |
| for item in files: |
| path = item if isinstance(item, str) else getattr(item, "name", item) |
| stem = Path(path).stem |
|
|
| img = Image.open(path).convert("RGB") |
|
|
| |
| result = pipe(img) |
| depth_raw = result["depth"] |
|
|
| depth_np = normalize_depth(depth_raw) |
| depth_final = refine_depth(depth_np) |
|
|
| out_path = out_dir / f"{stem}_depth.png" |
| depth_final.save(out_path) |
| zipf.write(out_path, out_path.name) |
|
|
| preview_items.append((str(out_path), f"{stem}_depth")) |
|
|
| |
| preview = preview_items[0][0] if preview_items else None |
| return zip_path, preview |
|
|
| |
| |
| |
| with gr.Blocks() as demo: |
| gr.Markdown("# 🧠 DEPTH AAA (CLEAN REBUILD)") |
|
|
| inp = gr.File(file_count="multiple", type="filepath") |
| out_zip = gr.File(label="ZIP") |
| preview = gr.Image(label="Preview", type="filepath") |
|
|
| btn = gr.Button("GERAR DEPTH") |
| btn.click(fn=process, inputs=inp, outputs=[out_zip, preview]) |
|
|
| demo.launch() |