import PIL.Image as Image import gradio as gr from ultralytics import YOLOv10 def predict_image(img, model_id, image_size, conf_threshold): model = YOLOv10.from_pretrained(f'jameslahm/{model_id}') results = model.predict( source=img, conf=conf_threshold, show_labels=True, show_conf=True, imgsz=image_size, ) for r in results: im_array = r.plot() im = Image.fromarray(im_array[..., ::-1]) return im def app(): with gr.Blocks(): with gr.Row(): with gr.Column(): image = gr.Image(type="pil", label="Image") model_id = gr.Dropdown( label="Model", choices=[ "yolov10n", "yolov10s", "yolov10m", "yolov10b", "yolov10l", "yolov10x", ], value="yolov10m", ) image_size = gr.Slider( label="Image Size", minimum=320, maximum=1280, step=32, value=640, ) conf_threshold = gr.Slider( label="Confidence Threshold", minimum=0.0, maximum=1.0, step=0.05, value=0.25, ) yolov10_infer = gr.Button(value="Detect Objects") with gr.Column(): output_image = gr.Image(type="pil", label="Annotated Image") yolov10_infer.click( fn=predict_image, inputs=[ image, model_id, image_size, conf_threshold, ], outputs=[output_image], ) gr.Examples( examples=[ [ "bus.jpg", "yolov10s", 640, 0.25, ], [ "zidane.jpg", "yolov10s", 640, 0.25, ], ], fn=predict_image, inputs=[ image, model_id, image_size, conf_threshold, ], outputs=[output_image], cache_examples='lazy', ) gradio_app = gr.Blocks() with gradio_app: gr.HTML( """

YOLOv10: Real-Time End-to-End Object Detection

""") gr.HTML( """

arXiv | github

""") with gr.Row(): with gr.Column(): app() if __name__ == '__main__': gradio_app.launch()