import streamlit as st import numpy as np import tensorflow as tf import pandas as pd from sklearn.preprocessing import MinMaxScaler # Load the saved model model = tf.keras.models.load_model('models/emotion_model') # Function to preprocess user inputs and perform prediction def predict_emotion(spO2, heart_rate, body_temp): scaler = MinMaxScaler() # Initialize scaler scaler.fit(pd.DataFrame(columns=['spO2', 'heart-rate', 'body-temperature'], data=[[70, 50, 95.0], [100, 120, 105.0]])) # Fit scaler to specified range input_data = np.array([[spO2, heart_rate, body_temp]]) input_data_scaled = scaler.transform(input_data) predicted_emotions = model.predict(input_data_scaled) return predicted_emotions[0] def main(): st.title('Emotion Prediction App') st.sidebar.title('Options') # User input fields st.sidebar.header('User Inputs') spO2 = st.sidebar.slider('Select spO2 level', min_value=70, max_value=100, value=98) heart_rate = st.sidebar.slider('Select heart rate', min_value=50, max_value=120, value=80) body_temp = st.sidebar.slider('Select body temperature', min_value=95.0, max_value=105.0, value=98.6) # Button to trigger emotion prediction if st.sidebar.button('Predict Emotion'): # Perform prediction using the loaded model predicted_emotions = predict_emotion(spO2, heart_rate, body_temp) emotions = ['Anger', 'Fear', 'Sadness', 'Disgust', 'Surprise', 'Anticipation', 'Trust', 'Joy'] # Display predicted emotions st.subheader('Predicted Emotions') for emotion, score in zip(emotions, predicted_emotions): st.write(f'{emotion}: {score:.2f}') # Determine likely emotions and display them likely_emotions = [emotions[i] for i, score in enumerate(predicted_emotions) if score > 0.5] st.success(f'Most likely emotion(s): {", ".join(likely_emotions)}') if __name__ == '__main__': main()