capjamesg's picture
work on plotting code
343712f
raw
history blame
1.48 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
x0, y0, x1, y1 = [int(i.strip()) for i in boxes.split(",")]
image_width = image.size[0]
image_height = image.size[1]
if box_type == "xywh":
x1 = x0 + x1
y1 = y0 + y1
x0 = x0 * image_width
x1 = x1 * image_width
y0 = y0 * image_height
y1 = y1 * image_height
detections = sv.Detections(
xyxy=np.array([[x0, y0, x1, y1]]),
class_id=np.array([0]),
confidence=np.array([1.0]),
)
# convert to cv2
image = np.array(image)
bounding_box_annotator = sv.BoundingBoxAnnotator()
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()