DetectEmotions / app.py
Ahmadkhan12's picture
Update app.py
21ef691 verified
raw
history blame
1.6 kB
import streamlit as st
import numpy as np
from PIL import Image
from transformers import pipeline
# Set the page config
st.set_page_config(page_title="Emotion Recognition App", layout="centered")
st.title("Emotion Recognition App")
# Upload an image
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
# Allocate the Hugging Face pipeline
@st.cache_resource # Cache the model to avoid reloading it
def load_model():
return pipeline("image-classification", model="Xenova/facial_emotions_image_detection")
emotion_classifier = load_model()
# Process the uploaded image
if uploaded_file is not None:
# Check file size to prevent loading large images
if uploaded_file.size > 10 * 1024 * 1024: # 10 MB limit
st.error("File too large. Please upload an image smaller than 10 MB.")
else:
# Open and preprocess the image
image = Image.open(uploaded_file).convert("RGB")
image_resized = image.resize((224, 224)) # Resize to match model input size
# Convert image to numpy array and predict emotion
predictions = emotion_classifier(image_resized)
# Extract the top prediction
if predictions:
top_prediction = predictions[0] # Assuming the model returns a list of predictions
emotion = top_prediction["label"]
confidence = top_prediction["score"]
st.image(image, caption=f"Detected Emotion: {emotion} (Confidence: {confidence:.2f})", use_column_width=True)
else:
st.warning("Unable to determine emotion. Try another image.")