File size: 4,695 Bytes
9768d85
b2998d7
6a7b9c9
525afe5
077d918
b2998d7
08b27af
077d918
b2998d7
 
 
 
 
 
 
 
 
 
 
 
525afe5
 
 
 
 
 
 
 
 
 
 
 
 
 
b2998d7
 
 
 
 
077d918
 
c12c524
b2998d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9768d85
b2998d7
077d918
b2998d7
077d918
b2998d7
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import streamlit as st
import requests
import os
import time  # Import time for sleep

API_URL = "https://api-inference.huggingface.co/models/ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
headers = {"Authorization": f"Bearer {os.getenv('HF_API_TOKEN')}"}

emotion_to_neg_rate = {
    'angry': 70.0,
    'calm': 5.0,
    'disgust': 60.0,
    'fearful': 50.0,
    'happy': 5.0,
    'neutral': 20.0,
    'sad': 80.0,
    'surprised': 10.0
}

def get_emotion(audio_file):
    for _ in range(5):  # Retry up to 5 times
        response = requests.post(API_URL, headers=headers, files={"file": audio_file})
        if response.status_code == 200:
            return response.json()
        elif response.status_code == 503:  # Service Unavailable
            error_info = response.json()
            if "error" in error_info and "loading" in error_info["error"]:
                st.write("Model is currently loading. Please wait...")
                time.sleep(10)  # Wait for 10 seconds before retrying
            else:
                return {"error": response.text}
        else:
            return {"error": response.text}
    return {"error": "Model is taking too long to load or an unexpected error occurred."}

def get_neg_rate(emotion):
    return emotion_to_neg_rate.get(emotion, 30.0)

def evaluate_depression(neg_rate):
    if neg_rate <= 30.0:
        if neg_rate <= 5.0:
            return "just chill and relax"
        else:
            return "***   MILD DEPRESSION  ***"
        if neg_rate <= 10.0:
            return ("Everything is a-okay! There's absolutely nothing wrong 馃榿馃榿\n"
                    "You're probably cuddling a fluffy kitten right now")
        elif neg_rate > 10.0 and neg_rate <= 20.0:
            return ("You are a bit frustrated and disappointed\n"
                    "But you're easily distracted and cheered with little effort 馃榿馃榿")
        elif neg_rate > 20.0 and neg_rate <= 30.0:
            return ("Things are bothering you but you're coping up\n"
                    "You might be over tired and hungry\n"
                    "The emotional equivalent of a headache 馃榿馃榿")
    elif neg_rate > 30.0 and neg_rate <= 60.0:
        if neg_rate > 30.0 and neg_rate <= 40.0:
            return ("Today is slightly a bad day for you.\n"
                    "You still have the skills to get through it, but be gentle with yourself\n"
                    "Use self-care strategies 馃榿馃榿")
        elif neg_rate > 40.0 and neg_rate <= 50.0:
            return ("Your mental health is starting to impact your everyday life.\n"
                    "Easy things are becoming difficult")
        elif neg_rate > 50.0 and neg_rate <= 60.0:
            return ("You are not able to do things the way you usually do them due to your mental health.\n"
                    "Impulsive and compulsive thoughts might be difficult to cope with")
    elif neg_rate > 60.0 and neg_rate <= 100.0:
        if neg_rate > 60.0 and neg_rate <= 70.0:
            return ("You are losing interest in the activities that used to be enjoyable.\n"
                    "You should definitely seek help\n"
                    "This is becoming serious 鈽光樄")
        elif neg_rate > 70.0 and neg_rate <= 80.0:
            return ("You can't ignore your struggles now; it's HIGH time!\n"
                    "You may have issues sleeping, eating, having fun, socializing, and work/study\n"
                    "Your mental health is affecting almost all parts of your life 鈽光樄")
        elif neg_rate > 80.0 and neg_rate <= 90.0:
            return ("You are at a critical point!!!\n"
                    "You aren't functioning anymore and need urgent help.\n"
                    "You may be a risk to yourself or others if left untreated 鈽光樄")
        elif neg_rate > 90.0 and neg_rate <= 100.0:
            return ("The worst mental and emotional distress possible.\n"
                    "You can't imagine things getting any better now and you might think it's all over for you (SUICIDE).\n"
                    "Contact a crisis line or get started with treatment immediately. 鈽光樄")

st.title("Emotion Detection and Depression Analysis")

audio_file = st.file_uploader("Upload an audio file", type=["wav", "mp3"])

if audio_file:
    st.audio(audio_file, format='audio/wav')
    emotion_response = get_emotion(audio_file)
    
    if "error" not in emotion_response:
        emotion = emotion_response.get("emotion", "neutral")
        neg_rate = get_neg_rate(emotion)
        result = evaluate_depression(neg_rate)
        st.write(result)
    else:
        st.error(f"Error fetching emotion from API: {emotion_response.get('error')}")