EN-RUUMBIZA
Detector de fallas de motor basado en audio para Guadalahacks 2026.
Descripción
EN-RUUMBIZA es un sistema de diagnóstico de anomalías en motores de automóvil que utiliza señales de audio. El proyecto entrena un modelo multi-etiqueta a partir de características MFCC y exporta el clasificador a ONNX para inferencia eficiente.
Características
- Entrenamiento de un modelo de clasificación multi-etiqueta con PyTorch.
- Exportación del modelo a ONNX para desplegar en entornos de inferencia.
- Interfaz web de visualización BLE en
index.html. - Código C++ para extracción de características y procesamiento de audio.
Estructura del proyecto
best_model/model.onnx— modelo ONNX listo para inferencia.cardiag_config.json— configuración de etiquetas, umbrales y normalización.metrics.json— métricas de evaluación.
car_engine_cpp/— módulos C++ y Python para procesamiento de audiocar_cpu/main_inference.cpp— código de inferencia para ECU del automóvil.model.onnx— copia del modelo para inferencia en tiempo real.pc/fft_features.cpp— extractor de características FFT en C++.main_offline.cpp— procesamiento offline de archivos WAV.MFCC.ipynb— notebook Jupyter con análisis de características MFCC.mfcc_features.py— script Python para extracción de características MFCC.src/dsp_config.h— configuración de DSP.sliding_window.cpp— procesamiento por ventanas deslizantes.sliding_window.h— header del procesamiento por ventanas.ws_bridge.py— puente WebSocket para comunicación entre PC y automóvil.car_inference.exe— ejecutable de inferencia compilado.onnxruntime.dll— librería ONNX Runtime.
data/— datos de entrenamientomfcc_features.csv— características MFCC etiquetadas para entrenamiento.
images/— assets visualeslogo.png— logo del proyecto EN-RUUMBIZA.logo_texto.png— logo con texto.
webapp/— aplicaciones webenrumbiza.html— interfaz web alternativa para monitoreo.
preprocessing.cpp— utilidad de preprocesamiento de audio en C++.main.cpp— prueba básica delibsamplerate.train.py— script principal de entrenamiento y exportación a ONNX.process_all.ps1— script PowerShell para procesar dataset WAV y generar CSV.index.html— interfaz web BLE para monitorización de fallas.
Etiquetas de diagnóstico
El modelo está entrenado para detectar fallas en tres estados operacionales del motor:
Braking State (Estado de Frenado)
- Worn-Out Brakes — Frenos desgastados. Las pastillas o discos de freno están muy gastados y ya no detienen el auto con eficiencia. Peligroso porque aumenta la distancia de frenado.
- Normal Brakes — Frenos en buen estado, funcionando correctamente.
Idle State (Estado en Ralentí)
Motor encendido pero sin acelerar. El sistema detecta:
- Low Oil — Aceite bajo. El motor no tiene suficiente lubricación, lo que causa fricción excesiva entre las piezas metálicas. Si se ignora puede fundir el motor completamente.
- Power Steering — Fallo en la dirección asistida. El volante se vuelve muy difícil de girar, especialmente al estacionarse o a bajas velocidades.
- Serpentine Belt — La correa serpentina está dañada o rota. Esta correa mueve componentes vitales como el alternador, la bomba de agua y el compresor del AC. Si se rompe el auto puede sobrecalentarse y quedarse sin batería.
- Normal Engine Idle — Motor en ralentí funcionando correctamente, sin anomalías.
Start-Up State (Estado de Arranque)
Al encender el auto, el sistema detecta:
- Bad Ignition — Fallo en el sistema de encendido. Las bujías, bobinas o el switch de encendido no están funcionando bien, causando que el motor no arranque o arranque con dificultad.
- Dead Battery — Batería débil o descargada. No tiene suficiente carga para arrancar el motor. Síntoma típico: el motor gira lento o no gira al girar la llave.
- Normal Engine Start-Up — Arranque normal, todos los sistemas respondiendo correctamente.
Requisitos
- Python 3.9+ / 3.10+
- Paquetes Python:
numpypandastorchscikit-learnlibrosaonnxruntime
Instalación sugerida:
python -m pip install numpy pandas torch scikit-learn librosa onnxruntime
Para compilar main.cpp se requiere libsamplerate y un compilador C++ compatible.
Uso
1. Entrenar el modelo
Ejecuta train.py para entrenar el clasificador, evaluar el rendimiento y generar los artefactos en best_model/:
python train.py
Se generarán:
best_model/model.onnxbest_model/cardiag_config.jsonbest_model/metrics.json
2. Interfaz web BLE (index.html)
index.html es una interfaz de monitorización de fallas en tiempo real. Abre el archivo en un navegador compatible y conéctalo al backend BLE/WebSocket que envíe los resultados de inferencia.
3. Interfaz web alternativa (webapp/enrumbiza.html)
webapp/enrumbiza.html proporciona una alternativa de interfaz web con estilos y funcionalidades personalizadas para monitorizar fallas detectadas.
4. Puente WebSocket (car_engine_cpp/ws_bridge.py)
El script ws_bridge.py permite la comunicación entre el modelo de inferencia y las interfaces web mediante WebSocket:
python car_engine_cpp/ws_bridge.py
5. Procesamiento de audio en C++
FFT Features (Características FFT)
car_engine_cpp/pc/fft_features.cpp
Extrae características espectrales de archivos WAV.
Procesamiento offline
car_engine_cpp/pc/main_offline.cpp
Procesa archivos de audio sin conexión en tiempo real.
MFCC Features (Características MFCC)
Extrae características MFCC usando:
car_engine_cpp/pc/mfcc_features.py— versión Python.- Notebook Jupyter:
car_engine_cpp/pc/MFCC.ipynb— análisis interactivo.
6. Inferencia en la ECU del automóvil
El código compilado car_engine_cpp/car_cpu/main_inference.cpp permite ejecutar inferencia directamente en la unidad de control del automóvil usando el modelo ONNX incluido en car_engine_cpp/car_cpu/model.onnx.
7. Procesamiento por lotes
El script process_all.ps1 es una utilidad PowerShell para procesar un dataset completo de archivos WAV y generar CSVs etiquetados:
.\process_all.ps1
Formato de datos
El dataset data/mfcc_features.csv debe contener:
- una columna
label - columnas de características MFCC:
mfcc_0,mfcc_1, ...,mfcc_12
El script train.py también puede adaptarse para cargar otros formatos, como:
data/features.npzdata/features.jsonl
Arquitectura del sistema
El proyecto está diseñado con una arquitectura multi-capas:
Capa de Adquisición de Audio
- Grabación desde micrófono (a través de librerías como
sounddevice) - Lectura de archivos WAV
- Grabación desde micrófono (a través de librerías como
Capa de Extracción de Características
- C++:
car_engine_cpp/pc/fft_features.cpp— análisis FFT - Python/C++:
car_engine_cpp/pc/mfcc_features.py— extracción MFCC - Ventanas deslizantes:
car_engine_cpp/src/sliding_window.cpp
- C++:
Capa de Inferencia
- Modelo ONNX:
best_model/model.onnxocar_engine_cpp/car_cpu/model.onnx - Inferencia en PC:
car_engine_cpp/pc/main_offline.cpp - Inferencia en ECU:
car_engine_cpp/car_cpu/main_inference.cpp
- Modelo ONNX:
Capa de Comunicación
- WebSocket Bridge:
car_engine_cpp/ws_bridge.py— comunica resultados de inferencia a interfaces web
- WebSocket Bridge:
Capa de Presentación
- Interface BLE:
index.html— monitorización en tiempo real - Interface alternativa:
webapp/enrumbiza.html— vista personalizada
- Interface BLE:
Notas importantes
train.pyrealiza validación cruzada y ajuste de umbrales por clase.- El modelo ONNX exportado incluye normalización de características.
process_all.ps1es una utilidad para generar CSVs desde un dataset WAV mediante un ejecutable C++.- Los archivos
.exey.dllencar_engine_cpp/son binarios compilados de inferencia rápida. - El notebook
car_engine_cpp/pc/MFCC.ipynbproporciona análisis interactivo de características.
Log in or sign up for Devpost to join the conversation.