Pose Detection: mi ez, modellek és működési elv

Szerző: IT Sectr Megjelenés: 2026-07-19 Olvasási idő: 9 perc

Pose Detection — számítógépes látástechnológia, amely az emberi test helyzetét határozza meg kulcspontok (landmarks) segítségével: fej, vállak, könyök, csuklók, csípők, térdek, bokák. Minden pontnak vannak koordinátái (x, y) a 2D térben, a fejlett modellek (MediaPipe BlazePose 3D) pedig z-koordinátát adnak hozzá a mélységhez. Mobilalkalmazásokban a Pose Detection-t fitneszkövetőkben, jógaalkalmazásokban, AR-szűrőkben, rehabilitációs programokban és sportanalitikai rendszerekben használják. A Google ML Kit, 2025 szerint az on-device Pose Detection akár 30 képkockát is feldolgoz másodpercenként 94% PCK pontossággal.

Főbb

  • Pose Detection — a test kulcspontjainak (landmarks) meghatározása képből
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, 94% PCK pontosság
  • MediaPipe BlazePose — 33 landmarks + 3D, akár 60 FPS GPU-n
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 MB, INT8
  • On-device — adatvédelem, valós idejű, videó küldése nélkül a szerverre

Mi az a Pose Detection: alapok és metrikák

Pose Detection (más néven Pose Estimation) az emberi test szemantikus kulcspontjainak meghatározására utal képből vagy videóból. A Top-down megközelítés először érzékeli a személyt (Object Detection), majd meghatározza a testtartását. A Bottom-up megközelítés megtalálja az összes landmarkot a képen, majd csoportosítja őket személyenként (OpenPose). Mobileszközökhöz a bottom-up-ot használják — gyorsabb, ha több ember van a képkockában. Az ML Kit és a BlazePose single-stage megközelítést használ — érzékelés + testtartás egy menetben.

COCO Keypoints — 17 pontból álló szabványos készlet: orr, szemek (2), fülek (2), vállak (2), könyök (2), csuklók (2), csípők (2), térdek (2), bokák (2). A MediaPipe BlazePose 33 pontot használ, hozzáadva: lábujjak, sarkak, törzs középpontja, arcpontok. Minél több pont, annál pontosabb a testtartás-elemzés, de annál magasabb a számítási terhelés. Fitneszalkalmazásokhoz 17–20 pont elegendő. Teljes elemzéshez (jóga, tánc) — 33 pont. AR-szűrőkhöz — 33 pont + 468 arcpont (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — a Pose Detection pontosságának metrikája. A ground truth-tól számított távolságon belül (ltalában a személy bounding box méretének 0.05–0.15-e) előrejelzett pontok arányaként számítják. ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — a COCO-ban használt metrika, amely figyelembe veszi a személy méretarányát és a pont nehézségét. mAP@OKS — benchmarkok szabványos metrikája.

ModellLandmarksPCK@0.1Latencia (GPU)Méret
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

Keypoint Visibility: minden landmark rendelkezik egy pontszámmal (0..1), amely jelzi, hogy a modell mennyire biztos a pontban és hogy az látható-e. A < 0.5 pontszámú pontok láthatatlannak minősülnek (takart, kockán kívüli). Testtartás elemzéséhez csak látható pontokat használjon. Az igazítás értékeléséhez — számítson confidence-weighted distances-t, ahol az alacsony pontszámú pontok kisebb súlyt kapnak a metrikában.

ML Kit Pose Detection Androidon és iOS-en

ML Kit Pose Detection — könyvtár a Google-tól a testtartás eszközön történő meghatározásához. 33 landmarkot támogat, beleértve az arcpontokat, lábujjakat és sarkakat. Módok: Accurate Mode (14 MB modell, 15–30 ms, nagy pontosság) és Streaming Mode (5 MB, 5–10 ms, valós idejű). A Streaming Mode könnyű modellt használ követéssel — az első kocka után követi a mozgást anélkül, hogy újra érzékelné a pontos pozíciókat, ami akár 60 FPS-t is biztosít.

ML Kit Pose Detection API: PoseDetector (opciók: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Minden PoseLandmark rendelkezik: landmarkType (38 típus), position (PointF3D), inFrameLikelihood (0..1). A Pose emellett biztosítja: a személy boundingBox-ját, a landmarks listáját, a getLandmark(type) metódust. Testtartás osztályozásához használja a csontok közötti szögeket: shoulderAngle, elbowAngle, hipAngle — a Vector3D segítségével számítva a szomszédos landmarks között.

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 iOS-en: A Pose Detection az ML Kit CocoaPods segítségével érhető el. Az API megegyezik az Androidéval: PoseDetector → UIImage → Pose → PoseLandmark. iOS-en az ML Kit a Core ML-t és az ANE-t (A12+) használja, ami 10–20 ms latenciát biztosít Accurate Mode-ban iPhone 15 Pro-n. Streaming Mode — 3–8 ms, akár 120 FPS. iOS-en az ML Kit Pose Detection gyorsabban működik, mint a MediaPipe BlazePose (Core ML gyorsítás), de FPS tekintetében elmarad a BlazePose-tól régebbi eszközökön (iPhone X–11).

MediaPipe BlazePose: architektúra és 3D

MediaPipe BlazePose — nagy teljesítményű modell a Pose Detection számára a Google Research-től. Hibrid detector-decoder pipeline architektúrát használ MobileNetV2 + Feature Pyramid Network alapokon. BlazePose Full: 33 landmarks + 3D koordináták (z mélység). BlazePose Lite: 33 landmarks (2D) mélység nélkül. Mindkét modell elérhető a MediaPipe Tasks Vision-ban Androidon, iOS-en, Pythonban és Weben. A BlazePose Full 30–60 FPS-t dolgoz fel GPU-n, a Lite 60+ FPS-t.

3D Pose Estimation BlazePose-zal: a modell z-koordinátát jósol minden landmarkhoz, lehetővé téve a mélység értékelését (végtagok közelítése/távolítása) sztereó kamera nélkül. A z-koordináta metrikus térben (méter) kerül kiszámításra a kamerához viszonyítva. BlazePose 3D pontosság: 37 mm MPJPE (Mean Per Joint Position Error) nyilvános benchmarkokon — elegendő fitneszhez és AR-hez, nem elegendő orvosi diagnosztikához. ARKit/ARFoundation számára a BlazePose 3D természetes mélységet biztosít.

kotlin
// MediaPipe Pose Detection Tasks Vision
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: A BlazePose gyorsabb (60+ FPS vs 30 FPS), támogatja a 3D koordinátákat, cross-platform működik a MediaPipe-on keresztül. Az ML Kit egyszerűbben integrálható (nem igényel MediaPipe SDK-t), előre betanított modelleket tartalmaz nagy pontossággal. Natív iOS-projektekhez — ML Kit Pose Detection (jobb optimalizálás ANE-hez). Cross-platform projektekhez (Flutter, React Native) — MediaPipe BlazePose (egyetlen modell minden platformhoz). Pontossághoz igényes szcénákban — mindkét modell összehasonlítható.

MoveNet: Lightning és Thunder a TensorFlow-tól

MoveNet — Pose Detection modellek családja a TensorFlow-tól, TFLite-ra optimalizálva. Lightning (8 MB, INT8 — 4 MB): 17 COCO keypoints, 91% PCK, 8–15 ms latencia, 30+ FPS. Thunder (13 MB, INT8 — 6 MB): 17 keypoints, 95% PCK, 25–40 ms latencia, 20+ FPS. A MoveNet CenterNet architektúrát + bilineáris interpolációt használ nagy felbontású heatmap-hez. A MoveNet támogatja a multi-pose érzékelést (akár 6 fő). A modellek a TensorFlow Hub-ban érhetőek el.

MoveNet Lightning vs Thunder: Lightning — valós idejű alkalmazásokhoz magas FPS-sel (fitnesz, AR szűrők). Thunder — pontos testtartás-elemzéshez (rehabilitáció, sportanalitika) GPU-val rendelkező eszközökön. Mindkét modell konvertálható Core ML-re a tf-coreml segítségével iOS-hez. A MoveNet a TFLite Task Vision PoseLandmarker API-n keresztül is elérhető. Javaslat: kezdje a Lightning-gal, ha a pontosság nem elegendő — váltson Thunder-re (csak +15 ms többletlatencia).

java
// MoveNet Inference with 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: akár 6 fő érzékelése a kockában. A szabványos heatmap megközelítés helyett a MoveNet person detection + pose refinement-t használ: először érzékeli a személyeket (centroid-based), majd értékeli mindegyik testtartását. A multi-pose mód 2–3x lassabb, mint a single-pose: Lightning — 25–50 ms (6 fő). Egyfelhasználós fitneszalkalmazásokhoz használjon single-pose-t. Csoportos tevékenységekhez (jóga, crossfit) — multi-pose kockakorlátozással az akkumulátor kíméléséhez.

Testtartás-osztályozás: pontoktól a cselekvésekig

Pose Classification — az érzékelés utáni szakasz: a landmarks átalakítása szemantikus cselekvésekké (áll, ül, felemelte a kezét, guggol). Megközelítések: Rule-based (kézi szabályok — csontok közötti szögek), ML-based (logisztikus regresszió vagy Random Forest a landmarks vektoron), DL-based (testtartás-sorozat LSTM osztályozója kockánként). Rule-based — 50–80% pontosság, egyszerű és gyors. ML-based — 85–95% pontosság 200+ címkézett példával. LSTM — 90–98% pontosság idősorokon (videó).

Szögek a csontok között: minden ponthoz kiszámításra kerülnek a szögek a szomszédos pontokkal. Példák: right elbow angle (shoulder → elbow → wrist), right knee angle (hip → knee → ankle), torso angle (vállak felezőpontja → csípők felezőpontja). A szögek invariánsak a skálára és a személy képernyőn elfoglalt helyzetére. A szögek [0, 1] tartományba normalizálása lehetővé teszi a testtartás osztályozását egy egyszerű küszöbérték-szabállyal: ha elbowAngle < 30° — a kar hajlított, ha > 150° — nyújtott.

kotlin
// Szabályalapú guggolásosztályozó
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 — előre betanított osztályozók a MediaPipe Tasks részeként: guggolások, fekvőtámaszok, plank, lábemelések. Az osztályozó fogadja a landmarks listáját és visszaadja a cselekvést + megbízhatóságot. Időbeli simítást (temporal filter) tartalmaz: HED (Holt Exponential Double Smoothing) a testtartások közötti sima átmenethez. Egyedi cselekvésekhez — tanítson osztályozót 100–500 példán a MediaPipe Model Maker (TensorFlow Lite + metadata) segítségével.

A Pose Detection alkalmazása fitneszben és rehabilitációban

Fitneszkövetők technikajavítással — az alkalmazás elemzi a felhasználó testtartását a gyakorlat során és hangutasításokat ad: „engedd lejjebb a medencét”, „ne dőntsd meg a törzset”. ML Kit Pose Detection + rule-based osztályozó számlálja az ismétléseket és értékeli a minőséget. Squat: knee angle < 90° — helyes guggolás, back angle < 45° — veszélyes törzsdőlés. Push-up: elbow angle < 90° az alsó pontban — teljes fekvőtámasz. Pull-up: áll a rúd szintje felett.

Rehabilitáció és fizioterápia — a Pose Detection-t a fizioterápiás gyakorlatok távvezérlésére használják. Az orvos beállít egy referenciatesttartást (pl. váll-abdukció 45°-ra), az alkalmazás méri az aktuális szöget és az eltéréseket. A BlazePose 3D ±3° szögpontosságot biztosít — elegendő a klinikai értékeléshez. Gyakoriság: 1 kocka 3–5 másodpercenként (akkumulátorkímélés). On-device — a beteg orvosi adatainak védelme. Rehabilitáció sztrájk után: hand-to-shoulder, elbow-extension, hip-flexion követése.

AR-szűrők és effektek — a Pose Detection képezi a közösségi média AR-szűrőinek (TikTok, Instagram, Snapchat) alapját. A fej, vállak és kezek landmarks-jait maszkok, animációk és dekoratív elemek ráhelyezésére használják. A MediaPipe BlazePose Full + Face Mesh (468 pont) 120+ FPS-t biztosít zászlóshajó eszközökön. ARKit/ARCore Face Tracking + Pose Detection — kombináció a full-body AR-hez. Követelmények: FPS > 30, motion-to-photon latency < 20 ms.

swift
// AR szűrő testtartás-landmarkokkal
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)
    }
}

Sportanalitika — professzionális technikaértékelés: futás biomechanikai elemzése (cadence, stride length, arm swing symmetry), úszás (body roll, elbow angle húzásnál), tenisz (shoulder rotation, wrist snap). A MoveNet Thunder utófeldolgozással elegendő pontosságot biztosít nem professzionális analitikához. A professzionális sporthoz 3D Motion Capture (Vicon, OptiTrack) szükséges, de a Pose Detection a telefonon egy elérhető alternatíva a tömegpiac számára. A szögek szinkronizálása a kockák között — kulcsfontosságú komponens.

Gyakran ismételt kérdések

Hogyan stabilizálható a Pose Detection kamera remegése esetén?

Használjon temporal smoothing-ot (időbeli simítás): One Euro Filter (1€ filter) — minden landmarkhoz külön állítható cut-off frekvencia, elnyomja a magas frekvenciájú zajt (remegés), megtartja a valós mozgást (alacsony latencia). A MediaPipe BlazePose beépített HED-et (Holt Exponential Double Smoothing) tartalmaz — adaptív simítás mozgáselőrejelzéssel. ML Kit-hez implementálja a 1€ filtert saját maga: a szűrőnek két paramétere van — beta (sebesség) és minCutoff (frekvencia küszöb). Javasolt: beta = 0.04, minCutoff = 0.5 (Android).

Hány embert képes érzékelni a Pose Detection egy kockában?

ML Kit Pose Detection — egy személyt (single-pose). MoveNet Lightning — akár 6 főt (multi-pose). MediaPipe BlazePose — akár 2–3 főt a MediaPipe Tasks segítségével (multi-pose). Csoportos tevékenységekkel rendelkező alkalmazásokhoz használja a MoveNet Lightning-ot vagy a BlazePose-t. Egyfelhasználós fitneszalkalmazásokhoz — ML Kit (egyszerűbb integráció, magasabb single-pose pontosság). AR szűrős videóhívásokhoz — elegendő a BlazePose Lite multi-pose-zal (magas FPS).

Hogyan számítható ki a csontok közötti szög a testtartás osztályozásához?

Szög két csont között: vegyen három landmarkot — ízület A, ízület B (a szög csúcspontja), ízület C. Számítsa ki a BA = (A - B) és BC = (C - B) vektorokat. Szög = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Szög 0–180° tartományban. Háromdimenziós koordinátákhoz (BlazePose 3D) használja a Vector3D-t. Normalizálja a szögeket [0,1] tartományba az ML osztályozó számára.

Meghatározható-e mindkét kéz testtartása egyszerre?

Igen, az összes fő modell (ML Kit, BlazePose, MoveNet) egyszerre érzékeli mindkét kéz landmarks-jait: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. A kezek kiegészítő érzékeléséhez (hand tracking) kombinálja a Pose Detection-t és a Hand Landmarker-t (21 pont kézenként). MediaPipe Hands + BlazePose — standard kombináció a full-body + hands számára. iOS-en — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

Mekkora a minimális személyméret a kockában a Pose Detection számára?

ML Kit Pose Detection: minimális bounding box személyenként — 100x100 pixel (arány ~1:1). MoveNet Lightning: 120x120 pixel. BlazePose: 80x160 pixel (függőleges bounding box). Teljes magasságú személyhez 3 méter távolságra a kamerától (1920x1080) — kb. 250x600 px, ami elegendő. 5 méternél nagyobb távolságnál a pontosság csökken — használjon Multi-Pose + high-resolution input-ot. Távoli objektumokhoz jobb az Object Detection + Pose Estimation (two-stage) használata.

Összefoglaló

  • Pose Detection — 17–33 kulcsfontosságú testpont meghatározása 91–96% PCK pontossággal
  • ML Kit Pose Detection — 33 landmarks, akár 30 FPS, egyszerű API, GPU/ANE-n
  • BlazePose (MediaPipe) — 33 landmarks + 3D, akár 60 FPS, cross-platform
  • MoveNet Lightning/Thunder — 17 COCO keypoints, 30+ FPS, TFLite, multi-pose
  • Pose Classification — landmarks-tól cselekvésig rule-based vagy ML útján
  • On-device — adatvédelem, valós idejű, 3 ms–30 ms latencia
  • Alkalmazás — fitnesz, rehabilitáció, AR-szűrők, sportanalitika

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is