| """ |
| Emotion Detection - Hugging Face Spaces (CPU) |
| |
| Gradio app for free deployment on HF Spaces. |
| DistilBERT is small enough (~268MB) for fast CPU inference. |
| """ |
|
|
| import gradio as gr |
| from transformers import pipeline |
|
|
| EMOJI_MAP = { |
| "sadness": "π’", |
| "joy": "π", |
| "love": "β€οΈ", |
| "anger": "π‘", |
| "fear": "π¨", |
| "surprise": "π²", |
| } |
|
|
| LABEL_MAP = { |
| "LABEL_0": "sadness", |
| "LABEL_1": "joy", |
| "LABEL_2": "love", |
| "LABEL_3": "anger", |
| "LABEL_4": "fear", |
| "LABEL_5": "surprise", |
| } |
|
|
| classifier = pipeline( |
| "text-classification", |
| model="./models/emotion_model", |
| tokenizer="./models/emotion_model", |
| ) |
|
|
|
|
| def predict(text: str) -> str: |
| if not text.strip(): |
| return "Please enter some text." |
|
|
| result = classifier(text)[0] |
|
|
| raw_label = result["label"] |
| emotion = LABEL_MAP.get(raw_label, raw_label) |
| confidence = result["score"] |
| emoji = EMOJI_MAP.get(emotion, "") |
|
|
| return f"{emoji} **{emotion.upper()}**\n\nConfidence: {confidence:.4f}" |
|
|
|
|
| examples = [ |
| ["I am so happy today, everything is going great!"], |
| ["I feel terrible and nothing seems to work out."], |
| ["This is absolutely terrifying, I can't stop shaking."], |
| ["I can't believe you would do something like that to me!"], |
| ["You are the most wonderful person I have ever met."], |
| ["Wow, I never expected that to happen!"], |
| ] |
|
|
| demo = gr.Interface( |
| fn=predict, |
| inputs=gr.Textbox( |
| label="Enter text", |
| placeholder="Type a sentence to detect its emotion...", |
| lines=3, |
| ), |
| outputs=gr.Markdown(label="Prediction"), |
| title="Emotion Detection from Text", |
| description=( |
| "Detects emotions in English text using a fine-tuned **DistilBERT** model. " |
| "Classifies into 6 categories: sadness, joy, love, anger, fear, surprise. " |
| "Achieves **93.75% accuracy** on the test set." |
| ), |
| examples=examples, |
| theme=gr.themes.Soft(), |
| flagging_mode="never", |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |
|
|