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