user-anto's picture
Added application file
baf2af5
from pathlib import Path
import gradio as gr
from transformers import pipeline
bg_img = Path("faces.jpeg")
model_id = 'user-anto/bert-emotion-classifier'
classifier = pipeline('text-classification', model=model_id)
label_map = {
"label_0": "neutral", "label_1": "anger", "label_2": "love",
"label_3": "fear", "label_4": "hate", "label_5": "happiness",
"label_6": "sadness", "label_7": "surprise"
}
emoji_map = {
"neutral": "😐", "anger": "😠", "love": "❀",
"fear": "😨", "hate": "🀬", "happiness": "😊",
"sadness": "😒", "surprise": "😲"
}
def predict_emotion(text):
if not text:
return ""
pred = classifier(text)[0]
label_raw = pred["label"].lower()
label = label_map[label_raw]
score = pred["score"] * 100
emoji = emoji_map.get(label, "")
return f"{label.capitalize()} {emoji} ({score:.1f}%)"
with gr.Blocks(
css=f"""
/* Ensure the body and html take full height */
html, body {{
height: 100%;
margin: 0;
padding: 0;
overflow: hidden; /* Hide scrollbars if content is within view */
}}
/* Apply background image to the body or the main Gradio container */
body {{
background-image: url("file/{bg_img}"); /* Use the background image */
background-size: cover; /* Cover the entire area */
background-position: center; /* Center the image */
background-repeat: no-repeat; /* Do not repeat the image */
background-attachment: fixed; /* Fix the background image during scroll */
}}
/* Main Gradio container styling */
.gradio-container {{
padding: 20px; /* Add some padding around the content */
color:white; /* Sets text color to white */
text-shadow:1px 1px 2px black; /* Adds text shadow for better readability */
display: flex; /* Use flexbox for centering */
flex-direction: column; /* Stack items vertically */
justify-content: center; /* Center content vertically */
align-items: center; /* Center content horizontally */
min-height: 100vh; /* Ensure container takes full viewport height */
box-sizing: border-box; /* Include padding in element's total width and height */
background: rgba(0,0,0,0.5); /* Semi-transparent overlay to make text more readable */
}}
/* Target specific Gradio components to refine their appearance over the background */
.gr-textbox, .gr-markdown {{
background: rgba(0,0,0,0.5); /* Slightly transparent dark background for readability */
border-radius: 8px; /* Rounded corners */
padding: 15px; /* Add padding inside components */
box-shadow: 0 4px 8px rgba(0,0,0,0.2); /* Subtle shadow */
}}
input[type='text'], textarea {{
background: rgba(255,255,255,0.1); /* Slightly transparent white background for input fields */
color: white; /* White text color */
border: 1px solid rgba(255,255,255,0.3); /* Light border */
border-radius: 5px; /* Rounded corners for input fields */
padding: 10px; /* Padding for input fields */
}}
/* Style for the button */
.gr-button {{
background: linear-gradient(145deg, #007bff, #0056b3); /* Blue gradient */
color: orange;
border: none;
border-radius: 8px;
padding: 10px 20px;
font-size: 1.1em;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}}
.gr-button:hover {{
background: linear-gradient(145deg, #0056b3, #007bff);
box-shadow: 0 6px 10px rgba(0, 0, 0, 0.2);
transform: translateY(-2px);
}}
/* Styling for the Markdown headlines */
.gradio-container h2 {{
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Modern font */
color: #FFD700; /* Gold color for headlines */
text-align: center;
padding: 10px 20px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.15); /* Slightly transparent background */
backdrop-filter: blur(5px); /* Frosted glass effect */
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); /* Deeper shadow */
margin-bottom: 20px;
letter-spacing: 1.5px; /* Spacing between letters */
text-transform: uppercase; /* Uppercase text */
border: 1px solid rgba(255, 215, 0, 0.5); /* Gold border */
}}
.gradio-container h3 {{ /* If you use h3, it will also be styled */
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
color: #ADD8E6; /* Light blue color for sub-headlines */
text-align: center;
margin-bottom: 15px;
text-shadow: 1px 1px 3px rgba(0,0,0,0.5);
}}
"""
,
) as demo:
with gr.Column(
) as main_content_column:
gr.Markdown("## 🧠 BERT Emotion Classifier")
gr.Markdown("### Enter a sentence and see what BERT detects.")
with gr.Row():
text_input = gr.Textbox(label="Input Text", placeholder="Type your sentence here...")
predict_button = gr.Button("Predict Emotion")
output = gr.Textbox(label="Predicted Emotion")
predict_button.click(fn=predict_emotion, inputs=text_input, outputs=output)
if __name__ == "__main__":
demo.launch(share=True)