harxsan's picture
Create app.py
7e93c10 verified
import gradio as gr
import torch
import cv2
import numpy as np
from ultralytics import YOLO
from PIL import Image
# Load model (it will be uploaded into the same repo)
model = YOLO('best.pt')
model.eval()
def predict_image(image):
image = np.array(image)
results = model(image)
boxes = results[0].boxes.xyxy
scores = results[0].boxes.conf
labels = results[0].boxes.cls
output_image = image.copy()
for box, score, label in zip(boxes, scores, labels):
x1, y1, x2, y2 = map(int, box)
color = (0, 255, 0)
thickness = 2
cv2.rectangle(output_image, (x1, y1), (x2, y2), color, thickness)
label_text = f"Triangle {score:.2f}"
cv2.putText(output_image, label_text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
output_image_rgb = cv2.cvtColor(output_image, cv2.COLOR_BGR2RGB)
num_triangles = len(boxes)
return Image.fromarray(output_image_rgb), f"Detected {num_triangles} triangles!"
interface = gr.Interface(
fn=predict_image,
inputs=gr.Image(type="pil", label="Upload an image"),
outputs=[gr.Image(label="Detection Result"), gr.Textbox(label="Detection Info")],
title="Triangle Detection",
description="Upload an image, and the model will detect triangles in it."
)
interface.launch(share=True)