capjamesg's picture
support multiple lines of bboxes
5d3aab5
raw
history blame
1.56 kB
import gradio as gr
import numpy as np
import supervision as sv
from gradio.components import Image, Radio, Textbox
def plot_bounding_boxes(image, boxes, box_type):
if not boxes:
return image
bboxes = []
for row in boxes.split("\n"):
x0, y0, x1, y1 = [int(float(i.split(".")[0])) for i in boxes.split(",")]
if box_type == "xywh":
x0 = x0 * image.size[0]
y0 = y0 * image.size[1]
x1 = x0 + (x1 * image.size[0])
y1 = y0 + (y1 * image.size[1])
bbox = [x0, y0, x1, y1]
bboxes.append(bbox)
detections = sv.Detections(
xyxy=np.array(bboxes),
class_id=np.array([0] * len(bboxes)),
confidence=np.array([1.0] * len(bboxes)),
)
image = np.array(image)
bounding_box_annotator = sv.BoundingBoxAnnotator(thickness=3)
annotated_image = bounding_box_annotator.annotate(
scene=image, detections=detections
)
return annotated_image
iface = gr.Interface(
fn=plot_bounding_boxes,
inputs=[
Image(type="pil", label="Image"),
Textbox(label="Bounding Box (separate values by comma, like '100, 200, 300, 400')", lines=3),
Radio(["xyxy", "xywh"], label="Bounding Box Type"),
],
outputs=Image(type="pil"),
title="Plot Bounding Boxes",
description="Plot bounding boxes on an image. Useful for testing object detection models without writing bounding box code. Powered by [supervision](https://github.com/roboflow/supervision).",
)
iface.launch()