Spaces:
Runtime error
Runtime error
import cv2 | |
import gradio as gr | |
import numpy as np | |
from deepface import DeepFace | |
# Load the pre-trained emotion detection model | |
model = DeepFace.build_model("Emotion") | |
# Define emotion labels | |
emotion_labels = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral'] | |
# Load face cascade classifier | |
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') | |
def predict_emotion(frame): | |
# Convert frame to grayscale | |
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
# Detect faces in the frame | |
faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |
for (x, y, w, h) in faces: | |
# Extract the face ROI (Region of Interest) | |
face_roi = gray_frame[y:y + h, x:x + w] | |
# Resize the face ROI to match the input shape of the model | |
resized_face = cv2.resize(face_roi, (48, 48), interpolation=cv2.INTER_AREA) | |
# Normalize the resized face image | |
normalized_face = resized_face / 255.0 | |
# Reshape the image to match the input shape of the model | |
reshaped_face = normalized_face.reshape(1, 48, 48, 1) | |
# Predict emotions using the pre-trained model | |
preds = model.predict(reshaped_face)[0] | |
emotion_idx = preds.argmax() | |
emotion = emotion_labels[emotion_idx] | |
# Draw rectangle around face and label with predicted emotion | |
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2) | |
cv2.putText(frame, emotion, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2) | |
return frame | |
# Gradio UI | |
iface = gr.Interface(fn=predict_emotion, inputs="webcam", outputs="image") | |
iface.launch() | |