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() |