Spaces:
Sleeping
Sleeping
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')}")
|