File size: 2,178 Bytes
e8c4882
1d2e742
431f73f
 
1d2e742
e8c4882
 
431f73f
 
 
1d2e742
431f73f
 
 
 
e8c4882
431f73f
 
1d2e742
431f73f
 
1d2e742
431f73f
 
 
 
 
 
 
1d2e742
 
431f73f
 
1d2e742
431f73f
1d2e742
431f73f
 
ed5c9d7
e8c4882
1d2e742
 
 
ed5c9d7
 
 
1d2e742
 
 
ed5c9d7
 
 
431f73f
 
1d2e742
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import os
import gradio as gr
from ultralytics import YOLO
from PIL import Image
import numpy as np
import cv2

# Define the directory paths for the model and assets based on the current script location
script_dir = os.path.dirname(os.path.abspath(__file__))  # Current script directory
yolo_weights_path = os.path.join(script_dir, 'toolkit', 'ALL_best.pt')  # Path to YOLO weights

# Load the YOLO model
model = YOLO(yolo_weights_path)
model.fuse()  # Optional for optimization
print("YOLO model loaded successfully with weights.")

# Function to perform detection and segmentation with YOLO
def apply_yolo_segmentation(image):
    try:
        # Run YOLO on the image and get the results
        results = model.predict(source=image, save=False)  # Use save=False to keep results in memory

        # Retrieve the annotated image from YOLO results
        result_image = results[0].plot()  # `plot()` returns the image with annotations
        
        # Convert to RGB for Gradio output
        result_image_rgb = cv2.cvtColor(result_image, cv2.COLOR_BGR2RGB)
        
        return result_image_rgb

    except Exception as e:
        print(f"Error in YOLO segmentation: {e}")
        return image  # Return the original image if segmentation fails

# Define the Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("<h1 style='text-align: center;'>Image Segmentation with YOLO</h1>")
    gr.Markdown("Upload an image to see segmentation results using the YOLO model.")

    # Input and output layout
    with gr.Row():
        with gr.Column():
            gr.Markdown("### Upload an Image")
            input_image = gr.Image(source="upload", tool="editor", type="numpy", label="Upload an image")
            submit_btn = gr.Button("Submit")
            clear_btn = gr.Button("Clear")

        with gr.Column():
            gr.Markdown("### Segmented Image Output")
            output_image = gr.Image(type="numpy", label="Segmented Image")

    # Set up button functionality
    submit_btn.click(fn=apply_yolo_segmentation, inputs=input_image, outputs=output_image)
    clear_btn.click(fn=lambda: None, outputs=output_image)

# Launch the Gradio app
demo.launch()