| |
|
|
| import gradio as gr |
| from transformers import pipeline |
| from PIL import Image, ImageDraw |
|
|
| |
| detector = pipeline("object-detection", model="facebook/detr-resnet-50", device=-1) |
|
|
| def detect_objects(image: Image.Image): |
| outputs = detector(image) |
|
|
| annotated = image.convert("RGB") |
| draw = ImageDraw.Draw(annotated) |
| table = [] |
|
|
| for obj in outputs: |
| box = obj["box"] |
| |
| if isinstance(box, dict): |
| xmin = int(box.get("xmin", box.get("x", 0))) |
| ymin = int(box.get("ymin", box.get("y", 0))) |
| xmax = int(box.get("xmax", xmin)) |
| ymax = int(box.get("ymax", ymin)) |
| else: |
| |
| x, y, w, h = box |
| xmin, ymin = int(x), int(y) |
| xmax, ymax = int(x + w), int(y + h) |
|
|
| label = obj["label"] |
| score = round(obj["score"], 3) |
|
|
| |
| draw.rectangle([xmin, ymin, xmax, ymax], outline="red", width=2) |
| draw.text((xmin, max(ymin - 10, 0)), f"{label} ({score})", fill="red") |
|
|
| table.append([label, score]) |
|
|
| return annotated, table |
|
|
| with gr.Blocks(title="📷✨ Object Detection Demo") as demo: |
| gr.Markdown( |
| """ |
| # 📷✨ Object Detection |
| Upload an image and let DETR identify objects on CPU. |
| """ |
| ) |
|
|
| with gr.Row(): |
| img_in = gr.Image(type="pil", label="Upload Image") |
| btn = gr.Button("Detect Objects 🔍", variant="primary") |
|
|
| img_out = gr.Image(label="Annotated Image") |
| table_out = gr.Dataframe( |
| headers=["Label", "Score"], |
| datatype=["str", "number"], |
| wrap=True, |
| interactive=False, |
| label="Detections" |
| ) |
|
|
| btn.click(detect_objects, inputs=img_in, outputs=[img_out, table_out]) |
|
|
| if __name__ == "__main__": |
| demo.launch(server_name="0.0.0.0") |
|
|