import streamlit as st from PIL import Image import numpy as np from tensorflow.keras.models import load_model # Define a function to make predictions on a single image def predict_single_image(image, model): try: # Resize and preprocess the image img = image.resize((128, 128)) img = np.array(img) / 255.0 # Normalization img = np.expand_dims(img, axis=0) # Add batch dimension # Make prediction using the provided model prediction = model.predict(img) # Thresholding prediction threshold = 0.5 prediction_class = (prediction > threshold).astype(int) # Interpret prediction if prediction_class == 1: return "With Mask" else: return "Without Mask" except Exception as e: st.error(f"Error occurred during prediction: {str(e)}") # Load the model from .h5 file @st.cache(allow_output_mutation=True) def load_model_from_h5(): try: return load_model('model.h5') except Exception as e: st.error(f"Error occurred while loading the model: {str(e)}") # Streamlit app def main(): # App title and description st.title("Face Mask Detection App") st.write("Upload an image and click 'Predict' to see the prediction.") # Custom CSS for styling custom_css = """ """ st.markdown(custom_css, unsafe_allow_html=True) uploaded_file = st.file_uploader("", type=["jpg", "png", "jpeg"]) if uploaded_file is not None: # Load the image image = Image.open(uploaded_file) st.image(image, caption='Uploaded Image.', use_column_width=True) # Button to make prediction if st.button('Predict', key='predict_button'): # Load the model from .h5 file model_h5 = load_model_from_h5() if model_h5: # Make predictions using the provided model prediction = predict_single_image(image, model_h5) if prediction: st.success(f"Prediction: {prediction}") if __name__ == '__main__': main()