Pose Detection: ano ito, mga modelo at prinsipyo ng paggana

May-akda: IT Sectr Nai-publish: 2026-07-19 Oras ng pagbabasa: 9 min

Pose Detection — teknolohiya ng computer vision na tumutukoy sa posisyon ng katawan ng tao sa pamamagitan ng mga pangunahing punto (landmarks): ulo, balikat, siko, pulso, balakang, tuhod, bukung-bukong. Ang bawat punto ay may mga coordinate (x, y) sa 2D space, at ang mga advanced na modelo (MediaPipe BlazePose 3D) ay nagdaragdag ng z-coordinate para sa lalim. Sa mga mobile app, ginagamit ang Pose Detection sa mga fitness tracker, yoga app, AR filter, rehabilitation program, at sports analytics system. Ayon sa Google ML Kit, 2025, ang on-device Pose Detection ay nagpoproseso ng hanggang 30 frames bawat segundo na may katumpakan na 94% PCK.

Mga Pangunahing

  • Pose Detection — pagtukoy ng mga pangunahing punto ng katawan (landmarks) mula sa larawan
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, katumpakan 94% PCK
  • MediaPipe BlazePose — 33 landmarks + 3D, hanggang 60 FPS sa GPU
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 MB, INT8
  • On-device — privacy, real-time, walang pagpapadala ng video sa server

Ano ang Pose Detection: mga batayan at metrika

Pose Detection (kilala rin bilang Pose Estimation) ay tumutukoy sa gawain ng pagtukoy ng mga semantikong pangunahing punto ng katawan ng tao mula sa isang larawan o video. Ang Top-down approach ay unang nadedetect ang tao (Object Detection), pagkatapos ay tinutukoy ang kanyang posisyon. Ang Bottom-up approach ay hinahanap ang lahat ng landmarks sa larawan, pagkatapos ay pinapangkat ang mga ito ayon sa tao (OpenPose). Para sa mga mobile device, ginagamit ang bottom-up — mas mabilis kapag maraming tao sa frame. Ang ML Kit at BlazePose ay gumagamit ng single-stage approach — detection + pose sa isang daan.

COCO Keypoints — karaniwang set ng 17 puntos: ilong, mata (2), tainga (2), balikat (2), siko (2), pulso (2), balakang (2), tuhod (2), bukung-bukong (2). Ang MediaPipe BlazePose ay gumagamit ng 33 puntos, nagdaragdag ng: mga daliri sa paa, sakong, gitna ng katawan, mga punto sa mukha. Kung mas maraming puntos, mas tumpak ang pagsusuri ng posisyon, ngunit mas mataas ang computational load. Para sa fitness apps, sapat na ang 17–20 puntos. Para sa kumpletong pagsusuri (yoga, sayaw) — 33 puntos. Para sa AR filters — 33 puntos + 468 facial points (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — metrika ng katumpakan ng Pose Detection. Kinakalkula bilang proporsyon ng mga puntos na hinulaan sa loob ng distansya mula sa ground truth (karaniwang 0.05–0.15 ng laki ng bounding box ng tao). ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — metrika na ginagamit sa COCO, isinasaalang-alang ang scale ng tao at kahirapan ng punto. mAP@OKS — karaniwang metrika para sa mga benchmark.

ModeloLandmarksPCK@0.1Latency (GPU)Sukat
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: bawat landmark ay may score (0..1) na nagpapakita kung gaano katiyak ang modelo sa punto at kung ito ay nakikita. Ang mga puntos na may score < 0.5 ay itinuturing na hindi nakikita (natatakpan, nasa labas ng frame). Para sa pagsusuri ng posisyon, gamitin lamang ang mga nakikitang puntos. Para sa pagsusuri ng alignment — kalkulahin ang confidence-weighted distances, kung saan ang mga puntos na may mababang score ay may mas maliit na timbang sa metrika.

ML Kit Pose Detection sa Android at iOS

ML Kit Pose Detection — library mula sa Google para sa pagtukoy ng posisyon sa device. Sinusuportahan ang 33 landmarks, kabilang ang mga facial point, daliri sa paa, at sakong. Mga mode: Accurate Mode (14 MB model, 15–30 ms, mataas na katumpakan) at Streaming Mode (5 MB, 5–10 ms, para sa real-time). Ang Streaming Mode ay gumagamit ng magaan na modelo na may pagsubaybay — pagkatapos ng unang frame, sinusubaybayan ang paggalaw nang hindi na-detect muli ang eksaktong posisyon, na nagbibigay ng hanggang 60 FPS.

API ng ML Kit Pose Detection: PoseDetector (mga opsyon: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Bawat PoseLandmark ay may: landmarkType (38 uri), position (PointF3D), inFrameLikelihood (0..1). Nagbibigay din ang Pose ng: boundingBox ng tao, listahan ng landmarks, paraang getLandmark(type). Para sa pag-uuri ng posisyon, gamitin ang mga anggulo sa pagitan ng mga buto: shoulderAngle, elbowAngle, hipAngle — kinakalkula sa pamamagitan ng Vector3D sa pagitan ng mga katabing landmarks.

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 sa iOS: Ang Pose Detection ay available sa pamamagitan ng ML Kit CocoaPods. Ang API ay katulad ng sa Android: PoseDetector → UIImage → Pose → PoseLandmark. Sa iOS, gumagamit ang ML Kit ng Core ML at ANE (A12+), na nagbibigay ng 10–20 ms latency sa Accurate Mode sa iPhone 15 Pro. Streaming Mode — 3–8 ms, hanggang 120 FPS. Sa iOS, ang ML Kit Pose Detection ay mas mabilis kaysa sa MediaPipe BlazePose (Core ML acceleration), ngunit mas mababa sa BlazePose sa bilang ng FPS sa mga lumang device (iPhone X–11).

MediaPipe BlazePose: arkitektura at 3D

MediaPipe BlazePose — mataas na pagganap na modelo para sa Pose Detection mula sa Google Research. Gumagamit ng hybrid detector-decoder pipeline architecture batay sa MobileNetV2 + Feature Pyramid Network. BlazePose Full: 33 landmarks + 3D coordinates (lalim z). BlazePose Lite: 33 landmarks (2D) nang walang lalim. Ang parehong modelo ay available sa MediaPipe Tasks Vision sa Android, iOS, Python, at Web. Ang BlazePose Full ay nagpoproseso ng 30–60 FPS sa GPU, Lite — 60+ FPS.

3D Pose Estimation gamit ang BlazePose: hinuhulaan ng modelo ang z-coordinate para sa bawat landmark, na nagpapahintulot sa pagtatasa ng lalim (paglapit/paglayo ng mga limbs) nang walang stereo camera. Ang z-coordinate ay kinakalkula sa metric space (metro) kaugnay sa camera. Katumpakan ng BlazePose 3D: 37 mm MPJPE (Mean Per Joint Position Error) sa mga pampublikong benchmark — sapat para sa fitness at AR, hindi sapat para sa medikal na diagnosis. Para sa ARKit/ARFoundation, ang BlazePose 3D ay nagbibigay ng natural na lalim.

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: Mas mabilis ang BlazePose (60+ FPS vs 30 FPS), sumusuporta sa 3D coordinates, gumagana nang cross-platform sa pamamagitan ng MediaPipe. Mas simple ang ML Kit na isama (hindi nangangailangan ng MediaPipe SDK), may kasamang pre-trained models na may mataas na katumpakan. Para sa native iOS projects — ML Kit Pose Detection (mas mahusay na optimization para sa ANE). Para sa cross-platform projects (Flutter, React Native) — MediaPipe BlazePose (iisang modelo para sa lahat ng platform). Para sa katumpakan sa mga hinihinging senaryo — parehong maihahambing ang dalawang modelo.

MoveNet: Lightning at Thunder mula sa TensorFlow

MoveNet — pamilya ng mga modelo ng Pose Detection mula sa TensorFlow, na-optimize para sa TFLite. Lightning (8 MB, INT8 — 4 MB): 17 COCO keypoints, 91% PCK, 8–15 ms latency, 30+ FPS. Thunder (13 MB, INT8 — 6 MB): 17 keypoints, 95% PCK, 25–40 ms latency, 20+ FPS. Gumagamit ang MoveNet ng CenterNet architecture + bilinear interpolation para sa high-resolution heatmap. Sinusuportahan ng MoveNet ang multi-pose detection (hanggang 6 na tao). Ang mga modelo ay available sa TensorFlow Hub.

MoveNet Lightning vs Thunder: Lightning — para sa real-time apps na may mataas na FPS (fitness, AR filters). Thunder — para sa tumpak na pagsusuri ng posisyon (rehabilitasyon, sports analytics) sa mga device na may GPU. Ang parehong modelo ay na-convert sa Core ML sa pamamagitan ng tf-coreml para sa iOS. Ang MoveNet ay available din sa pamamagitan ng TFLite Task Vision PoseLandmarker API. Rekomendasyon: magsimula sa Lightning, kung hindi sapat ang katumpakan — lumipat sa Thunder (+15 ms latency overhead lamang).

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: pag-detect ng hanggang 6 na tao sa frame. Sa halip na standard heatmap approach, gumagamit ang MoveNet ng person detection + pose refinement: unang na-detect ang mga tao (centroid-based), pagkatapos ay tinatasa ang posisyon ng bawat isa. Ang multi-pose mode ay 2–3x mas mabagal kaysa single-pose: Lightning — 25–50 ms (6 na tao). Para sa fitness apps na may iisang user, gamitin ang single-pose. Para sa group activities (yoga, crossfit) — multi-pose na may frame limit para makatipid ng baterya.

Pag-uuri ng posisyon: mula sa mga punto patungo sa mga aksyon

Pose Classification — yugto pagkatapos ng detection: pag-convert ng landmarks sa mga semantikong aksyon (nakatayo, nakaupo, nagtaas ng kamay, nag-squat). Mga approach: Rule-based (manual na panuntunan — anggulo sa pagitan ng mga buto), ML-based (logistic regression o Random Forest sa vector ng landmarks), DL-based (LSTM classifier ng sequence ng posisyon sa bawat frame). Rule-based — 50–80% katumpakan, simple at mabilis. ML-based — 85–95% katumpakan na may 200+ na label na halimbawa. LSTM — 90–98% katumpakan sa time series (video).

Mga anggulo sa pagitan ng mga buto: para sa bawat punto, kinakalkula ang mga anggulo sa mga katabing punto. Mga halimbawa: right elbow angle (shoulder → elbow → wrist), right knee angle (hip → knee → ankle), torso angle (midpoint ng balikat → midpoint ng balakang). Ang mga anggulo ay hindi nagbabago sa scale at posisyon ng tao sa screen. Ang normalisasyon ng mga anggulo sa range [0, 1] ay nagpapahintulot sa pag-uuri ng posisyon gamit ang simpleng threshold rule: kung elbowAngle < 30° — nakatiklop ang braso, kung > 150° — naka-extend.

kotlin
// Rule-based squat classifier
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 — pre-trained classifiers sa MediaPipe Tasks: squats, push-ups, plank, leg raises. Ang classifier ay tumatanggap ng listahan ng landmarks at nagbabalik ng aksyon + confidence. May kasamang temporal smoothing (temporal filter): HED (Holt Exponential Double Smoothing) para sa maayos na transition sa pagitan ng mga posisyon. Para sa custom na aksyon — sanayin ang classifier sa 100–500 halimbawa sa pamamagitan ng MediaPipe Model Maker (TensorFlow Lite + metadata).

Paglalapat ng Pose Detection sa fitness at rehabilitasyon

Fitness tracker na may pagwawasto ng teknik — sinusuri ng app ang posisyon ng user habang nag-eehersisyo at nagbibigay ng voice prompts: “baba ang pelvis”, “wag ihinga ang katawan”. ML Kit Pose Detection + rule-based classifier ay nagbibilang ng repetitions at tinatasa ang kalidad. Squat: knee angle < 90° — tamang squat, back angle < 45° — mapanganib na paghinga ng katawan. Push-up: elbow angle < 90° sa ibabang punto — buong push-up. Pull-up: baba sa itaas ng bar.

Rehabilitasyon at physical therapy — ginagamit ang Pose Detection para sa remote control ng physical therapy exercises. Nagtatakda ang doktor ng reference na posisyon (hal., shoulder abduction sa 45°), sinusukat ng app ang kasalukuyang anggulo at mga deviation. Ang BlazePose 3D ay nagbibigay ng anggulo accuracy na ±3° — sapat para sa clinical assessment. Dalas: 1 frame kada 3–5 segundo (makatipid sa baterya). On-device — privacy ng medikal na data ng pasyente. Rehabilitasyon pagkatapos ng stroke: pagsubaybay ng hand-to-shoulder, elbow-extension, hip-flexion.

AR filters at effects — ang Pose Detection ay nasa puso ng AR filters ng social media (TikTok, Instagram, Snapchat). Ang landmarks ng ulo, balikat, at kamay ay ginagamit para sa pag-overlay ng mga mask, animation, at decorative elements. Ang MediaPipe BlazePose Full + Face Mesh (468 puntos) ay nagbibigay ng 120+ FPS sa flagship device. ARKit/ARCore Face Tracking + Pose Detection — kumbinasyon para sa full-body AR. Mga kinakailangan: FPS > 30, motion-to-photon latency < 20 ms.

swift
// AR filter na may pose landmarks
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)
    }
}

Sports analytics — propesyonal na pagtatasa ng teknik: biomechanical analysis ng pagtakbo (cadence, stride length, arm swing symmetry), paglangoy (body roll, elbow angle sa paghila), tennis (shoulder rotation, wrist snap). Ang MoveNet Thunder na may post-processing ay nagbibigay ng sapat na katumpakan para sa hindi propesyonal na analytics. Para sa propesyonal na sports, kinakailangan ang 3D Motion Capture (Vicon, OptiTrack), ngunit ang Pose Detection sa telepono ay isang abot-kayang alternatibo para sa mass market. Ang pag-sync ng mga anggulo sa pagitan ng frames — pangunahing component.

Mga Madalas Itanong

Paano patatagin ang Pose Detection kapag nanginginig ang camera?

Gumamit ng temporal smoothing (pagpapakinis sa oras): One Euro Filter (1€ filter) — adjustable cut-off frequency para sa bawat landmark nang hiwalay, pinipigilan ang high-frequency na ingay (panginginig), pinapanatili ang tunay na paggalaw (low latency). Ang MediaPipe BlazePose ay may kasamang built-in na HED (Holt Exponential Double Smoothing) — adaptive smoothing na may hula ng paggalaw. Para sa ML Kit, ipatupad ang 1€ filter nang mag-isa: ang filter ay may dalawang parameter — beta (bilis) at minCutoff (threshold ng frequency). Inirerekomenda: beta = 0.04, minCutoff = 0.5 (Android).

Ilang tao sa frame ang ma-detect ng Pose Detection?

ML Kit Pose Detection — isang tao (single-pose). MoveNet Lightning — hanggang 6 na tao (multi-pose). MediaPipe BlazePose — hanggang 2–3 tao sa pamamagitan ng MediaPipe Tasks (multi-pose). Para sa apps na may group activities, gamitin ang MoveNet Lightning o BlazePose. Para sa fitness apps na may iisang user — ML Kit (mas simpleng integration, mas mataas na single-pose accuracy). Para sa video calls na may AR filters — sapat na ang BlazePose Lite na may multi-pose (mataas na FPS).

Paano kalkulahin ang anggulo sa pagitan ng mga buto para sa pag-uuri ng posisyon?

Anggulo sa pagitan ng dalawang buto: kumuha ng tatlong landmarks — joint A, joint B (vertex ng anggulo), joint C. Kalkulahin ang vectors BA = (A - B) at BC = (C - B). Anggulo = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Anggulo sa range 0–180°. Para sa three-dimensional coordinates (BlazePose 3D) gamitin ang Vector3D. I-normalize ang mga anggulo sa range [0,1] para sa ML classifier.

Maaari bang matukoy ang posisyon ng parehong kamay nang sabay?

Oo, lahat ng pangunahing modelo (ML Kit, BlazePose, MoveNet) ay nakakatuklas ng landmarks ng parehong kamay nang sabay: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. Para sa karagdagang detection ng kamay (hand tracking), pagsamahin ang Pose Detection + Hand Landmarker (21 puntos bawat kamay). MediaPipe Hands + BlazePose — standard combination para sa full-body + hands. Sa iOS — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

Ano ang minimum na laki ng tao sa frame para sa Pose Detection?

ML Kit Pose Detection: minimum bounding box ng tao — 100x100 pixels (ratio ~1:1). MoveNet Lightning: 120x120 pixels. BlazePose: 80x160 pixels (vertical bounding box). Para sa tao sa buong taas sa layo na 3 metro mula sa camera (1920x1080) — humigit-kumulang 250x600 px, na sapat. Sa layo > 5 metro, bumababa ang katumpakan — gamitin ang Multi-Pose + high-resolution input. Para sa malalayong bagay, mas mainam na gumamit ng Object Detection + Pose Estimation (two-stage).

Mga Buod

  • Pose Detection — pagtukoy ng 17–33 pangunahing punto ng katawan na may katumpakan na 91–96% PCK
  • ML Kit Pose Detection — 33 landmarks, hanggang 30 FPS, simpleng API, sa GPU/ANE
  • BlazePose (MediaPipe) — 33 landmarks + 3D, hanggang 60 FPS, cross-platform
  • MoveNet Lightning/Thunder — 17 COCO keypoints, 30+ FPS, TFLite, multi-pose
  • Pose Classification — mula sa landmarks patungo sa aksyon sa pamamagitan ng rule-based o ML
  • On-device — privacy, real-time, 3 ms–30 ms latency
  • Paglalapat — fitness, rehabilitasyon, AR filters, sports analytics

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din