Este proyecto forma parte de mi trabajo final de máster de Inteligencia Artificial. El objetivo principal es implementar un sistema de interacción con el ordenador que permita a los usuarios utilizar su mirada como input, así como realizar acciones mediante gestos o movimientos de la cabeza y/o la cara, utilizando técnicas avanzadas de computer vision.
Este proyecto facilita la interacción con dispositivos mediante el seguimiento de la mirada (gaze tracking), la predicción del punto en pantalla de la mirada y el reconocimiento de gestos faciales. Esto permite a los usuarios controlar el ordenador sin necesidad de utilizar sus manos, lo que puede ser de gran utilidad en aplicaciones de accesibilidad, entretenimiento o escritura entre otras opciones.
- Desarrollo de un Sistema de Gaze Tracking: Implementar un sistema robusto que sea capaz de predecir el vector de la mirada del usuario.
- Predicción del punto de mirada en pantalla: Implementar una solucion que resuelva la predicción del punto de mirada en pantalla mediante la integración de técnicas geométricas y modelos de Machine Learning
- Interacción Mediante Gestos Faciales: Desarrollar métodos para reconocer gestos faciales y movimientos de la cabeza, permitiendo realizar acciones en el ordenador sin contacto físico.
Para ejecutar el proyecto, asegúrate de instalar las dependencias necesarias. Puedes instalarlas ejecutando:
pip install -r requirements.txt- El proyecto incluye el script
src/data_collection/camera_calibration.pypara extraer la matriz de la cámara (distancias focales y coeficientes de distorsión), archivo necesario para ejecutar la demo. Para ello únicamente se necesitará un chess grid. - (Opcional) Preprocesar el dataset MPIIFaceGaze con
src/train/preprocess_mpii_dataset.pyy entrenar el modelo con tus propios parámetros usandosrc/train/training.py(o usar el modelo subido) - Realizar el fine-tuning final mediante la recopilacion de imagenes propias usando
src/data_collection/data_collection.pyy el posterior entrenamiento del modelo de regresiónsrc/regressor/gaze_csv.pyysrc/regressor/regression.py. Como se puede comprobar en las gráficas de resultados del modelo de regresión, cuantas más imágenes utilices, mejores resultados obtendrás. - Ejecutar el script de demostracion :
python src/demo/main_demo.pyPuedes introducir los siguientes parámetros para probar las diferentes funcionalidades:
optional arguments:
-h, --help Show this help message and exit
--calibration_matrix_path Ruta al archivo de la matriz de calibración de la cámara
--model_path Ruta al modelo de prediccioón de mirada
--monitor_mm Tamaño del monitor en milímetros (ancho,alto)
--monitor_pixels Tamaño del monitor en píxeles (ancho,alto)
--visualize_preprocessing, -vp Visualizar las imágenes preprocesadas de cara y ojos
--smoothing, -s Aplicar suavizado EMA al punto de predicción de mirada
--heatmap, -hm Mostrar heatmap variable de mirada en una imagen
--keyboard, -k Mostrar un teclado en pantalla para escribir texto mediante la mirada y gestos faciales (por dejecto, fruncido del ceño)En la carpeta docs se encuentra la arquitectura de red utilizada para la predicción del vector de mirada, y todos los archivos y código utilizado para conseguirla. Se han utilizado los recursos del respositorio PlotNeuralNet de Haris Iqbal para graficar la estructura por capas mediante LaTex. En caso de ver su funcionamiento puedes usar un simple editor de Tex y compilar los archivos .tex.
A continuación se muestran las siguientes comparativas de errores angulares obtenidos con diferentes modelos:
-
Primeros modelos de seguimiento de mirada en comparación con el modelo presentado junto al dataset de MPIIGaze: Appearance-Based Gaze Estimation in the Wild, Zhang et al. (2015)

-
Modelo presentado junto al dataset utilizado en este proyecto (MPIIFaceGaze) en comparación con modelos más modernos basados en CNN: It’s Written All Over Your Face: Full-Face Appearance-Based Gaze Estimation" de Zhang et al. (2017)

-
Modelo propuesto (en amarillo, a la izquierda) en comparación con los modelos más actuales de prediccion de mirada y el modelo presentado junto al dataset utilizado para el entenamiento (MPIIFaceGaze) (azul a la derecha).

-
Gráficas de error angular obtenido en los diferentes modelos entrenados en este proyecto con el dataset MPIIFaceGaze

A continuación se muestran las graficas de error en píxeles mediante el modelo regresivo a medida que aumenta el número de datos:
![]()
A continuación se muestran las graficas de dispersión de paridad (Predicción vs Real) utiliza para medir la bondad de ajuste de las predicciones de coordenadas para el eje X y el eje Y:
Puedes encontrar más ejemplos en el directorio docs/demo_examples/
![]()