import streamlit as st import tensorflow as tf from tensorflow.keras.preprocessing.image import load_img, img_to_array import numpy as np from PIL import Image import io st.set_page_config( page_title="Waste Classifier", layout="centered" ) @st.cache_resource def load_model(): return tf.keras.models.load_model('CNN_Prak4_ML.h5') def preprocess_image(img): img = img.resize((244, 244)) img = img_to_array(img) img = np.expand_dims(img, axis=0) img = img / 255.0 return img LABEL_CLASS = { 0: "Cardboard", 1: "Glass", 2: "Metal", 3: "Paper", 4: "Textile Trash", 5: "Vegetation" } def main(): st.title("Waste Classifier") st.write("Upload an image and the model will predict waste image") uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) if uploaded_file is not None: image = Image.open(uploaded_file) st.image(image, caption='Uploaded Image', use_column_width=True) if st.button('Predict'): model = load_model() processed_image = preprocess_image(image) with st.spinner('Predicting...'): prediction = model.predict(processed_image) pred_class = LABEL_CLASS[np.argmax(prediction)] confidence = float(prediction.max()) * 100 st.success(f'Prediction: {pred_class.upper()}') st.info(f'Confidence: {confidence:.2f}%') st.write("Class Probabilities:") for i, prob in enumerate(prediction[0]): st.progress(float(prob)) st.write(f"{LABEL_CLASS[i]}: {float(prob)*100:.2f}%") if __name__ == "__main__": main()