Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import gradio as gr | |
| import tensorflow as tf # version 2.13.0 | |
| from keras.models import load_model | |
| import cv2 | |
| import json | |
| import os | |
| def analyse(img, plant_type): | |
| # Load label_disease.json | |
| with open('data/label_disease.json', 'r') as f: | |
| label_disease = json.load(f) | |
| # Load plant_label_disease.json | |
| with open('data/plant_label_disease.json', 'r') as f: | |
| plant_label_disease = json.load(f) | |
| HEIGHT = 256 | |
| WIDTH = 256 | |
| modelArchitecturePath = 'model/model_architecture.h5' | |
| modelWeightsPath = 'model/model_weights.h5' | |
| # Load the model | |
| dnn_model = load_model(modelArchitecturePath, compile=False) | |
| dnn_model.load_weights(modelWeightsPath) | |
| # Preprocess the image | |
| process_img = cv2.resize(img, (HEIGHT, WIDTH), interpolation=cv2.INTER_LINEAR) | |
| process_img = process_img / 255.0 | |
| process_img = np.expand_dims(process_img, axis=0) | |
| # Predict using the model | |
| y_pred = dnn_model.predict(process_img) | |
| y_pred = y_pred[0] | |
| # Identify plant-specific predictions | |
| plant_label_ids = plant_label_disease[plant_type.lower()] | |
| plant_predicted_id = plant_label_ids[0] | |
| for disease in plant_label_ids: | |
| if y_pred[disease] > y_pred[plant_predicted_id]: | |
| plant_predicted_id = disease | |
| # Determine overall prediction | |
| overall_predicted_id = int(np.argmax(y_pred)) | |
| overall_predicted_name = label_disease[str(overall_predicted_id)] | |
| overall_predicted_confidence = float(y_pred[overall_predicted_id]) | |
| # Determine plant-specific prediction | |
| plant_predicted_name = label_disease[str(plant_predicted_id)] | |
| plant_predicted_confidence = float(y_pred[plant_predicted_id]) | |
| # Determine health status | |
| is_plant_specific_healthy = "healthy" in plant_predicted_name.lower() | |
| is_overall_healthy = "healthy" in overall_predicted_name.lower() | |
| # Return results as a JSON object | |
| result = { | |
| "plant_specific_prediction_id": plant_predicted_id, | |
| "plant_specific_prediction_name": plant_predicted_name, | |
| "plant_specific_confidence": plant_predicted_confidence, | |
| "is_plant_specific_healthy": is_plant_specific_healthy, | |
| "overall_prediction_id": overall_predicted_id, | |
| "overall_prediction_name": overall_predicted_name, | |
| "overall_confidence": overall_predicted_confidence, | |
| "is_overall_healthy": is_overall_healthy | |
| } | |
| return result | |
| # Build the Gradio Blocks interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## Plant Disease Detection") | |
| gr.Markdown("Upload an image of a plant leaf and select the plant type to detect diseases.") | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_image = gr.Image(label="Upload Image", type="numpy") | |
| plant_type = gr.Radio( | |
| ["Apple", "Blueberry", "Cherry", "Corn", "Grape", "Orange", "Peach", | |
| "Pepper", "Potato", "Raspberry", "Soybean", "Squash", "Strawberry", "Tomato"], | |
| label="Plant Type" | |
| ) | |
| submit = gr.Button("Analyze") | |
| with gr.Column(): | |
| result_json = gr.JSON(label="Analysis Result") | |
| # Example images section | |
| gr.Examples( | |
| examples=[os.path.join("examples", img_name) for img_name in sorted(os.listdir("examples"))], | |
| inputs=[input_image], | |
| label="Examples", | |
| cache_examples=False, | |
| examples_per_page=8 | |
| ) | |
| # Define interaction | |
| submit.click(fn=analyse, inputs=[input_image, plant_type], outputs=result_json) | |
| # Launch the application | |
| demo.launch(share=True, show_error=True) |