|
|
| import tensorflow as tf |
| import numpy as np |
| from PIL import Image |
| import gradio as gr |
| import requests |
| from io import BytesIO |
|
|
| |
| model = tf.keras.models.load_model('trained_modela.keras') |
|
|
| 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: |
| |
| image = image.convert("RGB") |
| image = image.resize((128, 128)) |
| input_arr = tf.keras.preprocessing.image.img_to_array(image) |
| input_arr = np.array([input_arr]) |
|
|
| |
| 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)}" |
|
|
| |
| 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=[ |
| |
| ] |
| ) |
|
|
| if __name__ == "__main__": |
| iface.launch() |