Programa de Análisis Comparativo de Posturas humanas

Job ID: 39185399

Budget: $8 – $15 USD

Desarrolla un programa en Python que analice un video de una persona realizando sentadillas, cuente automáticamente el número de repeticiones completadas, monitoree el uso de recursos del sistema, procese videos desde una carpeta y compare el rendimiento y precisión entre OpenPose y MediaPipe. El programa debe incluir:

---

### 1. Procesamiento de videos
- Leer videos desde una carpeta especificada por el usuario.
- Permitir al usuario seleccionar qué video procesar o procesar todos los videos automáticamente.
- Procesar cada video con **OpenPose** y **MediaPipe** para realizar la estimación de poses humanas.
- Durante el procesamiento:
- Mostrar en tiempo real el video con los puntos clave del cuerpo marcados para el seguimiento (estimación de poses).
- Contar las sentadillas realizadas con cada biblioteca.
- Mostrar indicadores visuales como bordes rojos/verdes para verificar si el cuerpo está dentro del encuadre.
- Guardar dos versiones del video procesado (una para OpenPose y otra para MediaPipe), incluyendo:
- Puntos clave del cuerpo marcados.
- Contador en tiempo real del número de sentadillas realizadas.
- Retroalimentación visual sobre la calidad del ejercicio.

---

### 2. Estimación de poses
- Implementar **OpenPose** y **MediaPipe** como motores para la estimación de poses humanas.
- Identificar y marcar puntos clave relevantes del cuerpo (caderas, rodillas, tobillos, hombros, etc.) con ambas bibliotecas.
- Basar el conteo de sentadillas en:
- El ángulo de flexión de las rodillas.
- La posición relativa de las caderas respecto a su altura inicial.
- El movimiento vertical del cuerpo.

---

### 3. Detección del encuadre
- Verificar si el cuerpo completo está dentro del campo visual de la cámara:
- Mostrar un borde ROJO alrededor del video cuando el cuerpo no esté completamente visible.
- Mostrar un mensaje en pantalla como "CUERPO INCOMPLETO - AJUSTE SU POSICIÓN".
- Cambiar el borde a VERDE cuando el cuerpo esté correctamente encuadrado.
- Mostrar un mensaje como "POSICIÓN CORRECTA" cuando el encuadre sea adecuado.
- Solo comenzar a contar repeticiones cuando el cuerpo esté completamente visible y correctamente encuadrado.

---

### 4. Monitoreo y registro de recursos
- Monitorear y registrar en tiempo real:
- Uso de RAM (en MB) cada segundo durante la ejecución.
- FPS (frames por segundo) procesados cada segundo.
- Uso de CPU (en porcentaje) cada segundo.
- Comparar estas métricas entre OpenPose y MediaPipe para evaluar cuál biblioteca es más eficiente en términos de uso de recursos.
- Almacenar estos datos en una base de datos SQLite con las siguientes características:
- Registrar cada sesión con un identificador único basado en la fecha y hora (formato: YYYYMMDD_HHMMSS).
- Guardar registros detallados con timestamp para cada medición de recursos.
- Permitir consultar el historial completo de sesiones anteriores.
- Proveer la opción para exportar los datos a un archivo CSV.

---

### 5. Comparación entre OpenPose y MediaPipe
- Implementar un módulo que compare las capacidades de ambas bibliotecas, considerando:
- Precisión en la estimación de poses (basada en qué tan bien detectan los puntos clave relevantes).
- Número total de sentadillas contadas correctamente por cada biblioteca.
- Uso promedio de RAM, CPU y FPS durante el procesamiento del video.
- Generar gráficos comparativos que incluyan:
- Gráficos de barras o líneas mostrando el uso promedio de recursos (RAM, CPU, FPS) por biblioteca.
- Gráficos mostrando la precisión en la detección (porcentaje estimado basado en sentadillas correctamente contadas).
- Guardar los gráficos generados en una carpeta específica para análisis posterior.

---

### 6. Funcionalidades adicionales
- Guardar dos versiones procesadas del video (una con OpenPose y otra con MediaPipe) en una carpeta específica para su revisión posterior.
- Proporcionar una interfaz gráfica o CLI que permita:
- Seleccionar videos desde una carpeta específica.
- Configurar parámetros básicos como la carpeta donde se guardarán los videos procesados o los límites mínimos/máximos para considerar una sentadilla válida.
- Permitir al usuario visualizar los gráficos comparativos directamente desde la interfaz.

---

### Estructura sugerida para la base de datos SQLite
Tablas:

1. `sessions`
- `session_id` (PRIMARY KEY): texto único con formato YYYYMMDD_HHMMSS.
- `start_time`: timestamp de inicio de sesión.
- `end_time`: timestamp de fin de sesión.
- `video_name`: nombre del video procesado.
- `total_squats_openpose`: número total de sentadillas contadas por OpenPose.
- `total_squats_mediapipe`: número total de sentadillas contadas por MediaPipe.
- `output_video_openpose_path`: ruta al video procesado con OpenPose.
- `output_video_mediapipe_path`: ruta al video procesado con MediaPipe.

2. `resource_metrics`
- `metric_id` (PRIMARY KEY): entero autoincremental.
- `session_id` (FOREIGN KEY): referencia a `sessions.session_id`.
- `timestamp`: momento exacto de la medición.
- `ram_usage_mb_openpose`: uso promedio de RAM por OpenPose durante ese segundo.
- `ram_usage_mb_mediapipe`: uso promedio de RAM por MediaPipe durante ese segundo.
- `cpu_usage_percent_openpose`: porcentaje promedio de CPU usado por OpenPose durante ese segundo.
- `cpu_usage_percent_mediapipe`: porcentaje promedio de CPU usado por MediaPipe durante ese segundo.
- `fps_openpose`: frames por segundo procesados por OpenPose durante ese segundo.
- `fps_mediapipe`: frames por segundo procesados por MediaPipe durante ese segundo.

---

### Consideraciones adicionales
1. **Formato del video procesado**: Guardar los videos procesados en un formato estándar como MP4 o AVI, asegurando que incluyan todos los agregados visuales mencionados.

2. **Gráficos comparativos**: Utilizar bibliotecas como Matplotlib o Seaborn para generar gráficos visualmente atractivos que permitan comparar las métricas entre OpenPose y MediaPipe.

3. **Optimización**: Implementar procesamiento paralelo si es posible, para manejar múltiples videos consecutivamente sin necesidad de reiniciar el programa.

4. **Tolerancia a errores**:
- Manejar errores comunes como incompatibilidades entre bibliotecas o configuraciones incorrectas del entorno (por ejemplo, si OpenPose no está instalado correctamente).
- Proveer mensajes claros al usuario sobre cómo resolver estos problemas.

5. **Exportación**: Incluir opción para exportar los gráficos comparativos a formatos como PNG o PDF junto con los datos tabulares en CSV.