Spaces:
Runtime error
Runtime error
import gradio as gr, numpy as np | |
from utils import SAM, GD | |
from groundingdino.util.utils import clean_text | |
from PIL import Image | |
import cv2, torch | |
def pipeline(image, prompt): | |
# 1. segmenta con SAM | |
img_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) | |
SAM.set_image(img_cv) | |
masks, _, _ = SAM.predict(box=None, point_coords=None, point_labels=None, multimask_output=False) | |
annotated = image.copy() | |
boxes, labels, feats = [], [], [] | |
for m in masks: | |
coords = np.argwhere(m) | |
y1, x1 = coords.min(0) | |
y2, x2 = coords.max(0) | |
box = np.array([x1, y1, x2, y2]) | |
boxes.append(box) | |
if boxes: | |
# 2. grounding DINO zero‑shot | |
dino_out = GD.predict_with_caption( | |
image=np.array(image), | |
captions=[prompt] * len(boxes), | |
boxes=np.vstack(boxes) | |
) | |
for box, text in zip(dino_out["boxes"], dino_out["captions"]): | |
x1,y1,x2,y2 = map(int, box) | |
cv2.rectangle(annotated, (x1,y1), (x2,y2), (255,0,0), 2) | |
cv2.putText(annotated, clean_text(text), (x1, y1-6), | |
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255,0,0), 2) | |
return Image.fromarray(annotated) | |
demo = gr.Interface( | |
fn=pipeline, | |
inputs=[ | |
gr.Image(type="pil"), | |
gr.Textbox(value="lamiera, foro circolare, vite, bullone, scanalatura") | |
], | |
outputs=gr.Image(type="pil"), | |
title="Zero‑Shot Mechanical Part Finder", | |
description=( | |
"Carica una foto di componenti meccanici a fine vita e scrivi le etichette " | |
"che vuoi cercare (separate da virgole). Il sistema segmenta con SAM e fa " | |
"grounding zero‑shot con GroundingDINO." | |
) | |
) | |
if __name__ == "__main__": | |
demo.launch() |