Monitorizar emociones en tiempo real con Python y FER


Este proyecto tiene como objetivo demostrar cómo se pueden detectar y monitorizar emociones en tiempo real con una webcam, empleando la biblioteca FER (Face Emotion Recognition), OpenCV y claro, con Python. 

FER es una biblioteca de Python que facilita la tarea de reconocer emociones en rostros humanos. Utiliza modelos de aprendizaje profundo preentrenados en grandes conjuntos de datos de imágenes de rostros, cada uno etiquetado con una o más emociones.

El uso de FER me va a permitir explicar a los estudiantes de la asignatura de Gestión y Métricas en Redes Sociales, sobre las posibilidades del reconocimiento de las emociones en tiempo real en contextos donde nos ayude para la toma de decisiones.

Para este fin, identificaremos las emociones y las mostramos en un gráfico en tiempo real. 

En proyectos anteriores compartí dos artículos, en el primero se trataba de contar rostros, un punto básico para iniciar en el tema de Visión por Computadora, en el segundo se buscaba reconocer el sentimiento y generar una estadística en tiempo real, accesible desde Google Sheets. El punto fuerte era el empleo de TensorFlow y Keras.

Configuración Inicial

El código comienza desactivando la GPU para TensorFlow y de este modo asegurar que el código se ejecute utilizando solo la CPU, haciendo el ejemplo accesible para aquellos que no disponen de una configuración de GPU.

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

  • Utilizamos cv2 para la captura de video y la biblioteca FER para detectar emociones. Matplotlib se emplea para crear gráficos en tiempo real que visualizan las emociones detectadas.
  • Se inicializa el detector de emociones y se prepara un diccionario de conteo de frecuencia de cada emoción detectada.
  • El video se captura en tiempo real a través de la webcam. Cada fotograma capturado se procesa para detectar emociones:

ret, frame = cap.read()
emotions_detected = detector.detect_emotions(frame)
  • Por cada emoción detectada, se actualiza el gráfico de barras. El código muestra cómo se dibuja un rectángulo alrededor del rostro detectado y se etiqueta la emoción con su puntuación.
  • Los resultados se visualizan en una ventana que muestra las emociones detectadas sobre el video capturado, y en un gráfico de barras que se actualiza en tiempo real con la frecuencia de cada emoción detectada.
  • Un problema a resolver fue la gestión de la actualización en tiempo real del gráfico de barras sin que esto afectara el rendimiento de la captura de video. La solución fue optimizar la función de refresco del gráfico y ajustar su tasa.
  • Una posible optimización sería utilizar la GPU para acelerar el procesamiento de la detección de emociones, además de explorar otras bibliotecas de visualización que puedan manejar actualizaciones en tiempo real con mayor eficiencia.
Se debe indicar que para el caso de FER, se analizan siete emociones.

emotion_counts = {
    'angry': 0,
    'disgust': 0,
    'fear': 0,
    'happy': 0,
    'sad': 0,
    'surprise': 0,
    'neutral': 0
}

Un buen ejercicio para echar a volar la imaginación con las posibilidades de esta librería de Python.

Entradas más populares de este blog

Texto a Voz con HTML y Javascript

Experiencia VR Interactiva con A-Frame: Tutorial para Principiantes

Automatización en la redacción con Python, inteligencia artificial y web scraping