sahlnizar's picture
Rename streamlit_app.py to app.py
0c40b0a verified
import streamlit as st
from PIL import Image
import numpy as np
import tensorflow as tf
from werkzeug.utils import secure_filename
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
class_names = ['Potato___Early_blight', 'Potato___Late_blight', 'Potato___healthy']
def predict(model, img):
img_array = tf.keras.preprocessing.image.img_to_array(img)
img_array = tf.expand_dims(img_array, 0)
predictions = model.predict(img_array)
predictions_arr = [round(100 * i, 2) for i in predictions[0]]
predicted_class = class_names[np.argmax(predictions[0])]
confidence = round(100 * (np.max(predictions[0])), 2)
return predicted_class, predictions_arr
model = tf.keras.models.load_model('potato_model.h5', compile=False)
def main():
st.set_page_config(page_title="Potato Disease Classifier")
st.sidebar.title("Potato Disease Classifier")
st.sidebar.info("Upload an image of a potato leaf to detect early or late blight.")
st.title("Potato Disease Detection")
uploaded_file = st.file_uploader("Upload a potato leaf image",type=['jpg','png','jpeg'])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image,caption="Uploaded Image",use_column_width=True)
image = image.resize((256,256))
img_arr = np.array(image)
predicted_class,predictions=predict(model,img_arr)
response = {
"predicted_class": predicted_class,
"early": f"{predictions[0]:.2f}%",
"late": f"{predictions[1]:.2f}%",
"healthy": f"{predictions[2]:.2f}%"
}
st.success(f"Predicted Class : {response['predicted_class']}",icon="βœ…")
st.write("Probabilities:")
col1,col2,col3 = st.columns(3)
col1.metric("Early Blight" , f"{response['early']}", f"{response['early']}")
col2.metric("Late Blight" , f"{response['late']}", f"{response['late']}")
col3.metric("Healthy" , f"{response['healthy']}", f"{response['healthy']}")
if __name__ == "__main__":
main()