import gradio as gr import tensorflow as tf import numpy as np from PIL import Image import io import json # Load the TensorFlow model model = tf.keras.models.load_model('./plant_disease_detection.h5') # Load categories with open('./categories.json') as f: categories = json.load(f) def preprocess_image(image): # Convert the image to a NumPy array image = image.resize((224, 224)) # Adjust size as needed image_array = np.array(image) / 255.0 # Normalize to [0, 1] image_array = np.expand_dims(image_array, axis=0) # Add batch dimension return image_array def predict(image): image_array = preprocess_image(image) # Make prediction predictions = model.predict(image_array) predicted_class = np.argmax(predictions, axis=1)[0] # Map to category names predicted_label = categories.get(str(predicted_class), 'Unknown') return predicted_label, float(predictions[0][predicted_class]) # Create a Gradio interface iface = gr.Interface( fn=predict, inputs=gr.Image(type="pil"), outputs=[gr.Label(), gr.Number()], title="Plant Disease Detection", description="Upload an image of a plant leaf to detect if it has any diseases." ) # Launch the interface if __name__ == "__main__": iface.launch()