| | import gradio as gr |
| | import torch |
| | from sahi.prediction import ObjectPrediction |
| | from sahi.utils.cv import visualize_object_predictions, read_image |
| | from ultralyticsplus import YOLO |
| |
|
| |
|
| | def yolov8_inference( |
| | image: gr.inputs.Image = None, |
| | model_path: gr.inputs.Dropdown = None, |
| | image_size: gr.inputs.Slider = 640, |
| | conf_threshold: gr.inputs.Slider = 0.25, |
| | iou_threshold: gr.inputs.Slider = 0.25, |
| | ): |
| | """ |
| | YOLOv8 inference function |
| | Args: |
| | image: Input image |
| | model_path: Path to the model |
| | image_size: Image size |
| | conf_threshold: Confidence threshold |
| | iou_threshold: IOU threshold |
| | Returns: |
| | Rendered image |
| | """ |
| | model = YOLO(model_path) |
| | model.conf = conf_threshold |
| | model.iou = iou_threshold |
| | results = model.predict(image, imgsz=image_size, return_outputs=True) |
| | object_prediction_list = [] |
| | for _, image_results in enumerate(results): |
| | image_predictions_in_xyxy_format = image_results['det'] |
| | 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) |
| |
|
| | image = read_image(image) |
| | output_image = visualize_object_predictions(image=image, object_prediction_list=object_prediction_list) |
| | return output_image['image'] |
| | |
| |
|
| | inputs = [ |
| | gr.inputs.Image(type="filepath", label="Input Image"), |
| | gr.inputs.Dropdown(["Asma/GreenHawk_test"], |
| | default="Asma/GreenHawk_test", label="Model"), |
| | gr.inputs.Slider(minimum=320, maximum=1280, default=640, step=32, label="Image Size"), |
| | gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.25, step=0.05, label="Confidence Threshold"), |
| | gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.25, step=0.05, label="IOU Threshold"), |
| | ] |
| |
|
| | outputs = gr.outputs.Image(type="filepath", label="Output Image") |
| | title = "GreenHawk - Visual Pollution Detection" |
| |
|
| | demo_app = gr.Interface( |
| | fn=yolov8_inference, |
| | inputs=inputs, |
| | outputs=outputs, |
| | title=title, |
| | |
| | cache_examples=True, |
| | theme='default', |
| | ) |
| | demo_app.launch(debug=True, enable_queue=True) |