Pose Detection: qué es, modelos y principio de funcionamiento

Autor: IT Sectr Publicado: 2026-07-19 Tiempo de lectura: 9 min

Pose Detection es una tecnología de visión por computadora que determina la posición del cuerpo humano mediante puntos clave (landmarks): cabeza, hombros, codos, muñecas, caderas, rodillas, tobillos. Cada punto tiene coordenadas (x, y) en el espacio 2D, y los modelos avanzados (MediaPipe BlazePose 3D) añaden coordenada z para profundidad. En aplicaciones móviles, Pose Detection se utiliza en rastreadores de fitness, aplicaciones de yoga, filtros AR, programas de rehabilitación y sistemas de análisis deportivo. Según Google ML Kit, 2025, Pose Detection en dispositivo procesa hasta 30 fotogramas por segundo con una precisión del 94% PCK.

Puntos clave

  • Pose Detection — identificación de puntos clave del cuerpo (landmarks) a partir de una imagen
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, precisión 94% PCK
  • MediaPipe BlazePose — 33 landmarks + 3D, hasta 60 FPS en GPU
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 MB, INT8
  • On-device — privacidad, tiempo real, sin enviar video al servidor

Qué es Pose Detection: fundamentos y métricas

Pose Detection (también Pose Estimation) se refiere a la tarea de determinar puntos clave semánticos del cuerpo humano a partir de una imagen o video. El enfoque Top-down primero detecta a la persona (Object Detection), luego determina su pose. El enfoque Bottom-up encuentra todos los landmarks en la imagen, luego los agrupa por persona (OpenPose). Para dispositivos móviles se utiliza bottom-up — es más rápido con varias personas en el encuadre. ML Kit y BlazePose utilizan un enfoque de una sola etapa — detección + pose en un solo paso.

COCO Keypoints — un conjunto estándar de 17 puntos: nariz, ojos (2), orejas (2), hombros (2), codos (2), muñecas (2), caderas (2), rodillas (2), tobillos (2). MediaPipe BlazePose utiliza 33 puntos, añadiendo: dedos de los pies, talones, centro del torso, puntos faciales. Cuantos más puntos, más preciso es el análisis de la pose, pero mayor es la carga computacional. Para aplicaciones de fitness, 17–20 puntos son suficientes. Para análisis completo (yoga, baile) — 33 puntos. Para filtros AR — 33 puntos + 468 puntos faciales (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — métrica de precisión de Pose Detection. Calcula la proporción de puntos predichos dentro de una distancia del ground truth (generalmente 0.05–0.15 del tamaño del bounding box de la persona). ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — métrica utilizada en COCO que considera la escala de la persona y la dificultad del punto. mAP@OKS — métrica estándar para benchmarks.

ModeloLandmarksPCK@0.1Latencia (GPU)Tamaño
ML Kit Pose Acc3394%15–30 ms14 MB
BlazePose Full33 + 3D96%10–20 ms12 MB
BlazePose Lite3391%5–10 ms5 MB
MoveNet Lightning1791%8–15 ms8 MB
MoveNet Thunder1795%25–40 ms13 MB

Visibilidad de Keypoints: cada landmark tiene una puntuación (0..1) que indica cuán seguro está el modelo sobre el punto y si es visible. Los puntos con puntuación < 0.5 se consideran invisibles (ocluidos, fuera del encuadre). Para el análisis de poses, utilice solo puntos visibles. Para la evaluación de alineación — calcule distancias ponderadas por confianza, donde los puntos con baja puntuación tienen menos peso en la métrica.

ML Kit Pose Detection en Android y iOS

ML Kit Pose Detection — una biblioteca de Google para la detección de poses en el dispositivo. Soporta 33 landmarks, incluyendo puntos faciales, dedos de los pies y talones. Modos: Accurate Mode (modelo de 14 MB, 15–30 ms, alta precisión) y Streaming Mode (5 MB, 5–10 ms, para tiempo real). Streaming Mode utiliza un modelo ligero con seguimiento — tras el primer fotograma, rastrea el movimiento sin redetectar posiciones exactas, logrando hasta 60 FPS.

API de ML Kit Pose Detection: PoseDetector (opciones: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Cada PoseLandmark tiene: landmarkType (38 tipos), position (PointF3D), inFrameLikelihood (0..1). Pose también proporciona: boundingBox de la persona, lista de landmarks, método getLandmark(type). Para la clasificación de poses, use ángulos entre huesos: shoulderAngle, elbowAngle, hipAngle — calculados mediante Vector3D entre landmarks adyacentes.

kotlin
val options = PoseDetectorOptions.Builder()
    .setDetectorMode(PoseDetectorOptions.STREAM_MODE)
    .setPerformanceMode(PoseDetectorOptions.PERFORMANCE_MODE_FAST)
    .build()

val detector = PoseDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { pose ->
        val leftElbow = pose.getLandmark(PoseLandmark.LEFT_ELBOW)
        val leftShoulder = pose.getLandmark(PoseLandmark.LEFT_SHOULDER)
        val leftWrist = pose.getLandmark(PoseLandmark.LEFT_WRIST)
        val elbowAngle = calculateAngle(
            leftShoulder.position, leftElbow.position, leftWrist.position
        )
    }

ML Kit en iOS: Pose Detection está disponible a través de ML Kit CocoaPods. La API es idéntica a Android: PoseDetector → UIImage → Pose → PoseLandmark. En iOS, ML Kit utiliza Core ML y ANE (A12+), logrando una latencia de 10–20 ms en Accurate Mode en iPhone 15 Pro. Streaming Mode — 3–8 ms, hasta 120 FPS. En iOS, ML Kit Pose Detection es más rápido que MediaPipe BlazePose (aceleración Core ML), pero queda detrás de BlazePose en FPS en dispositivos antiguos (iPhone X–11).

MediaPipe BlazePose: arquitectura y 3D

MediaPipe BlazePose — un modelo de alto rendimiento para Pose Detection de Google Research. Utiliza una arquitectura híbrida: pipeline detector-decoder basado en MobileNetV2 + Feature Pyramid Network. BlazePose Full: 33 landmarks + coordenadas 3D (profundidad z). BlazePose Lite: 33 landmarks (2D) sin profundidad. Ambos modelos están disponibles en MediaPipe Tasks Vision en Android, iOS, Python y Web. BlazePose Full procesa 30–60 FPS en GPU, Lite — 60+ FPS.

Estimación de pose 3D con BlazePose: el modelo predice la coordenada z para cada landmark, permitiendo estimar la profundidad (acercamiento/alejamiento de extremidades) sin cámara estéreo. La coordenada z se calcula en espacio métrico (metros) respecto a la cámara. Precisión de BlazePose 3D: 37 mm MPJPE (Mean Per Joint Position Error) en benchmarks públicos — suficiente para fitness y AR, insuficiente para diagnóstico médico. Para ARKit/ARFoundation, BlazePose 3D proporciona profundidad natural.

kotlin
// Tareas de Vision de MediaPipe Pose Detection
val options = PoseLandmarkerOptions.Builder()
    .setBaseOptions(BaseOptions.builder()
        .setModelAssetPath("pose_landmarker_full.task")
        .build())
    .setDelegate(Delegate.GPU)
    .build()

val landmaker = PoseLandmarker.createFromOptions(context, options)

val result = landmaker.detect(MPImage.fromBitmap(bitmap))
result.landmarks.forEach { pose ->
    pose.forEach { landmark ->
        drawLandmark(landmark.x, landmark.y, landmark.z)
    }
}

BlazePose vs ML Kit Pose Detection: BlazePose es más rápido (60+ FPS vs 30 FPS), soporta coordenadas 3D, funciona multiplataforma a través de MediaPipe. ML Kit es más fácil de integrar (no requiere MediaPipe SDK), incluye modelos preentrenados con alta precisión. Para proyectos iOS nativos — ML Kit Pose Detection (mejor optimización ANE). Para proyectos multiplataforma (Flutter, React Native) — MediaPipe BlazePose (modelo único para todas las plataformas). Para precisión en escenas exigentes — ambos modelos son comparables.

MoveNet: Lightning y Thunder de TensorFlow

MoveNet — una familia de modelos para Pose Detection de TensorFlow, optimizada para TFLite. Lightning (8 MB, INT8 — 4 MB): 17 keypoints COCO, 91% PCK, latencia 8–15 ms, 30+ FPS. Thunder (13 MB, INT8 — 6 MB): 17 keypoints, 95% PCK, latencia 25–40 ms, 20+ FPS. MoveNet utiliza arquitectura CenterNet + interpolación bilineal para heatmap de alta resolución. MoveNet soporta detección multi-pose (hasta 6 personas). Los modelos están disponibles en TensorFlow Hub.

MoveNet Lightning vs Thunder: Lightning — para aplicaciones en tiempo real con alto FPS (fitness, filtros AR). Thunder — para análisis preciso de poses (rehabilitación, análisis deportivo) en dispositivos con GPU. Ambos modelos se convierten a Core ML mediante tf-coreml para iOS. MoveNet también está disponible a través de la API TFLite Task Vision PoseLandmarker. Recomendación: comience con Lightning, si la precisión es insuficiente — cambie a Thunder (solo +15 ms de sobrecarga de latencia).

java
// Inferencia de MoveNet con TFLite
Interpreter interpreter = new Interpreter(loadModel(context));
TensorImage image = TensorImage.fromBitmap(bitmap);
image.load(Bitmap.createScaledBitmap(bitmap, 192, 192, true));

float[][] output = new float[1][51];
interpreter.run(image.getTensorBuffer(), output);

float[] keypoints = output[0];
for (int i = 0; i < 17; i++) {
    float y = keypoints[i * 3];
    float x = keypoints[i * 3 + 1];
    float score = keypoints[i * 3 + 2];
    drawKeypoint(x, y, score);
}

MoveNet Multi-Pose: detección de hasta 6 personas en el encuadre. En lugar del enfoque estándar de heatmap, MoveNet utiliza detección de personas + refinamiento de pose: primero detecta personas (basado en centroide), luego estima cada pose. El modo multi-pose es 2–3x más lento que single-pose: Lightning — 25–50 ms (6 personas). Para aplicaciones de fitness con un solo usuario, use single-pose. Para actividades grupales (yoga, crossfit) — multi-pose con limitación de fotogramas para ahorrar batería.

Clasificación de poses: de puntos a acciones

Pose Classification — la etapa posterior a la detección: convertir landmarks en acciones semánticas (de pie, sentado, brazo levantado, haciendo sentadilla). Enfoques: Rule-based (reglas manuales — ángulos entre huesos), ML-based (regresión logística o Random Forest sobre vector de landmarks), DL-based (clasificador LSTM de secuencia de poses entre fotogramas). Rule-based — 50–80% de precisión, simple y rápido. ML-based — 85–95% de precisión con 200+ ejemplos etiquetados. LSTM — 90–98% de precisión en series temporales (video).

Ángulos entre huesos: para cada punto, se calculan ángulos con los vecinos. Ejemplos: ángulo del codo derecho (hombro → codo → muñeca), ángulo de la rodilla derecha (cadera → rodilla → tobillo), ángulo del torso (punto medio hombros → punto medio caderas). Los ángulos son invariantes a la escala y posición de la persona en pantalla. Normalizar ángulos al rango [0, 1] permite clasificar la pose con una regla de umbral simple: si elbowAngle < 30° — brazo doblado, si > 150° — extendido.

kotlin
// Clasificador de sentadillas basado en reglas
fun classifySquat(pose: Pose): SquatPhase {
    val kneeAngle = angle(
        pose.getLandmark(PoseLandmark.LEFT_HIP),
        pose.getLandmark(PoseLandmark.LEFT_KNEE),
        pose.getLandmark(PoseLandmark.LEFT_ANKLE)
    )
    return when {
        kneeAngle > 140f -> SquatPhase.STANDING
        kneeAngle < 90f  -> SquatPhase.SQUAT
        else           -> SquatPhase.TRANSITION
    }
}

MediaPipe Pose Classification — clasificadores preentrenados incluidos en MediaPipe Tasks: sentadillas, flexiones, plancha, elevación de piernas. El clasificador recibe una lista de landmarks y devuelve la acción + confianza. Incluye suavizado temporal (filtro temporal): HED (Holt Exponential Double Smoothing) para transiciones suaves entre poses. Para acciones personalizadas — entrene un clasificador con 100–500 ejemplos mediante MediaPipe Model Maker (TensorFlow Lite + metadata).

Aplicaciones de Pose Detection en fitness y rehabilitación

Rastreadores de fitness con corrección de técnica — la aplicación analiza la pose del usuario durante el ejercicio y proporciona indicaciones de voz: «baja las caderas», «no inclines el torso». ML Kit Pose Detection + clasificador basado en reglas cuenta repeticiones y evalúa la calidad. Sentadilla: ángulo de rodilla < 90° — sentadilla correcta, ángulo de espalda < 45° — inclinación peligrosa del torso. Flexión: ángulo de codo < 90° en el punto inferior — flexión completa. Dominada: barbilla por encima del nivel de la barra.

Rehabilitación y fisioterapia — Pose Detection se utiliza para el monitoreo remoto de ejercicios de fisioterapia. Un médico establece una pose de referencia (por ejemplo, abducción del hombro a 45°), la aplicación mide el ángulo actual y las desviaciones. BlazePose 3D proporciona precisión de ángulos de ±3° — suficiente para evaluación clínica. Frecuencia: 1 fotograma cada 3–5 segundos (ahorro de batería). On-device — privacidad de los datos médicos del paciente. Rehabilitación post-ictus: seguimiento mano-hombro, extensión de codo, flexión de cadera.

Filtros AR y efectos — Pose Detection es la base de los filtros AR en redes sociales (TikTok, Instagram, Snapchat). Los landmarks de cabeza, hombros y manos se utilizan para superponer máscaras, animaciones y elementos decorativos. MediaPipe BlazePose Full + Face Mesh (468 puntos) ofrece 120+ FPS en dispositivos emblemáticos. ARKit/ARCore Face Tracking + Pose Detection — una combinación para AR de cuerpo completo. Requisitos: FPS > 30, latencia motion-to-photon < 20 ms.

swift
// Filtro AR con puntos de referencia de pose
let request = VNDetectHumanBodyPoseRequest { req, _ in
    guard let observation = req.results?.first as? VNHumanBodyPoseObservation else { return }
    let keypoints = try observation.recognizedPoints(.all)
    let rightShoulder = keypoints[VNHumanBodyPoseObservation.JointName.rightShoulder]
    DispatchQueue.main.async {
        arView.placeFilter(at: rightShoulder?.location ?? .zero)
    }
}

Análisis deportivo — evaluación profesional de la técnica: análisis biomecánico de la carrera (cadencia, longitud de zancada, simetría del balanceo de brazos), natación (rolido del cuerpo, ángulo del codo en la brazada), tenis (rotación del hombro, golpe de muñeca). MoveNet Thunder con postprocesamiento proporciona precisión suficiente para análisis no profesional. El deporte profesional requiere captura de movimiento 3D (Vicon, OptiTrack), pero Pose Detection en el teléfono es una alternativa asequible para el mercado masivo. La sincronización de ángulos entre fotogramas es un componente clave.

Preguntas frecuentes

¿Cómo estabilizar Pose Detection con vibración de cámara?

Utilice suavizado temporal: One Euro Filter (filtro 1€) — frecuencia de corte configurable para cada landmark por separado, suprime el ruido de alta frecuencia (vibración) preservando el movimiento real (baja latencia). MediaPipe BlazePose incluye HED integrado (Holt Exponential Double Smoothing) — suavizado adaptativo con predicción de movimiento. Para ML Kit, implemente el filtro 1€ usted mismo: el filtro tiene dos parámetros — beta (velocidad) y minCutoff (umbral de frecuencia). Recomendados: beta = 0.04, minCutoff = 0.5 (Android).

¿Cuántas personas puede detectar Pose Detection en un encuadre?

ML Kit Pose Detection — una persona (single-pose). MoveNet Lightning — hasta 6 personas (multi-pose). MediaPipe BlazePose — hasta 2–3 personas mediante MediaPipe Tasks (multi-pose). Para aplicaciones de actividades grupales, use MoveNet Lightning o BlazePose. Para aplicaciones de fitness con un usuario — ML Kit (integración más sencilla, mayor precisión single-pose). Para videollamadas con filtros AR — BlazePose Lite con multi-pose (alto FPS) es suficiente.

¿Cómo calcular el ángulo entre huesos para clasificación de pose?

Ángulo entre dos huesos: tome tres landmarks — articulación A, articulación B (vértice del ángulo), articulación C. Calcule los vectores BA = (A - B) y BC = (C - B). Ángulo = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Ángulo en el rango 0–180°. Para coordenadas tridimensionales (BlazePose 3D) use Vector3D. Normalice los ángulos al rango [0,1] para el clasificador ML.

¿Se pueden rastrear ambas manos simultáneamente?

Sí, todos los modelos principales (ML Kit, BlazePose, MoveNet) detectan landmarks de ambas manos simultáneamente: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. Para detección adicional de manos, combine Pose Detection + Hand Landmarker (21 puntos por mano). MediaPipe Hands + BlazePose es la combinación estándar para cuerpo completo + manos. En iOS — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

¿Cuál es el tamaño mínimo de persona en el encuadre para Pose Detection?

ML Kit Pose Detection: bounding box mínimo de persona — 100x100 píxeles (relación de aspecto ~1:1). MoveNet Lightning: 120x120 píxeles. BlazePose: 80x160 píxeles (bounding box vertical). Para una persona de cuerpo completo a 3 metros de la cámara (1920x1080) — aproximadamente 250x600 px, suficiente. A distancias > 5 metros, la precisión disminuye — use Multi-Pose + entrada de alta resolución. Para objetos distantes, Object Detection + Pose Estimation (dos etapas) es mejor.

Resumen

  • Pose Detection — identificación de 17–33 puntos clave del cuerpo con precisión 91–96% PCK
  • ML Kit Pose Detection — 33 landmarks, hasta 30 FPS, API simple, en GPU/ANE
  • BlazePose (MediaPipe) — 33 landmarks + 3D, hasta 60 FPS, multiplataforma
  • MoveNet Lightning/Thunder — 17 keypoints COCO, 30+ FPS, TFLite, multi-pose
  • Pose Classification — de landmarks a acciones mediante reglas o ML
  • On-device — privacidad, tiempo real, latencia 3 ms–30 ms
  • Aplicaciones — fitness, rehabilitación, filtros AR, análisis deportivo

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también