Spaces:
Build error
Build error
| import os | |
| import json | |
| from PIL import Image | |
| import numpy as np | |
| import tensorflow as tf | |
| import streamlit as st | |
| import matplotlib.pyplot as plt | |
| # Load the pre-trained model and class indices | |
| working_dir = os.path.dirname(os.path.abspath(__file__)) | |
| model_path = "crop_disease_detection_model.h5" | |
| model = tf.keras.models.load_model(model_path) | |
| class_indices = json.load(open("class_indices.json")) | |
| # Function to Load and Preprocess the Image using Pillow | |
| def load_and_preprocess_image(image_path, target_size=(224, 224)): | |
| img = Image.open(image_path) | |
| img = img.resize(target_size) | |
| img_array = np.array(img) | |
| img_array = np.expand_dims(img_array, axis=0) | |
| img_array = img_array.astype('float32') / 255. | |
| return img_array | |
| # Function to Predict the Class of an Image | |
| def predict_image_class(model, img_array, class_indices): | |
| predictions = model.predict(img_array) | |
| predicted_class_index = np.argmax(predictions, axis=1)[0] | |
| predicted_class_name = class_indices[str(predicted_class_index)] | |
| confidence_score = predictions[0][predicted_class_index] | |
| return predicted_class_name, confidence_score | |
| # Streamlit App | |
| st.title('INTELLEGENT CROP DISEASE DETECTION') | |
| # Upload and preprocess the image only once | |
| uploaded_image = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"]) | |
| if uploaded_image is not None: | |
| img_array = load_and_preprocess_image(uploaded_image) | |
| st.session_state.img_array = img_array | |
| st.session_state.image_uploaded = True | |
| # Display tabs for Identification and Visualization side by side | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| if st.button('Identification'): | |
| st.session_state.tab_selected = 'Identification' | |
| with col2: | |
| if st.button('Visualization'): | |
| st.session_state.tab_selected = 'Visualization' | |
| selected_tab = st.session_state.get('tab_selected', 'Identification') | |
| if st.session_state.get('image_uploaded', False): | |
| if selected_tab == 'Identification': | |
| st.header('Plant Disease Identification') | |
| st.image(uploaded_image, caption='Uploaded Image', use_column_width=False) | |
| predicted_class, confidence_score = predict_image_class(model, img_array, class_indices) | |
| st.write(f'Prediction: {predicted_class} ({confidence_score:.2f} confidence)') | |
| elif selected_tab == 'Visualization': | |
| st.header('Confidence Scores Visualization') | |
| plt.figure(figsize=(12, 6)) # Smaller graph size | |
| plt.bar(class_indices.values(), model.predict(img_array)[0]) | |
| plt.xlabel('Class') | |
| plt.ylabel('Confidence Score') | |
| plt.xticks(rotation=90, ha='right') | |
| plt.title('Confidence Scores for Predicted Classes') | |
| st.pyplot(plt) | |