|
pip install tensorflow==2.11.0 |
|
import gradio as gr |
|
|
|
|
|
import tensorflow as tf |
|
|
|
from tensorflow.keras.utils import img_to_array,load_img |
|
from tensorflow.keras.models import load_model |
|
import numpy as np |
|
|
|
|
|
model_path = '/content/tomato.h5' |
|
|
|
|
|
custom_objects = {'DepthwiseConv2D': tf.keras.layers.DepthwiseConv2D} |
|
|
|
|
|
model = load_model(model_path, custom_objects=custom_objects) |
|
|
|
|
|
|
|
|
|
|
|
def predict_disease(image_file, model, all_labels): |
|
|
|
try: |
|
|
|
img = load_img(image_file, target_size=(224, 224)) |
|
img_array = img_to_array(img) |
|
img_array = np.expand_dims(img_array, axis=0) |
|
img_array = img_array / 255.0 |
|
|
|
|
|
predictions = model.predict(img_array) |
|
predicted_class = np.argmax(predictions[0]) |
|
|
|
|
|
predicted_label = all_labels[predicted_class] |
|
|
|
|
|
|
|
if predicted_label=='Tomato Yellow Leaf Curl Virus': |
|
predicted_label = """<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Yellow Leaf Curl Virus</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. imidacloprid</li> |
|
<li>2. thiamethoxam</li> |
|
<li>3. Spinosad</li> |
|
<li>4. Acetamiprid</li> |
|
|
|
</ul><br> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
""" |
|
elif predicted_label=='Tomato Target Spot': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Target Spot</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Azoxystrobin</li> |
|
<li>2. Boscalid</li> |
|
<li>3. Mancozeb</li> |
|
<li>4. Chlorothalonil</li> |
|
<li>5. Propiconazole</li> |
|
|
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
elif predicted_label=='Tomato Spider mites': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Spider mites</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Abamectin</li> |
|
<li>2. Spiromesifen</li> |
|
<li>3. Miticides</li> |
|
<li>4. insecticidal soap</li> |
|
|
|
<li>5. Neem oil</li> |
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
|
|
elif predicted_label=='Tomato Septoria leaf spot': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Septoria leaf spot</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Azoxystrobin</li> |
|
<li>2. Boscalid</li> |
|
<li>3. Mancozeb</li> |
|
<li>4. Chlorothalonil</li> |
|
<li>5. Propiconazole</li> |
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
elif predicted_label=='Tomato Mosaic virus': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Mosaic virus</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Imidacloprid</li> |
|
<li>2. Thiamethoxam</li> |
|
<li>3. Acetamiprid</li> |
|
<li>4. Dinotefuran</li> |
|
<li>5. Pyrethrin</li> |
|
|
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
elif predicted_label=='Tomato Leaf Mold': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Leaf Mold</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Azoxystrobin</li> |
|
<li>2. Boscalid</li> |
|
<li>3. Mancozeb</li> |
|
<li>4. Chlorothalonil</li> |
|
<li>5. Propiconazole</li> |
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
|
|
elif predicted_label=='Tomato Late blight': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato blight</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. metalaxl</li> |
|
<li>2. Chlorothalonil</li> |
|
<li>3. Mancozeb</li> |
|
<li>4. Copper oxychloride</li> |
|
<li>5. Azoxystrobin</li> |
|
|
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
elif predicted_label=='Tomato Early blight': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato blight</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Azoxystrobin</li> |
|
<li>2. Boscalid</li> |
|
<li>3. Mancozeb</li> |
|
<li>4. Chlorothalonil</li> |
|
<li>5. Propiconazole</li> |
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
elif predicted_label=='Tomato Bacterial spot': |
|
predicted_label = """ |
|
<style> |
|
li{ |
|
font-size: 15px; |
|
margin-left: 90px; |
|
margin-top: 15px; |
|
margin-bottom: 15px; |
|
} |
|
h4{ |
|
font-size: 17px; |
|
margin-top: 15px; |
|
} |
|
h4:hover{ |
|
cursor: pointer; |
|
} |
|
|
|
h3:hover{ |
|
cursor: pointer; |
|
color: blue; |
|
transform: scale(1.3); |
|
} |
|
.note{ |
|
text-align: center; |
|
font-size: 16px; |
|
} |
|
p{ |
|
font-size: 13px; |
|
text-align: center; |
|
} |
|
|
|
</style> |
|
<h3><center><b>Tomato Bacterial spot</b></center></h3> |
|
<h4>PESTICIDES TO BE USED:</h4> |
|
<ul> |
|
<li>1. Copper oxychloride</li> |
|
<li>2. Streptomycin</li> |
|
<li>3. tetracycline</li> |
|
<li>4. Oxytetracline(Terramycin)</li> |
|
<li>5. Insecticidal soap</li> |
|
<li>6. Horticultural oil</li> |
|
</ul> |
|
<p class="note"><b>* * * IMPORTANT NOTE * * *</b></p> |
|
<p>Be sure to follow local regulations and guidelines for application</p> |
|
|
|
|
|
""" |
|
|
|
elif predicted_label=='Tomato Healthy': |
|
|
|
predicted_label = """<h3 align="center">Tomato Healthy</h3><br><br> |
|
<center>No need use Pesticides</center>""" |
|
else: |
|
predict_label="choose correct image" |
|
|
|
return predicted_label |
|
|
|
|
|
except Exception as e: |
|
print(f"Error: {e}") |
|
return None |
|
|
|
|
|
all_labels = [ |
|
'Tomato Yellow Leaf Curl Virus', |
|
'Tomato Target Spot', |
|
'Tomato Spider mites', |
|
'Tomato Septoria leaf spot', |
|
'Tomato Mosaic virus', |
|
'Tomato Leaf Mold', |
|
'Tomato Late blight', |
|
'Tomato Healthy', |
|
'Tomato Early blight', |
|
'Tomato Bacterial spot' |
|
] |
|
|
|
|
|
def gradio_predict(image_file): |
|
return predict_disease(image_file, model, all_labels) |
|
|
|
|
|
gr_interface = gr.Interface( |
|
fn=gradio_predict, |
|
inputs=gr.Image(type="filepath"), |
|
outputs="html", |
|
title="Tomato Disease Predictor", |
|
description="Upload an image of a plant to predict the disease.", |
|
) |
|
|
|
|
|
|
|
gr_interface.launch(share=True) |