import gradio as gr import cv2 import tensorflow as tf import numpy as np from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import load_model # Load the pre-trained model model = tf.keras.models.load_model('Trained_Model.h5') # Define the emotion labels emotion_labels = { 0: 'Angry', 1: 'Disgust', 2: 'Fear', 3: 'Happy', 4: 'Neutral', 5: 'Sad', 6: 'Surprise' } # Create the image generator for preprocessing img_gen = ImageDataGenerator(rescale=1./255) # Define the function to predict emotions def predict_emotion(file): # Load the image or video cap = cv2.VideoCapture(file.name) if cap.isOpened(): ret, frame = cap.read() # Check if it's an image or video if frame is not None: # Preprocess the image img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) img = cv2.resize(img, (48, 48)) img = np.expand_dims(img, axis=-1) img = np.expand_dims(img, axis=0) img = img.astype('float32') img = img_gen.standardize(img) # Predict the emotion prediction = model.predict(img) label = emotion_labels[np.argmax(prediction)] else: label = "No frames found in the video" else: label = "Could not open the file" return label # Create the Gradio interface input_type = gr.inputs.File(label="Upload an image or video to predict emotions") output_type = gr.outputs.Textbox(label="Predicted emotion") title = "Emotion Detection" description = "Upload an image or video to predict the corresponding emotion" iface = gr.Interface(fn=predict_emotion, inputs=input_type, outputs=output_type, title=title, description=description) if __name__ == '__main__': iface.launch(inline=False)