Pose Detection : ce que c'est, modèles et principe de fonctionnement

Auteur : IT Sectr Publié le : 2026-07-19 Temps de lecture : 9 min

Pose Detection est une technologie de vision par ordinateur qui détermine la position du corps humain à l'aide de points clés (landmarks) : tête, épaules, coudes, poignets, hanches, genoux, chevilles. Chaque point a des coordonnées (x, y) dans l'espace 2D, et les modèles avancés (MediaPipe BlazePose 3D) ajoutent une coordonnée z pour la profondeur. Dans les applications mobiles, Pose Detection est utilisé dans les trackers de fitness, les applications de yoga, les filtres AR, les programmes de réadaptation et les systèmes d'analyse sportive. Selon Google ML Kit, 2025, Pose Detection sur appareil traite jusqu'à 30 images par seconde avec une précision de 94 % PCK.

Points clés

  • Pose Detection — identification des points clés du corps (landmarks) à partir d'une image
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, précision 94 % PCK
  • MediaPipe BlazePose — 33 landmarks + 3D, jusqu'à 60 FPS sur GPU
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 Mo, INT8
  • Sur appareil — confidentialité, temps réel, sans envoi de vidéo au serveur

Qu'est-ce que Pose Detection : bases et métriques

Pose Detection (également Pose Estimation) fait référence à la tâche de détermination des points clés sémantiques du corps humain à partir d'une image ou d'une vidéo. L'approche Top-down détecte d'abord la personne (Object Detection), puis détermine sa pose. L'approche Bottom-up trouve tous les landmarks dans l'image, puis les regroupe par personne (OpenPose). Pour les appareils mobiles, on utilise bottom-up — il est plus rapide avec plusieurs personnes dans le cadre. ML Kit et BlazePose utilisent une approche à un seul stade — détection + pose en un seul passage.

COCO Keypoints — un ensemble standard de 17 points : nez, yeux (2), oreilles (2), épaules (2), coudes (2), poignets (2), hanches (2), genoux (2), chevilles (2). MediaPipe BlazePose utilise 33 points, ajoutant : orteils, talons, centre du torse, points du visage. Plus il y a de points, plus l'analyse de la pose est précise, mais plus la charge de calcul est élevée. Pour les applications de fitness, 17 à 20 points suffisent. Pour une analyse complète (yoga, danse) — 33 points. Pour les filtres AR — 33 points + 468 points du visage (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — métrique de précision de Pose Detection. Calcule la proportion de points prédits dans une distance du ground truth (généralement 0,05 à 0,15 de la taille de la boîte englobante de la personne). 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étrique utilisée dans COCO qui tient compte de l'échelle de la personne et de la difficulté du point. mAP@OKS — métrique standard pour les benchmarks.

ModèleLandmarksPCK@0,1Latence (GPU)Taille
ML Kit Pose Acc3394 %15–30 ms14 Mo
BlazePose Full33 + 3D96 %10–20 ms12 Mo
BlazePose Lite3391 %5–10 ms5 Mo
MoveNet Lightning1791 %8–15 ms8 Mo
MoveNet Thunder1795 %25–40 ms13 Mo

Visibilité des Keypoints : chaque landmark a un score (0..1) indiquant à quel point le modèle est confiant quant au point et s'il est visible. Les points avec un score < 0,5 sont considérés comme invisibles (occlus, hors cadre). Pour l'analyse de pose, utilisez uniquement les points visibles. Pour l'évaluation de l'alignement — calculez les distances pondérées par la confiance, où les points à faible score ont moins de poids dans la métrique.

ML Kit Pose Detection sur Android et iOS

ML Kit Pose Detection — une bibliothèque de Google pour la détection de pose sur appareil. Prend en charge 33 landmarks, y compris les points du visage, les orteils et les talons. Modes : Accurate Mode (modèle de 14 Mo, 15–30 ms, haute précision) et Streaming Mode (5 Mo, 5–10 ms, pour le temps réel). Streaming Mode utilise un modèle léger avec suivi — après la première image, il suit le mouvement sans redétecter les positions exactes, atteignant jusqu'à 60 FPS.

API de ML Kit Pose Detection : PoseDetector (options : setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Chaque PoseLandmark a : landmarkType (38 types), position (PointF3D), inFrameLikelihood (0..1). Pose fournit également : la boîte englobante de la personne, la liste des landmarks, la méthode getLandmark(type). Pour la classification des poses, utilisez les angles entre les os : shoulderAngle, elbowAngle, hipAngle — calculés via Vector3D entre les landmarks adjacents.

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 sur iOS : Pose Detection est disponible via ML Kit CocoaPods. L'API est identique à Android : PoseDetector → UIImage → Pose → PoseLandmark. Sur iOS, ML Kit utilise Core ML et ANE (A12+), atteignant une latence de 10–20 ms en Accurate Mode sur iPhone 15 Pro. Streaming Mode — 3–8 ms, jusqu'à 120 FPS. Sur iOS, ML Kit Pose Detection est plus rapide que MediaPipe BlazePose (accélération Core ML), mais reste derrière BlazePose en FPS sur les anciens appareils (iPhone X–11).

MediaPipe BlazePose : architecture et 3D

MediaPipe BlazePose — un modèle haute performance pour Pose Detection de Google Research. Utilise une architecture hybride : pipeline detector-decoder basé sur MobileNetV2 + Feature Pyramid Network. BlazePose Full : 33 landmarks + coordonnées 3D (profondeur z). BlazePose Lite : 33 landmarks (2D) sans profondeur. Les deux modèles sont disponibles dans MediaPipe Tasks Vision sur Android, iOS, Python et Web. BlazePose Full traite 30–60 FPS sur GPU, Lite — 60+ FPS.

Estimation de pose 3D avec BlazePose : le modèle prédit la coordonnée z pour chaque landmark, permettant d'estimer la profondeur (approche/éloignement des membres) sans caméra stéréo. La coordonnée z est calculée dans l'espace métrique (mètres) par rapport à la caméra. Précision de BlazePose 3D : 37 mm MPJPE (Mean Per Joint Position Error) sur les benchmarks publics — suffisant pour le fitness et la RA, insuffisant pour le diagnostic médical. Pour ARKit/ARFoundation, BlazePose 3D offre une profondeur naturelle.

kotlin
// Tâches de Vision 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 est plus rapide (60+ FPS vs 30 FPS), prend en charge les coordonnées 3D, fonctionne multiplateforme via MediaPipe. ML Kit est plus facile à intégrer (pas de MediaPipe SDK requis), inclut des modèles pré-entraînés de haute précision. Pour les projets iOS natifs — ML Kit Pose Detection (meilleure optimisation ANE). Pour les projets multiplateformes (Flutter, React Native) — MediaPipe BlazePose (modèle unifié pour toutes les plateformes). Pour la précision dans les scènes exigeantes — les deux modèles sont comparables.

MoveNet : Lightning et Thunder de TensorFlow

MoveNet — une famille de modèles de Pose Detection de TensorFlow, optimisée pour TFLite. Lightning (8 Mo, INT8 — 4 Mo) : 17 keypoints COCO, 91 % PCK, latence 8–15 ms, 30+ FPS. Thunder (13 Mo, INT8 — 6 Mo) : 17 keypoints, 95 % PCK, latence 25–40 ms, 20+ FPS. MoveNet utilise l'architecture CenterNet + interpolation bilinéaire pour une carte de chaleur haute résolution. MoveNet prend en charge la détection multi-pose (jusqu'à 6 personnes). Les modèles sont disponibles sur TensorFlow Hub.

MoveNet Lightning vs Thunder : Lightning — pour les applications en temps réel à haut FPS (fitness, filtres AR). Thunder — pour l'analyse précise des poses (rééducation, analyse sportive) sur les appareils avec GPU. Les deux modèles se convertissent en Core ML via tf-coreml pour iOS. MoveNet est également disponible via l'API TFLite Task Vision PoseLandmarker. Recommandation : commencez par Lightning, si la précision est insuffisante — passez à Thunder (seulement +15 ms de surcharge de latence).

java
// Inférence MoveNet avec 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 : détection de jusqu'à 6 personnes dans le cadre. Au lieu de l'approche standard de carte de chaleur, MoveNet utilise la détection de personnes + l'affinement de la pose : d'abord, il détecte les personnes (basé sur le centroïde), puis il estime chaque pose. Le mode multi-pose est 2 à 3 fois plus lent que le single-pose : Lightning — 25–50 ms (6 personnes). Pour les applications de fitness avec un seul utilisateur, utilisez single-pose. Pour les activités de groupe (yoga, crossfit) — multi-pose avec limitation du taux d'images pour économiser la batterie.

Classification des poses : des points aux actions

Pose Classification — l'étape après la détection : convertir les landmarks en actions sémantiques (debout, assis, bras levé, accroupi). Approches : Rule-based (règles manuelles — angles entre les os), ML-based (régression logistique ou Random Forest sur le vecteur de landmarks), DL-based (classifieur LSTM de séquence de poses entre les images). Rule-based — 50–80 % de précision, simple et rapide. ML-based — 85–95 % de précision avec 200+ exemples étiquetés. LSTM — 90–98 % de précision sur les séries temporelles (vidéo).

Angles entre les os : pour chaque point, les angles avec les points voisins sont calculés. Exemples : angle du coude droit (épaule → coude → poignet), angle du genou droit (hanche → genou → cheville), angle du torse (point milieu épaules → point milieu hanches). Les angles sont invariants à l'échelle et à la position de la personne sur l'écran. La normalisation des angles à la plage [0, 1] permet de classer la pose avec une règle de seuil simple : si elbowAngle < 30° — bras plié, si > 150° — tendu.

kotlin
// Classifieur de squat basé sur des règles
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 — classifieurs pré-entraînés inclus dans MediaPipe Tasks : squats, pompes, planche, levée de jambes. Le classifieur prend une liste de landmarks et retourne l'action + la confiance. Inclut un lissage temporel (filtre temporel) : HED (Holt Exponential Double Smoothing) pour des transitions fluides entre les poses. Pour les actions personnalisées — entraînez un classifieur sur 100–500 exemples via MediaPipe Model Maker (TensorFlow Lite + métadonnées).

Applications de Pose Detection dans le fitness et la rééducation

Trackers de fitness avec correction de technique — l'application analyse la pose de l'utilisateur pendant l'exercice et fournit des indications vocales : « baissez les hanches », « n'inclinez pas le torse ». ML Kit Pose Detection + classifieur basé sur des règles compte les répétitions et évalue la qualité. Squat : angle du genou < 90° — squat correct, angle du dos < 45° — inclinaison dangereuse du torse. Pompe : angle du coude < 90° au point inférieur — pompe complète. Traction : menton au-dessus du niveau de la barre.

Rééducation et physiothérapie — Pose Detection est utilisé pour le suivi à distance des exercices de physiothérapie. Un médecin définit une pose de référence (par exemple, abduction de l'épaule à 45 °), l'application mesure l'angle actuel et les écarts. BlazePose 3D offre une précision d'angle de ±3 ° — suffisante pour l'évaluation clinique. Fréquence : 1 image toutes les 3 à 5 secondes (économie de batterie). Sur appareil — confidentialité des données médicales du patient. Rééducation post-AVC : suivi main-épaule, extension du coude, flexion de la hanche.

Filtres AR et effets — Pose Detection est à la base des filtres AR dans les réseaux sociaux (TikTok, Instagram, Snapchat). Les landmarks de la tête, des épaules et des mains sont utilisés pour superposer des masques, des animations et des éléments décoratifs. MediaPipe BlazePose Full + Face Mesh (468 points) offre 120+ FPS sur les appareils phares. ARKit/ARCore Face Tracking + Pose Detection — une combinaison pour la RA corps entier. Exigences : FPS > 30, latence motion-to-photon < 20 ms.

swift
// Filtre AR avec des landmarks 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)
    }
}

Analyse sportive — évaluation professionnelle de la technique : analyse biomécanique de la course (cadence, longueur de foulée, symétrie du balancement des bras), natation (roulis du corps, angle du coude pendant la traction), tennis (rotation de l'épaule, coup du poignet). MoveNet Thunder avec post-traitement offre une précision suffisante pour une analyse non professionnelle. Le sport professionnel nécessite une capture de mouvement 3D (Vicon, OptiTrack), mais Pose Detection sur téléphone est une alternative abordable pour le marché de masse. La synchronisation des angles entre les images est un composant clé.

Questions fréquemment posées

Comment stabiliser Pose Detection avec les tremblements de la caméra ?

Utilisez un lissage temporel : One Euro Filter (filtre 1€) — fréquence de coupure configurable pour chaque landmark séparément, supprime le bruit haute fréquence (tremblement) tout en préservant le mouvement réel (faible latence). MediaPipe BlazePose inclut HED intégré (Holt Exponential Double Smoothing) — lissage adaptatif avec prédiction de mouvement. Pour ML Kit, implémentez le filtre 1€ vous-même : le filtre a deux paramètres — beta (vitesse) et minCutoff (seuil de fréquence). Recommandés : beta = 0,04, minCutoff = 0,5 (Android).

Combien de personnes Pose Detection peut-il détecter dans un cadre ?

ML Kit Pose Detection — une personne (single-pose). MoveNet Lightning — jusqu'à 6 personnes (multi-pose). MediaPipe BlazePose — jusqu'à 2–3 personnes via MediaPipe Tasks (multi-pose). Pour les applications d'activités de groupe, utilisez MoveNet Lightning ou BlazePose. Pour les applications de fitness avec un utilisateur — ML Kit (intégration plus simple, meilleure précision single-pose). Pour les appels vidéo avec filtres AR — BlazePose Lite avec multi-pose (FPS élevé) suffit.

Comment calculer l'angle entre les os pour la classification des poses ?

Angle entre deux os : prenez trois landmarks — articulation A, articulation B (sommet de l'angle), articulation C. Calculez les vecteurs BA = (A - B) et BC = (C - B). Angle = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Angle dans la plage 0–180°. Pour les coordonnées tridimensionnelles (BlazePose 3D), utilisez Vector3D. Normalisez les angles à la plage [0,1] pour le classifieur ML.

Peut-on suivre les deux mains simultanément ?

Oui, tous les principaux modèles (ML Kit, BlazePose, MoveNet) détectent les landmarks des deux mains simultanément : LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. Pour la détection supplémentaire des mains, combinez Pose Detection + Hand Landmarker (21 points par main). MediaPipe Hands + BlazePose est la combinaison standard pour le corps entier + les mains. Sur iOS — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

Quelle est la taille minimale de la personne dans le cadre pour Pose Detection ?

ML Kit Pose Detection : boîte englobante minimale de la personne — 100x100 pixels (rapport d'aspect ~1:1). MoveNet Lightning : 120x120 pixels. BlazePose : 80x160 pixels (boîte englobante verticale). Pour une personne en pied à 3 mètres de la caméra (1920x1080) — environ 250x600 px, suffisant. À des distances > 5 mètres, la précision diminue — utilisez Multi-Pose + entrée haute résolution. Pour les objets distants, Object Detection + Pose Estimation (deux étapes) est meilleur.

Résumé

  • Pose Detection — identification de 17–33 points clés du corps avec une précision de 91–96 % PCK
  • ML Kit Pose Detection — 33 landmarks, jusqu'à 30 FPS, API simple, sur GPU/ANE
  • BlazePose (MediaPipe) — 33 landmarks + 3D, jusqu'à 60 FPS, multiplateforme
  • MoveNet Lightning/Thunder — 17 keypoints COCO, 30+ FPS, TFLite, multi-pose
  • Pose Classification — des landmarks aux actions via des règles ou ML
  • Sur appareil — confidentialité, temps réel, latence 3 ms–30 ms
  • Applications — fitness, rééducation, filtres AR, analyse sportive

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi