import gradio as gr import tensorflow as tf import numpy as np from tensorflow.keras.preprocessing import image from PIL import Image # Load your trained model model = tf.keras.models.load_model("emotion_model.h5") # Ensure this model is in the repo # Define emotion labels emotion_labels = ['Anger', 'Disgust', 'Fear', 'Happiness', 'Neutral', 'Sadness', 'Surprise', 'Contempt'] # Function for inference def predict_emotion(img): img = img.convert("RGB").resize((48, 48)) # Ensure correct size img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) / 255.0 # Normalize predictions = model.predict(img_array) predicted_class = np.argmax(predictions) confidence = np.max(predictions) return f"Emotion: {emotion_labels[predicted_class]} (Confidence: {confidence:.2f})" # Gradio UI iface = gr.Interface( fn=predict_emotion, inputs=gr.Image(type="pil"), outputs="text", title="Emotion Detection", description="Upload an image, and the AI will predict the emotion.", ) # Run app iface.launch()