Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from transformers import Wav2Vec2ForSequenceClassification, Wav2Vec2Tokenizer | |
| import torch | |
| import numpy as np | |
| import io | |
| # Load the model and tokenizer | |
| model_name = "harshit345/xlsr-wav2vec-speech-emotion-recognition" | |
| model = Wav2Vec2ForSequenceClassification.from_pretrained(model_name) | |
| tokenizer = Wav2Vec2Tokenizer.from_pretrained(model_name) | |
| def analyze_emotion(audio_bytes): | |
| audio_input = tokenizer(audio_bytes, return_tensors="pt", padding="longest") | |
| with torch.no_grad(): | |
| logits = model(**audio_input).logits | |
| prob = torch.sigmoid(logits).numpy().flatten() | |
| neg_rate = prob[0] * 100 # Assuming the first element is the negative emotion probability | |
| if neg_rate <= 30.0: | |
| if neg_rate <= 5.0: | |
| return "just chill and relax" | |
| elif neg_rate <= 10.0: | |
| return (f"*** MILD DEPRESSION ***\n" | |
| f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tEverything is a-okay! There's absolutely nothing wrong 馃榿馃榿\n" | |
| f"\t\tYou're probably cuddling a fluffy kitten right now") | |
| elif neg_rate <= 20.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYou are a bit frustrated and disappointed\n" | |
| f"\t\tBut you're easily distracted and cheered with little effort 馃榿馃榿") | |
| elif neg_rate <= 30.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tThings are bothering you but you're coping up\n" | |
| f"\t\tYou might be over tired and hungry\n" | |
| f"\t\tThe emotional equivalent of a headache 馃榿馃榿") | |
| elif neg_rate <= 60.0: | |
| if neg_rate <= 40.0: | |
| return (f"*** MODERATE DEPRESSION ***\n" | |
| f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tToday is slightly bad for you.\n" | |
| f"\t\tYou still have the skills to get through it, but be gentle with yourself\n" | |
| f"\t\tUse self-care strategies 馃榿馃榿") | |
| elif neg_rate <= 50.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYour mental health is starting to impact your everyday life.\n" | |
| f"\t\tEasy things are becoming difficult") | |
| elif neg_rate <= 60.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYou are not able to do things the way usually you do them due to your mental health.\n" | |
| f"\t\tImpulsive and compulsive thoughts might be difficult to cope with") | |
| elif neg_rate <= 100.0: | |
| if neg_rate <= 70.0: | |
| return (f"*** SEVERE DEPRESSION ***\n" | |
| f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYou are losing interest in the activities that used to be enjoyable.\n" | |
| f"\t\tYou should definitely seek help\n" | |
| f"\t\tThis is becoming serious 鈽光樄") | |
| elif neg_rate <= 80.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYou can't ignore your struggles now, It's HIGH time!.\n" | |
| f"\t\tYou may have issues sleeping, eating, having fun, socializing, and work/study\n" | |
| f"\t\tYour mental health is affecting almost all parts of your life 鈽光樄") | |
| elif neg_rate <= 90.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tYou are at a critical point !!!\n" | |
| f"\t\tYou aren't functioning anymore and need urgent help.\n" | |
| f"\t\tYou may be a risk to yourself or others if left untreated 鈽光樄") | |
| elif neg_rate <= 100.0: | |
| return (f"\nDepression Scale Detected : {round(neg_rate) / 10}\n" | |
| f"My Response :\tThe worst mental and emotional distress possible.\n" | |
| f"\t\tYou can't imagine things getting any better now and you might think it's all over for you (SUICIDE).\n" | |
| f"\t\tContact crisis line or get started for the treatment immediately. 鈽光樄") | |
| st.title("Emotion Detection App") | |
| uploaded_file = st.file_uploader("Choose an audio file", type=["wav"]) | |
| if uploaded_file is not None: | |
| audio_bytes = uploaded_file.read() | |
| result = analyze_emotion(audio_bytes) | |
| st.write(result) | |