|
import streamlit as st |
|
import numpy as np |
|
import tensorflow as tf |
|
import pandas as pd |
|
from sklearn.preprocessing import MinMaxScaler |
|
|
|
|
|
model = tf.keras.models.load_model('models/emotion_model') |
|
|
|
|
|
def predict_emotion(spO2, heart_rate, body_temp): |
|
scaler = MinMaxScaler() |
|
scaler.fit(pd.DataFrame(columns=['spO2', 'heart-rate', 'body-temperature'], data=[[70, 50, 95.0], [100, 120, 105.0]])) |
|
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') |
|
|
|
|
|
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) |
|
|
|
|
|
if st.sidebar.button('Predict Emotion'): |
|
|
|
predicted_emotions = predict_emotion(spO2, heart_rate, body_temp) |
|
emotions = ['Anger', 'Fear', 'Sadness', 'Disgust', 'Surprise', 'Anticipation', 'Trust', 'Joy'] |
|
|
|
|
|
st.subheader('Predicted Emotions') |
|
for emotion, score in zip(emotions, predicted_emotions): |
|
st.write(f'{emotion}: {score:.2f}') |
|
|
|
|
|
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() |
|
|