Spaces:
Running
Running
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 | |
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 | |
# Gradio interface | |
demo = gr.Interface( | |
fn=analyse, | |
inputs=[ | |
gr.Image(type="numpy"), | |
gr.Radio(["Apple", "Blueberry", "Cherry", "Corn", "Grape", "Orange", "Peach", | |
"Pepper", "Potato", "Raspberry", "Soybean", "Squash", "Strawberry", "Tomato"]) | |
], | |
outputs=gr.JSON() | |
) | |
demo.launch(share=True, show_error=True) | |