import streamlit as st from transformers import pipeline import torch # ---- Page Configuration ---- st.set_page_config( page_title="Emotion Prediction App", page_icon="๐ŸŒŸ", layout="centered", initial_sidebar_state="expanded", ) # ---- App Title ---- st.title("๐ŸŒŸ Emotion Prediction App ๐ŸŒˆ") st.subheader("Understand your emotions better with AI-powered predictions!") # ---- Function to Load Emotion Analysis Model ---- @st.cache_resource def load_emotion_model(): try: st.info("โณ Loading the emotion analysis model, please wait...") # Using a publicly available model for emotion analysis emotion_analyzer = pipeline( "text-classification", model="bhadresh-savani/distilbert-base-uncased-emotion", # A valid public model device=0 if torch.cuda.is_available() else -1, # Use GPU if available ) st.success("โœ… Model loaded successfully!") return emotion_analyzer except Exception as e: st.error(f"โš ๏ธ Error loading model: {e}") return None # ---- Load the Model ---- emotion_analyzer = load_emotion_model() # ---- Function for Predicting Emotion ---- def predict_emotion(text): if emotion_analyzer is None: st.error("โš ๏ธ Model not loaded. Please reload the app.") return {"Error": "Emotion analyzer model not initialized. Please try again later."} try: # Analyze emotions result = emotion_analyzer([text]) return {res["label"]: round(res["score"], 4) for res in result} except Exception as e: st.error(f"โš ๏ธ Prediction failed: {e}") return {"Error": f"Prediction failed: {e}"} # ---- Suggesting Activities Based on Emotional State ---- def suggest_activity(emotion_analysis): # Suggest activities based on emotional state max_emotion = max(emotion_analysis, key=emotion_analysis.get) if emotion_analysis else None if max_emotion == 'sadness': return "It's okay to feel sad sometimes. Try taking a 5-minute mindfulness break or a short walk outside to clear your mind." elif max_emotion == 'joy': return "Youโ€™re feeling happy! Keep that positive energy going. How about practicing some deep breathing exercises to maintain your balance?" elif max_emotion == 'fear': return "Feeling anxious? It might help to do a quick breathing exercise or take a walk to ease your mind." elif max_emotion == 'anger': return "It seems like you're angry. Try taking a few deep breaths, or engage in a relaxing mindfulness exercise to calm your nerves." elif max_emotion == 'surprise': return "Youโ€™re surprised! Take a moment to breathe deeply and reflect. A walk might help clear your thoughts." elif max_emotion == 'disgust': return "If youโ€™re feeling disgusted, a change of environment might help. Go for a walk or try a mindfulness technique to relax." elif max_emotion == 'sadness': return "Itโ€™s okay to feel sad. Try grounding yourself with some mindfulness or a breathing exercise." else: return "Keep doing great! If you feel overwhelmed, consider taking a deep breath or going for a short walk." # ---- User Input Section ---- st.write("### ๐ŸŒบ Let's Get Started!") questions = [ "How are you feeling today?", "Describe your mood in a few words.", "What was the most significant emotion you felt this week?", "How do you handle stress or challenges?", "What motivates you the most right now?", ] responses = {} # ---- Ask Questions and Analyze Responses ---- for i, question in enumerate(questions, start=1): st.write(f"#### โ“ Question {i}: {question}") user_response = st.text_input(f"Your answer to Q{i}:", key=f"q{i}") if user_response: with st.spinner("Analyzing emotion... ๐ŸŽญ"): analysis = predict_emotion(user_response) responses[question] = {"Response": user_response, "Analysis": analysis} # Display Emotion Analysis st.success(f"๐ŸŽฏ Emotion Analysis: {analysis}") # Display Activity Suggestion if analysis: max_emotion = max(analysis, key=analysis.get) activity_suggestion = suggest_activity(analysis) st.write(f"### ๐Ÿง˜ Suggested Activity: {activity_suggestion}") # ---- Display Results ---- if st.button("Submit Responses"): st.write("### ๐Ÿ“Š Emotion Analysis Results") if responses: for i, (question, details) in enumerate(responses.items(), start=1): st.write(f"#### Question {i}: {question}") st.write(f"**Your Response:** {details['Response']}") st.write(f"**Emotion Analysis:** {details['Analysis']}") activity_suggestion = suggest_activity(details["Analysis"]) st.write(f"**Suggested Activity:** {activity_suggestion}") else: st.warning("Please answer at least one question before submitting!") # ---- Footer ---- st.markdown( """ --- **Developed using ๐Ÿค— Transformers** Designed for a fun and intuitive experience! ๐ŸŒŸ """ ) # ---- Error Handling and User Suggestions ---- if emotion_analyzer is None: st.error("โš ๏ธ We couldn't load the emotion analysis model. Please check your internet connection or try again later.") st.markdown("๐Ÿ”ง **Troubleshooting Steps:**") st.markdown("1. Ensure you have a stable internet connection.") st.markdown("2. If the issue persists, please refresh the page and try again.") st.markdown("3. Check if the model has been updated or is temporarily unavailable.")