Introducción
Este proyecto de fin de grado tiene como objetivo desarrollar un sistema de identificación de patrones de marcha (gait identification) basado en inteligencia artificial. Para ello, se ha trabajado con datos recogidos por los calcetines inteligentes Sensoria Smart Socks, y se han almacenado directamente en la base de datos InfluxDB.
Los principales objetivos del proyecto son:
Preprocesar los datos crudos obtenidos de los sensores.
Extraer representaciones latentes usando modelos autoencoder.
Clasificar los segmentos en categorías como walk / no walk mediante modelos supervisados.
Visualizar los resultados con técnicas de reducción de dimensión como PCA o UMAP.
Generar documentación técnica con Sphinx y ReadTheDocs.
—
Estructura del código fuente (src)
Este proyecto está organizado en módulos independientes que cubren todo el ciclo de vida de los datos: desde su adquisición hasta la inferencia con nuevos datos. A continuación se detalla cada etapa del flujo:
1. Obtención, etiquetado y preprocesado de datos
InfluxDBms/: contiene funciones para conectarse a una base de datos InfluxDB y exportar los datos recogidos por los sensores. Incluye limpieza básica y funciones auxiliares de visualización.main.py: ejecuta el flujo completo desde la lectura de los datos crudos hasta la generación de ventanas etiquetadas. Es el punto de entrada principal para el tratamiento inicial del dataset.export_balanced_chunks.py: toma los datos crudos ya etiquetados y los divide en segmentos balanceados de la misma longitud, listos para ser usados en el entrenamiento. Garantiza que walk y no_walk estén igualmente representados.
2. Entrenamiento de modelos
train_autoencoder.py: carga los segmentos preprocesados desde un archivo.hdf5, aplica escalado conStandardScalery entrena un autoencoder Transformer configurable (número de bloques, cabezas, tamaño de representación…). Guarda tanto los pesos del modelo como los logs del entrenamiento.
3. Evaluación de modelos
evaluate_latent_classifier.py: evalúa distintos clasificadores entrenados sobre las representaciones latentes generadas por el autoencoder. Calcula métricas como accuracy, F1-score o matriz de confusión para distintos enfoques y variantes.
4. Codificación y representación de latentes
encode_latent_transformer.py: transforma los segmentos originales en vectores latentes a través del encoder del autoencoder previamente entrenado. Es clave para alimentar clasificadores posteriores o visualizar la estructura de los datos.plot_latents.py: aplica técnicas de reducción de dimensionalidad como PCA o UMAP sobre las representaciones latentes y genera visualizaciones que permiten explorar la separabilidad entre clases (walk/no_walk).
5. Clasificación e inferencia con nuevos datos (“producción”)
train_logistic_classifier.py: entrena un clasificador logístico simple sobre los vectores latentes, utilizando validación cruzada para comparar distintas configuraciones y seleccionar el modelo final.inference.py: este es el script clave para el despliegue. Permite aplicar el modelo ya entrenado sobre datos “frescos”, es decir, sin etiquetas. Carga el modelo K (el mejor evaluado), el escalador y el encoder, y devuelve para cada segmento una predicción binaria (walk/no_walk) y su correspondiente representación latente.
Conclusión
Este flujo modular garantiza una trazabilidad completa del dato, permitiendo reproducir cada paso de forma aislada o en conjunto, adaptarlo a nuevos sujetos o condiciones, y escalarlo a producción con facilidad.