Spaces:
Sleeping
Sleeping
File size: 2,408 Bytes
6989a37 13ef1fa 30f242a 13ef1fa 6989a37 6f2a51c 75e60e4 90d35fd 13ef1fa 6989a37 13ef1fa 6f2a51c 1a4514d 13ef1fa e3a012f 29b03e2 90d35fd 13ef1fa 29b03e2 90d35fd 29b03e2 90d35fd 29b03e2 13ef1fa 30f242a e3a012f 90d35fd |
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 59 60 61 62 63 64 65 66 |
import gradio as gr
from ultralytics import YOLO
from PIL import Image
import numpy as np
import cv2
# Load the YOLOv8 model (ensure this path is correct)
model = YOLO('yolov8n.pt')
def identify_disease(image):
# Convert the image to RGB if it's not
if image.mode != 'RGB':
image = image.convert('RGB')
# Perform inference
results = model(image)
predictions = results[0]
# Check if there are any detections
if len(predictions.boxes) == 0:
# No detections, return the image with a message
annotated_image = np.array(image)
cv2.putText(annotated_image, "No disease detected", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
annotated_image = Image.fromarray(annotated_image)
return annotated_image, [{"Disease": "None", "Confidence": "N/A"}]
# Extract predictions
boxes = predictions.boxes
labels = boxes.cls.cpu().numpy()
scores = boxes.conf.cpu().numpy()
class_names = model.names
# Annotate image with bounding boxes and labels
annotated_image = np.array(image)
for box, label, score in zip(boxes.xyxy.cpu().numpy(), labels, scores):
x1, y1, x2, y2 = map(int, box)
class_name = class_names[int(label)]
confidence = f"{score * 100:.2f}%"
annotated_image = cv2.rectangle(annotated_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
annotated_image = cv2.putText(annotated_image, f"{class_name} {confidence}", (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# Convert annotated image back to PIL format
annotated_image = Image.fromarray(annotated_image)
# Prepare results for display
results_list = [{"Disease": class_names[int(label)], "Confidence": f"{score * 100:.2f}%"} for label, score in zip(labels, scores)]
return annotated_image, results_list
# Define Gradio interface with updated syntax
interface = gr.Interface(
fn=identify_disease,
inputs=gr.Image(type="pil"),
outputs=[
gr.Image(type="pil", label="Annotated Image"),
gr.Dataframe(headers=["Disease", "Confidence"], label="Predictions")
],
title="Leaf Disease Identifier with YOLOv8",
description="Upload an image of a leaf, and this tool will identify the disease with confidence scores."
)
# Launch the app
interface.launch()
|