|
import gradio as gr |
|
import numpy as np |
|
from PIL import Image |
|
from tensorflow.keras.models import load_model |
|
|
|
|
|
model = load_model('model1.h5') |
|
|
|
|
|
class_indices = {0: 'Apple___Apple_scab', |
|
1: 'Apple___Black_rot', |
|
2: 'Apple___Cedar_apple_rust', |
|
3: 'Apple___healthy', |
|
4: 'Blueberry___healthy', |
|
5: 'Cherry_(including_sour)___Powdery_mildew', |
|
6: 'Cherry_(including_sour)___healthy', |
|
7: 'Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot', |
|
8: 'Corn_(maize)___Common_rust_', |
|
9: 'Corn_(maize)___Northern_Leaf_Blight', |
|
10: 'Corn_(maize)___healthy', |
|
11: 'Grape___Black_rot', |
|
12: 'Grape___Esca_(Black_Measles)', |
|
13: 'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)', |
|
14: 'Grape___healthy', |
|
15: 'Orange___Haunglongbing_(Citrus_greening)', |
|
16: 'Peach___Bacterial_spot', |
|
17: 'Peach___healthy', |
|
18: 'Pepper,_bell___Bacterial_spot', |
|
19: 'Pepper,_bell___healthy', |
|
20: 'Potato___Early_blight', |
|
21: 'Potato___Late_blight', |
|
22: 'Potato___healthy', |
|
23: 'Raspberry___healthy', |
|
24: 'Soybean___healthy', |
|
25: 'Squash___Powdery_mildew', |
|
26: 'Strawberry___Leaf_scorch', |
|
27: 'Strawberry___healthy', |
|
28: 'Tomato___Bacterial_spot', |
|
29: 'Tomato___Early_blight', |
|
30: 'Tomato___Late_blight', |
|
31: 'Tomato___Leaf_Mold', |
|
32: 'Tomato___Septoria_leaf_spot', |
|
33: 'Tomato___Spider_mites Two-spotted_spider_mite', |
|
34: 'Tomato___Target_Spot', |
|
35: 'Tomato___Tomato_Yellow_Leaf_Curl_Virus', |
|
36: 'Tomato___Tomato_mosaic_virus', |
|
37: 'Tomato___healthy'} |
|
|
|
|
|
def preprocess_image(image): |
|
|
|
image = Image.fromarray(image).resize((224, 224)) |
|
|
|
image = np.array(image).astype('float32') / 255.0 |
|
|
|
image = np.expand_dims(image, axis=0) |
|
return image |
|
|
|
|
|
def predict_image(image): |
|
preprocessed_image = preprocess_image(image) |
|
predictions = model.predict(preprocessed_image) |
|
predicted_class_index = np.argmax(predictions) |
|
predicted_class_name = class_indices[predicted_class_index] |
|
confidence = round(predictions[0][predicted_class_index], 2) |
|
return predicted_class_name, confidence |
|
|
|
|
|
def build_gui(): |
|
|
|
description = """ |
|
<center><strong> |
|
<font size='10'>Plant Disease Detection</font> |
|
</strong></center> |
|
<br> |
|
<p>Welcome to the <a href='https://github.com/meet244/Plantex' target='_blank'>Plantex</a> demo!</p> |
|
<p> |
|
PLantex is a plant disease detection model that can predict the disease of a plant based on an image of its leaf. |
|
To use the model, simply upload an image of a plant's leaf and click on the "Predict" button. |
|
The model will then predict the disease of the plant and display the predicted class name along with the confidence score. |
|
</p> |
|
<p>Great thanks to <a href='https://huggingface.co/meet244' target='_blank'>Meet Patel</a>, the major contributor of this |
|
demo! |
|
</p> |
|
""" |
|
|
|
article = """ |
|
<p style='text-align: center'> |
|
Model is trained on public dataset, and we are persisting in refining and iterating upon it.<br/> |
|
<a href='https://github.com/meet244/Plantex' target='_blank'>Plantex - Plant disease detection & organic waste management</a> |
|
</p> |
|
""" |
|
with gr.Blocks(title="Plantex - Disease detetion model") as demo: |
|
gr.HTML(description) |
|
gr.Interface( |
|
fn=predict_image, |
|
inputs=gr.Image(label="Plant's leaf Image"), |
|
outputs=[gr.Textbox(label="Predicted"),gr.Textbox(label="Confidence")], |
|
|
|
|
|
|
|
|
|
|
|
cache_examples=True, |
|
allow_flagging='never' |
|
) |
|
gr.HTML(article) |
|
return demo |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
build_gui().launch() |