| | |
| |
|
| | 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") |
| |
|