grower / app.py
etahamad's picture
add model v5
a113afc verified
import streamlit as st
from PIL import Image
import numpy as np
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import tensorflow_hub as hub
hide_streamlit_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
</style>
"""
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
st.title('Plant Disease Prediction')
st.write("This model is capable of predicting plant disease as a demo")
def main():
file_uploaded = st.file_uploader('Choose an image...', type='jpg')
if file_uploaded is not None:
image = Image.open(file_uploaded)
st.write("Uploaded Image.")
figure = plt.figure()
plt.imshow(image)
plt.axis('off')
st.pyplot(figure)
result, confidence = predict_class(image)
st.write('Prediction : {}'.format(result))
st.write('Confidence : {}%'.format(confidence))
imgSize = 256
def predict_class(image):
with st.spinner('Loading Model...'):
classifier_model = keras.models.load_model(
r'plant_model_v5-beta.h5', compile=False)
shape = ((imgSize, imgSize, 3))
model = keras.Sequential(
[hub.KerasLayer(classifier_model, input_shape=shape)])
test_image = image.resize((imgSize, imgSize))
test_image = keras.preprocessing.image.img_to_array(test_image)
test_image /= 220.0
test_image = np.expand_dims(test_image, axis=0)
class_name = {0: 'Apple___Apple_scab', 1: 'Apple___Black_rot', 2: 'Apple___Cedar_apple_rust', 3: 'Apple___healthy', 4: 'Not a plant', 5: 'Blueberry___healthy', 6: 'Cherry___Powdery_mildew', 7: 'Cherry___healthy', 8: 'Corn___Cercospora_leaf_spot Gray_leaf_spot', 9: 'Corn___Common_rust', 10: 'Corn___Northern_Leaf_Blight', 11: 'Corn___healthy', 12: 'Grape___Black_rot',
13: 'Grape___Esca_(Black_Measles)', 14: 'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)', 15: 'Grape___healthy', 16: 'Orange___Haunglongbing_(Citrus_greening)', 17: 'Peach___Bacterial_spot', 18: 'Peach___healthy', 19: 'Pepper,_bell___Bacterial_spot', 20: 'Pepper,_bell___healthy', 21: 'Potato___Early_blight', 22: 'Potato___Late_blight', 23: 'Potato___healthy', 24: 'Raspberry___healthy', 25: 'Soybean___healthy', 26: 'Squash___Powdery_mildew', 27: 'Strawberry___Leaf_scorch', 28: 'Strawberry___healthy', 29: 'Tomato___Bacterial_spot', 30: 'Tomato___Early_blight', 31: 'Tomato___Late_blight', 32: 'Tomato___Leaf_Mold', 33: 'Tomato___Septoria_leaf_spot', 34: 'Tomato___Spider_mites Two-spotted_spider_mite', 35: 'Tomato___Target_Spot', 36: 'Tomato___Tomato_Yellow_Leaf_Curl_Virus', 37: 'Tomato___Tomato_mosaic_virus', 38: 'Tomato___healthy'}
prediction = model.predict_generator(test_image)
confidence = round(100 * (np.max(prediction[0])), 2)
final_pred = class_name[np.argmax(prediction)]
if confidence < 60:
final_pred = 'Can\'t Predict the disease'
if final_pred != class_name[4] and confidence == 100:
final_pred = 'Not sure about the disease'
return final_pred, confidence
footer = """
<style>
a:link , a:visited{
color: white;
background-color: transparent;
text-decoration: None;
}
a:hover, a:active {
color: red;
background-color: transparent;
text-decoration: None;
}
.footer {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background-color: transparent;
color: black;
text-align: center;
}
</style>
"""
st.markdown(footer, unsafe_allow_html=True)
if __name__ == "__main__":
main()