File size: 2,037 Bytes
6989a37
b8ca872
30f242a
b8ca872
 
6989a37
b8ca872
 
75e60e4
90d35fd
b8ca872
 
 
6989a37
b8ca872
 
1a4514d
b8ca872
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e3a012f
90d35fd
 
b8ca872
90d35fd
 
b8ca872
 
90d35fd
 
b8ca872
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
import gradio as gr
from ultralytics import YOLO
from PIL import Image
import numpy as np
import torch

# Load the pre-trained YOLOv8s model from the Hugging Face repository
model = YOLO('foduucom/plant-leaf-detection-and-classification')

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)
    
    # Extract predictions
    predictions = results[0]
    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
interface = gr.Interface(
    fn=identify_disease,
    inputs=gr.inputs.Image(type="pil"),
    outputs=[
        gr.outputs.Image(type="pil", label="Annotated Image"),
        gr.outputs.Dataframe(headers=["Disease", "Confidence"], label="Predictions")
    ],
    title="Tobacco Plant Disease Identifier",
    description="Upload an image of a tobacco plant leaf, and this tool will identify the disease along with the confidence score."
)

# Launch the app
interface.launch()