File size: 3,002 Bytes
b46325f
167241e
 
0da4931
b46325f
 
 
bc9a77e
0da4931
3d8dd57
b46325f
3d8dd57
 
b46325f
0da4931
3d8dd57
0da4931
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b46325f
0da4931
b46325f
0da4931
 
3d8dd57
a6ad955
 
b46325f
 
3d8dd57
 
509798f
b46325f
509798f
3d8dd57
9f9a447
3d8dd57
0da4931
dadd261
 
 
0da4931
 
 
 
dadd261
b46325f
dadd261
0da4931
b46325f
0da4931
b46325f
 
 
 
 
 
 
 
 
 
 
0da4931
 
b46325f
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import tempfile
import tensorflow as tf
import numpy as np
from PIL import Image
import gradio as gr
import requests
from io import BytesIO
import cv2


model = tf.keras.models.load_model('trained_modela.keras')

# Load your model


# Define your class names (update with your actual classes)
class_name = ['Apple___Apple_scab',
    'Apple___Black_rot',
    'Apple___Cedar_apple_rust',
    'Apple___healthy',
    'Blueberry___healthy',
    'Cherry_(including_sour)___Powdery_mildew',
    'Cherry_(including_sour)___healthy',
    'Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot',
    'Corn_(maize)___Common_rust_',
    'Corn_(maize)___Northern_Leaf_Blight',
    'Corn_(maize)___healthy',
    'Grape___Black_rot',
    'Grape___Esca_(Black_Measles)',
    'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)',
    'Grape___healthy',
    'Orange___Haunglongbing_(Citrus_greening)',
    'Peach___Bacterial_spot',
    'Peach___healthy',
    'Pepper,_bell___Bacterial_spot',
    'Pepper,_bell___healthy',
    'Potato___Early_blight',
    'Potato___Late_blight',
    'Potato___healthy',
    'Raspberry___healthy',
    'Soybean___healthy',
    'Squash___Powdery_mildew',
    'Strawberry___Leaf_scorch',
    'Strawberry___healthy',
    'Tomato___Bacterial_spot',
    'Tomato___Early_blight',
    'Tomato___Late_blight',
    'Tomato___Leaf_Mold',
    'Tomato___Septoria_leaf_spot',
    'Tomato___Spider_mites Two-spotted_spider_mite',
    'Tomato___Target_Spot',
    'Tomato___Tomato_Yellow_Leaf_Curl_Virus',
    'Tomato___Tomato_mosaic_virus',
    'Tomato___healthy']

def predict_disease(image):
    """
    Predict plant disease from uploaded image using same preprocessing as your working cv2 method
    """
    try:

        with tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) as tmp:
            temp_path = tmp.name
            image.save(temp_path) 
           
        
        # Read image using OpenCV
        img = cv2.imread(temp_path)
        
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        
        image = tf.keras.preprocessing.image.load_img(temp_path,target_size=(128, 128))
        
        input_arr = tf.keras.preprocessing.image.img_to_array(image)
        input_arr = np.array([input_arr])  # Convert single image to batch

        # Predict
        prediction = model.predict(input_arr)
        result_index = np.argmax(prediction)
        confidence = prediction[0][result_index]
        disease_name = class_name[result_index]

        return f"Disease: {disease_name}\nConfidence: {confidence:.2%}"

    except Exception as e:
        return f"Error: {str(e)}"

# Create Gradio interface
iface = gr.Interface(
    fn=predict_disease,
    inputs=gr.Image(type="pil", label="Upload Plant Image"),
    outputs=gr.Textbox(label="Prediction Result"),
    title="Plant Disease Detection API",
    description="Upload an image of a plant leaf to detect diseases",
    examples=[
        # You can add example images here
    ]
)

if __name__ == "__main__":
    iface.launch()