Spaces:
Sleeping
Sleeping
File size: 1,478 Bytes
88330a7 6f7efe6 9a0b521 6f7efe6 bcdc54a 9a0b521 bcdc54a 9a0b521 bcdc54a 9a0b521 4278bb1 9a0b521 4278bb1 0261967 4278bb1 bcdc54a 6f7efe6 bcdc54a 9a0b521 bcdc54a 6f7efe6 4278bb1 | 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 |
import gradio as gr
from ultralytics import YOLO
from PIL import Image
from collections import defaultdict
# load model
model = YOLO("best.pt")
def predict(image):
results = model(image)
r = results[0]
# Group detections by class
class_confidences = defaultdict(list)
if len(r.boxes) > 0:
for box in r.boxes:
class_id = int(box.cls[0])
class_name = model.names[class_id]
confidence = float(box.conf[0]) * 100
class_confidences[class_name].append(confidence)
if class_confidences:
lines = []
sorted_classes = sorted(
class_confidences.items(),
key=lambda x: max(x[1]),
reverse=True
)
for class_name, confidences in sorted_classes:
avg_conf = round(sum(confidences) / len(confidences), 2)
max_conf = round(max(confidences), 2)
lines.append(f"• {class_name} — avg: {avg_conf}% | best: {max_conf}%")
result_text = "\n".join(lines)
else:
result_text = "No detection"
output_image = r.plot()
return Image.fromarray(output_image), result_text
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil"),
outputs=[
gr.Image(type="pil", label="Detection"),
gr.Textbox(label="Result", lines=10)
],
title="YOLOv8 Detection",
description="Upload an image and detect objects"
)
demo.launch()
|