import gradio as gr import numpy as np import tensorflow as tf from tensorflow.keras.models import load_model from PIL import Image # Load the model model = load_model("model.h5") # Your class labels (update as per your model) class_names = ['Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral'] # Prediction function def predict_expression(image): try: image = image.convert("RGB") # Ensure 3 channels image = image.resize((224, 224)) # Resize to model's expected input img_array = np.array(image).astype("float32") / 255.0 img_array = img_array.reshape(1, 224, 224, 3) prediction = model.predict(img_array) class_idx = int(np.argmax(prediction)) confidence = float(np.max(prediction)) return f"Expression: {class_names[class_idx]} ({confidence:.2%})" except Exception as e: return f"⚠️ Error: {str(e)}" # Gradio interface iface = gr.Interface( fn=predict_expression, inputs=gr.Image(type="pil"), outputs="text", title="Facial Expression Classifier", description="Upload a face image and get the predicted emotion" ) iface.launch()