import gradio as gr from ultralytics import YOLO from sahi.prediction import ObjectPrediction from sahi.utils.cv import visualize_object_predictions, read_image from gradio.components import Slider, Image, Dropdown def yolov8_inference( image: Image = None, model_path: Dropdown = None, image_size: Slider = 640, confidence_threshold: Slider = 0.25, iou_threshold: Slider = 0.45, ): model = YOLO(model_path) model.conf = confidence_threshold model.iou = iou_threshold results = model.predict(image, imgsz=image_size) object_prediction_list = [] for _, image_results in enumerate(results): if len(image_results) != 0: image_predictions_in_xyxy_format = image_results.boxes.data for pred in image_predictions_in_xyxy_format: x1, y1, x2, y2 = ( int(pred[0]), int(pred[1]), int(pred[2]), int(pred[3]), ) bbox = [x1, y1, x2, y2] score = pred[4] category_name = model.model.names[int(pred[5])] category_id = pred[5] object_prediction = ObjectPrediction( bbox=bbox, category_id=int(category_id), score=score, category_name=category_name, ) object_prediction_list.append(object_prediction) output_image = visualize_object_predictions(image=image, object_prediction_list=object_prediction_list) return output_image['image'] inputs = [ "image", Dropdown(label="Model", choices=["yolo/runs/detect/train10/weights/best.pt"], value="yolo/runs/detect/train10/weights/best.pt", visible=False), Slider(minimum=320, maximum=1280, step=32, value=640, label="Image Size"), Slider(minimum=0.0, maximum=1.0, step=0.05, value=0.45, label="Confidence Threshold"), Slider(minimum=0.0, maximum=1.0, step=0.05, value=0.25, label="IOU Threshold"), ] title = "Smartathon Pothole Challenge" examples = [ ["examples/0014.png", "yolo/runs/detect/train10/weights/best.pt", 640, 0.45, 0.25], ["examples/0055.png", "yolo/runs/detect/train10/weights/best.pt", 640, 0.45, 0.25], ["examples/0083.png", "yolo/runs/detect/train10/weights/best.pt", 640, 0.45, 0.25], ] iface = gr.Interface( fn=yolov8_inference, inputs=inputs, outputs="image", title=title, examples=examples, theme="default", ) iface.launch(debug=True)