Saltar a contenido

Baseline Pipeline: MediaPipe Pose sobre fotos EPPA

Estado

FUNCIONAL: Pipeline ejecutado con exito sobre imagen sintetica. MediaPipe PoseLandmarker (Tasks API v0.10.35) detecta 33 keypoints y computa angulos EPPA-equivalentes automaticamente.

Pendiente: ejecutar sobre fotos EPPA reales cuando esten autorizadas.

Requisitos

python3 -m venv .venv
source .venv/bin/activate
pip install mediapipe opencv-python-headless

No requiere GPU (MediaPipe corre en CPU). OpenPose requiere GPU con CUDA.

Pipeline

1. Preparar manifest de entrada

Crear TSV con columnas: image_path, view, subject_id

Paths relativos al directorio del manifest:

image_path  view    subject_id
foto_anterior.jpg   anterior    MIA001
foto_lateral.jpg    lateral-der MIA001

2. Ejecutar baseline

cd fronts/openpose
source .venv/bin/activate
python scripts/run_mediapipe_baseline.py \
  --input tests/fixtures/test-manifest.tsv \
  --outdir results/baseline-synth/

El modelo PoseLandmarker Heavy (~26 MB) se descarga automaticamente al primer uso.

3. Outputs

Por imagen: {outdir}/{subject_id}_{view}.json

{
  "error": null,
  "image_w": 600,
  "image_h": 1000,
  "keypoints": [
    {"id": 0, "name": "NOSE", "x": 299.7, "y": 96.3, "z": -0.5, "visibility": 0.9999},
    ...
  ],
  "eppa_angles": {
    "head_inclination_deg": {
      "value": 2.05,
      "unit": "degrees",
      "keypoints_used": "LEFT_EAR, RIGHT_EAR",
      "confidence_min": 0.9999,
      "eppa_equivalent": "Angulo Inclinacion Cabeza"
    },
    ...
  }
}

Resumen: baseline-summary.tsv — n_keypoints, avg_visibility, error por imagen.

Angulos: baseline-angles.tsv — variable, value, unit, eppa_equivalent, confidence_min.

4. Angulos EPPA-equivalentes computados

El pipeline calcula automaticamente segun la vista:

Vista Variable Formula Keypoints
anterior head_inclination_deg atan(|dy|/|dx|) L_EAR, R_EAR
anterior shoulder_inclination_deg atan(|dy|/|dx|) L_SHOULDER, R_SHOULDER
anterior pelvis_inclination_deg atan(|dy|/|dx|) L_HIP, R_HIP
lateral elbow_angle_deg angle(S,E,W) SHOULDER, ELBOW, WRIST
lateral knee_angle_deg angle(H,K,A) HIP, KNEE, ANKLE
lateral hip_angle_deg angle(S,H,K) SHOULDER, HIP, KNEE
lateral trunk_flexion_deg atan2 from vertical SHOULDER, HIP

Keypoints con visibility < 0.5 se excluyen automaticamente.

Resultados del baseline sintetico

Ejecutado sobre imagen sintetica (stick figure con torso/limbs):

SYNTH001/anterior: 33 keypoints, avg_visibility=0.9091
  head_inclination_deg = 2.05 deg
  shoulder_inclination_deg = 1.00 deg
  pelvis_inclination_deg = 2.18 deg

SYNTH001/lateral-der: No pose detected (imagen demasiado esquematica)

Limitaciones conocidas

  1. MediaPipe tiene 33 keypoints genericos — no detecta landmarks oseos (EIAS, C7, etc.)
  2. Sin fotos EPPA reales, solo se puede validar el pipeline, no los errores reales
  3. Las fotos deben tener consentimiento y estar manifestadas (ver source-manifest.tsv)
  4. Vista lateral sobre figuras sinteticas falla — necesita imagenes realistas

Proximos pasos

  1. Obtener autorizacion para usar fotos EPPA del dataset Mia
  2. Ejecutar pipeline sobre fotos reales (anterior + lateral)
  3. Comparar angulos MediaPipe vs marcadores EPPA ground truth
  4. Calcular MAE, RMSE por variable para validar claims C04-C08