Este proyecto tiene como objetivo reconocer palabras formadas por señas del Lenguaje de Señas Colombiano (LSC) a partir de gestos realizados con la mano frente a una cámara, usando técnicas de Machine Learning (ML) y visión por computador.
Se desarrolló un modelo de clasificación de imágenes entrenado en Google Colab, utilizando dos fuentes principales de datos:
- Un dataset propio, creado por los estudiantes de la asignatura electiva Python de la Universidad Santo Tomás.
- Un dataset de acceso abierto proporcionado por la Universidad del Cauca, disponible en el siguiente DOI:
🔗 https://doi.org/10.1016/j.dib.2024.111213
El dataset complementario de la Universidad del Cauca cuenta con más de 400 imágenes por cada letra, lo que permitió reforzar y mejorar el rendimiento del modelo entrenado. Cabe resaltar que ambos datasets incluyen únicamente gestos estáticos del alfabeto en LSC (por lo tanto, no se incluyen letras como "J" o "H" que requieren movimiento).
- Se aprovechó el curso gratuito de Academy Edutin para aprender sobre el Lenguaje de Señas Colombiano (LSC) y se incorporaron señas adicionales como "rr", que forma parte del abecedario en LSC.
- Todas las imágenes tienen un tamaño de 640x480 píxeles.
- Para el dataset estático:
- Se aplicaron técnicas de data augmentation para aumentar la variabilidad y robustez de los datos.
- A cada imagen se le extrajeron 21 puntos landmarks por mano (coordenadas x, y, z), generando un vector de 63 valores.
Dataset propio de los estudiantes de la electiva Python:
Dataset Universidad del Cauca:
- Google Colab
- Python (Anaconda / Spyder)
- TensorFlow / Keras
- MediaPipe Hands
- OpenCV
- Limpieza y organización del dataset.
- Extracción de características (landmarks) de las manos utilizando MediaPipe, guardando las coordenadas en un archivo
.csv. - Entrenamiento del modelo de clasificación en Google Colab a partir de los valores numéricos del
.csv, representando los puntos clave de la mano en cada imagen. - Exportación del modelo entrenado (.h5) y carga en el entorno de desarrollo Spyder (Anaconda).
- Programación del script (python) para la detección de landmarks en tiempo real mediante MediaPipe para generar palabras.
- Clasificación en tiempo real desde la cámara, utilizando el modelo previamente entrenado.
El modelo fue entrenado utilizando un archivo .csv, el cual contenía la relacion entre:
- Las imágenes del dataset.
- Los landmarks (puntos críticos de la mano) extraídos con MediaPipe, representados mediante sus coordenadas x, y, z.
Se utilizó un modelo secuencial con la siguiente estructura:
- Capa de entrada: recibe los vectores de 63 características (21 puntos * 3 coordenadas).
- Dos capas ocultas: capas densas (fully connected) con funciones de activación
ReLU. - Capa de salida: capa densa con función de activación
Softmax, para la clasificación multiclase de las letras.
- El modelo alcanzó un 70% de precisión en el conjunto de validación.
- El entrenamiento fue realizado en Google Colab, optimizando la función de pérdida
categorical_crossentropycon el optimizadorAdam.
A continuación se muestra la gráfica de la evolución de la precisión durante el entrenamiento:
En la aplicación programada en Python (utilizando Spyder) se integró el modelo entrenado para el reconocimiento de señas. Es importante destacar que el modelo original fue entrenado únicamente con letras estáticas del alfabeto en LSC.
Las letras dinámicas (como "J" o "H") fueron implementadas posteriormente mediante funciones adicionales en Python, aprovechando el análisis de secuencias de landmarks detectados en tiempo real con MediaPipe.
El funcionamiento general de la aplicación se basa en un sistema de captura de imágenes en secuencia, que permite:
-
Detectar si la seña corresponde a una letra estática (clasificada por el modelo) o a una letra dinámica (detectada por las funciones personalizadas de análisis de movimiento).
-
Escribir palabras letra por letra conforme se reconocen las señas frente a la cámara.
-
Utilizar un modo dinámico y un modo estático de forma independiente, optimizando así la precisión de reconocimiento en cada caso.
-
Incorporar funciones especiales mediante teclas de control para gestionar la ejecución:
- d: iniciar la detección.
- r: reiniciar la palabra escrita.
- p: pausar el reconocimiento.
- q: cerrar la cámara y terminar la aplicación.
A continuación se muestra una imagen de la aplicación corriendo en Spyder:
Para garantizar un funcionamiento óptimo de la aplicación, se sugiere tener en cuenta las siguientes recomendaciones:
- Iluminación adecuada: utiliza el sistema en un entorno bien iluminado y con fondo neutro para mejorar la detección de los landmarks de la mano.
- Evitar accesorios: no usar anillos, relojes u otros objetos que puedan interferir con el reconocimiento de la mano.
- Velocidad de captura: la aplicación opera a 3 FPS (frames por segundo) para mantener un equilibrio entre precisión y rendimiento. Aumentar esta tasa puede provocar ralentización del video en tiempo real.
- Distancia a la cámara: mantén una distancia estable y visible frente a la cámara; se recomienda entre 40 cm y 80 cm.
- Uso separado de modos: aunque el sistema permite mezclar letras estáticas y dinámicas, se recomienda utilizar modo dinámico o modo estático por separado para obtener mejores resultados. No cerrar la app forzadamente: utilizar la tecla q para cerrar la cámara correctamente y evitar conflictos en procesos posteriores.
Con estas buenas prácticas, el sistema puede lograr una mayor precisión. Se espera que en caso de ser utilizado pueda ser muy útil para futuros proyectos.




