cv-yolo's picture
Update app.py
8eb3cb3 verified
import os
import gradio as gr
import numpy as np
from PIL import Image
from ultralytics import YOLO
# Load the model
model = YOLO('best.pt')
# Path to the photos folder
photos_folder = "Photos"
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
img_path = os.path.join(folder, filename)
img = Image.open(img_path)
images.append((img, filename))
return images
def predict(image):
try:
image = np.array(image)
results = model(image)
result_image = results[0].plot()
return Image.fromarray(result_image)
except Exception as e:
print(f"Error during prediction: {e}")
return "Error"
def load_image_from_gallery(images, index):
if images and 0 <= index < len(images):
image = images[index]
if isinstance(image, tuple):
image = image[0]
return image
return None
def gallery_click_event(images, evt: gr.SelectData):
index = evt.index
selected_img = load_image_from_gallery(images, index)
return selected_img
def clear_image():
return None
# Load images at the start
images = load_images_from_folder(photos_folder)
with gr.Blocks(css=".container { background-color: white; }") as demo:
with gr.Row():
with gr.Column():
selected_image = gr.Image(label="Selected Image from Gallery", type="pil")
clear_button = gr.Button("Clear")
with gr.Column():
image_gallery = gr.Gallery(label="Image Gallery", elem_id="gallery", type="pil", value=[img for img, _ in images])
with gr.Column():
result_image = gr.Image(label="Result Image", type="pil")
image_gallery.select(
fn=gallery_click_event,
inputs=image_gallery,
outputs=selected_image
)
selected_image.change(
fn=predict,
inputs=selected_image,
outputs=result_image
)
clear_button.click(
fn=clear_image,
inputs=None,
outputs=selected_image
)
demo.launch()