Pose Detection: bu nədir, modellər və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-07-19 Oxuma vaxtı: 9 dəq

Pose Detection — əsas nöqtələr (landmarks) vasitəsilə insan bədəninin vəziyyətini təyin edən kompüter görmə texnologiyası: baş, çiyinlər, dirsəklər, biləklər, ombalar, dizlər, topuqlar. Hər bir nöqtə 2D məkanında koordinatlara (x, y) malikdir, və genişləndirilmiş modellər (MediaPipe BlazePose 3D) dərinlik üçün z-koordinatı əlavə edir. Mobil tətbiqlərdə Pose Detection fitnes izləyicilərində, yoqa tətbiqlərində, AR filtrlərində, reabilitasiya proqramlarında və idman analitikası sistemlərində tətbiq olunur. Google ML Kit, 2025 məlumatlarına görə, on-device Pose Detection saniyədə 30 kadra qədər emal edir və 94% PCK dəqiqliyinə malikdir.

Başlıca

  • Pose Detection — şəkildən bədənin əsas nöqtələrinin (landmarks) təyini
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, 94% PCK dəqiqliyi
  • MediaPipe BlazePose — 33 landmarks + 3D, GPU-da 60 FPS-dək
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 MB, INT8
  • On-device — məxfilik, real-time, videonu serverə göndərmədən

Pose Detection nədir: əsaslar və metrikalar

Pose Detection (həmçinin Pose Estimation kimi tanınır) şəkil və ya video əsasında insan bədəninin semantik əsas nöqtələrinin təyini vəzifəsinə aiddir. Top-down yanaşması əvvəlcə insanı aşkarlayır (Object Detection), sonra onun duruşunu təyin edir. Bottom-up yanaşması şəkildəki bütün landmarks-ları tapır, sonra onları şəxslər üzrə qruplaşdırır (OpenPose). Mobil cihazlar üçün bottom-up istifadə olunur — kadrda bir neçə nəfər olduqda daha sürətlidir. ML Kit və BlazePose single-stage yanaşmasından istifadə edir — aşkarlama və duruş bir keçiddə.

COCO Keypoints — 17 nöqtədən ibarət standart dəst: burun, gözlər (2), qulaqlar (2), çiyinlər (2), dirsəklər (2), biləklər (2), ombalar (2), dizlər (2), topuqlar (2). MediaPipe BlazePose ayaq barmaqlarını, dabanları, gövdənin mərkəzini, üz nöqtələrini əlavə edərək 33 nöqtədən istifadə edir. Nöqtələr nə qədər çox olarsa, duruş analizi bir o qədər dəqiq olar, lakin hesablama yükü də artar. Fitnes tətbiqləri üçün 17–20 nöqtə kifayətdir. Tam analiz üçün (yoqa, rəqs) — 33 nöqtə. AR filtrləri üçün — 33 nöqtə + 468 üz nöqtəsi (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — Pose Detection dəqiqlik metrikası. Ground truth-dan məsafə daxilində (adətən insanın bounding box ölçüsünün 0.05–0.15-i) proqnozlaşdırılan nöqtələrin payı kimi hesablanır. ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — COCO-da istifadə olunan, insanın miqyasını və nöqtənin çətinliyini nəzərə alan metrikadır. mAP@OKS — benchmarklar üçün standart metrikadır.

ModelLandmarksPCK@0.1Latency (GPU)Ölçü
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: hər bir landmark modelin nöqtəyə nə qədər əmin olduğunu və onun görünüb-görünmədiyini göstərən bala (0..1) malikdir. Balı < 0.5 olan nöqtələr görünməz sayılır (örtülü, kadr xaricində). Duruş analizi üçün yalnız görünən nöqtələrdən istifadə edin. Düzəlməni (alignment) qiymətləndirmək üçün — confidence-weighted distances hesablayın, burada aşağı bala malik nöqtələr metrikada daha az çəkiyə malikdir.

ML Kit Pose Detection Android və iOS-da

ML Kit Pose Detection — Google-dan cihazda duruşu təyin etmək üçün kitabxana. Üç nöqtələri, ayaq barmaqlarını və dabanları da daxil olmaqla 33 landmarks dəstəkləyir. Rejimlər: Accurate Mode (14 MB model, 15–30 ms, yüksək dəqiqlik) və Streaming Mode (5 MB, 5–10 ms, real-time üçün). Streaming Mode izləmə ilə yünüldədilmiş modeldən istifadə edir — ilk kadrdan sonra dəqiq mövqeləri təkrari aşkarlamadan hərəkəti izləyir və bu da 60 FPS-dək təmin edir.

ML Kit Pose Detection API: PoseDetector (seçimlər: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Hər bir PoseLandmark-da: landmarkType (38 növ), position (PointF3D), inFrameLikelihood (0..1) var. Pose hçüminə təmin edir: insanın boundingBox-ı, landmarks siyahısı, getLandmark(type) metodu. Duruşun təsnifatı üçün sümüklər arasındakı bucaqlardan istifadə edin: shoulderAngle, elbowAngle, hipAngle — qonşu landmarks arasında Vector3D vasitəsilə hesablanır.

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-da: Pose Detection ML Kit CocoaPods vasitəsilə mövcuddur. API Android ilə eynidir: PoseDetector → UIImage → Pose → PoseLandmark. iOS-da ML Kit Core ML və ANE-dən (A12+) istifadə edir ki, bu da iPhone 15 Pro-da Accurate Mode-da 10–20 ms latency təmin edir. Streaming Mode — 3–8 ms, 120 FPS-dək. iOS-da ML Kit Pose Detection MediaPipe BlazePose-dan daha sürətli işləyir (Core ML sürətləndirməsi), lakin köhnə cihazlarda (iPhone X–11) FPS sayına görə BlazePose-dan geri qalır.

MediaPipe BlazePose: memarlıq və 3D

MediaPipe BlazePose — Google Research-dən Pose Detection üçün yüksək məhsuldar model. MobileNetV2 + Feature Pyramid Network əsasında hibrid detector-decoder pipeline-dan istifadə edir. BlazePose Full: 33 landmarks + 3D koordinatları (z dərinliyi). BlazePose Lite: dərinliksiz 33 landmarks (2D). Hər iki model Android, iOS, Python və Web üçün MediaPipe Tasks Vision-da mövcuddur. BlazePose Full GPU-da 30–60 FPS, Lite isə 60+ FPS emal edir.

BlazePose ilə 3D Pose Estimation: model hər bir landmark üçün z-koordinatını proqnozlaşdırır ki, bu da stereo kamera olmadan dərinliyi (ətrafların yaxınlaşması/uzaqlaşması) qiymətləndirməyə imkan verir. Z-koordinatı kameraya nisbətən metrik məkanda (metrlə) hesablanır. BlazePose 3D dəqiqliyi: açıq benchmarklarda 37 mm MPJPE (Mean Per Joint Position Error) — fitnes və AR üçün kifayət, tibbi diaqnostika üçün kifayət deyil. ARKit/ARFoundation üçün BlazePose 3D təbii dərinlik təmin edir.

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: BlazePose daha sürətlidir (60+ FPS vs 30 FPS), 3D koordinatlarını dəstəkləyir, MediaPipe vasitəsilə platformalararası işləyir. ML Kit inteqrasiyada daha sadədir (MediaPipe SDK tələb etmir), yüksək dəqiqliyə malik əvvəlcədən təlim keçmiş modelləri ehtiva edir. iOS-əsaslı layihələr üçün — ML Kit Pose Detection (ANE altında daha yaxşı optimallaşdırma). Platformalararası layihələr üçün (Flutter, React Native) — MediaPipe BlazePose (bütün platformalar üçün vahid model). Tələbkar səhnələrdə dəqiqlik üçün — hər iki model müqayisə edilə bilər.

MoveNet: TensorFlow-dan Lightning və Thunder

MoveNet — TensorFlow-dan TFLite üçün optimallaşdırılmış Pose Detection modellər ailəsi. 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. MoveNet CenterNet memarlığı + yüksək ayırdetməli heatmap üçün bilinear interpolation-dan istifadə edir. MoveNet multi-pose detection-u dəstəkləyir (6 nəfərə qədər). Modellər TensorFlow Hub-da mövcuddur.

MoveNet Lightning vs Thunder: Lightning — yüksək FPS tələb edən real-time tətbiqlər üçün (fitnes, AR filtrləri). Thunder — GPU-su olan cihazlarda dəqiq duruş analizi üçün (reabilitasiya, idman analitikası). Hər iki model iOS üçün tf-coreml vasitəsilə Core ML-ə çevrilir. MoveNet həmçinin TFLite Task Vision PoseLandmarker API vasitəsilə də mövcuddur. Tövsiyə: Lightning ilə başlayın, dəqiqlik kifayət deyilsə Thundera keçin (cəmi +15 ms latency overhead).

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: kadrda 6 nəfərə qədər aşkarlama. Standart heatmap yanaşması əvəzinə MoveNet person detection + pose refinement-dan istifadə edir: əvvəlcə insanları aşkarlayır (centroid-based), sonra hər birinin duruşunu qiymətləndirir. Multi-pose rejimi single-pose-dan 2–3x yavaşdır: Lightning — 25–50 ms (6 nəfər). Tək istifadəçili fitnes tətbiqləri üçün single-pose istifadə edin. Qrup məşğələri üçün (yoqa, crossfit) — batareyaya qənaət üçün kadr məhdudiyyəti ilə multi-pose.

Duruşların təsnifatı: nöqtələrdən hərəkətlərə

Pose Classification — aşkarlamadan sonra mərhələ: landmarks-ların semantik hərəkətlərə çevrilməsi (dayanır, oturur, əl qaldırır, çömələyir). Yanaşmalar: Rule-based (əl ilə qaydalar — sümüklər arasındakı bucaqlar), ML-based (landmarks vektoru üzrə logistik reqressiya və ya Random Forest), DL-based (kadrlar üzrə duruş ardıcıllığının LSTM təsnifatı). Rule-based — 50–80% dəqiqlik, sadə və sürətli. ML-based — 200+ etiketlənmiş nümunə ilə 85–95% dəqiqlik. LSTM — vaxt sıralarında (video) 90–98% dəqiqlik.

Sümüklər arasındakı bucaqlar: hər bir nöqtə üçün qonşulardan bucaqlar hesablanır. Nümunələr: right elbow angle (shoulder → elbow → wrist), right knee angle (hip → knee → ankle), torso angle (çiyin orta nöqtəsi → omba orta nöqtəsi). Bucaqlar miqyas və ekrandakı insanın mövqeyindən asılı deyil. Bucaqların [0, 1] aralığına normallaşdırılması sadə eşik qaydası ilə duruşun təsnif edilməsinə imkan verir: elbowAngle < 30° — əl bükülmüş, > 150° — düz.

kotlin
// Qaydalara əsaslanan çöməlmə təsnifatlandırıcısı
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 — MediaPipe Tasks tərkibində əvvəlcədən təlim keçmiş təsnifatlandırıcılar: çöməlmələr, push-uplar, planka, ayaq qaldırmalar. Təsnifatlandırıcı landmarks siyahısını qəbul edir və hərəkəti + etibarlılıq səviyyəsini qaytarır. Zamana görə hamarlaşdırma (temporal filter) ehtiva edir: HED (Holt Exponential Double Smoothing) duruşlar arasında hamar keçid üçün. Xüsusi hərəkətlər üçün — MediaPipe Model Maker (TensorFlow Lite + metadata) vasitəsilə 100–500 nümunə üzrə təsnifatlandırıcını təlim etdirin.

Pose Detection-in fitnes və reabilitasiyada tətbiqi

Texnika korreksiyası ilə fitnes izləyiciləri — tətbiq istifadəçinin məşq zamanı duruşunu təhlil edir və səsli göstərişlər verir: „çanağı aşağı sal”, „gövdəni əymə”. ML Kit Pose Detection + rule-based təsnifatlandırıcı təkrarları sayır və keyfiyyəti qiymətləndirir. Squat: knee angle < 90° — düzgün çöməlmə, back angle < 45° — təhlükəli gövdə əyilməsi. Push-up: elbow angle < 90° aşağı nöqtədə — tam push-up. Pull-up: çənə çubuq səviyyəsindən yuxarı.

Reabilitasiya və fizioterapiya — Pose Detection fizioterapiya məşqlərinin uzaqdan nəzarəti üçün istifadə olunur. Həkim nümunəvi bir duruş təyin edir (məs.əlin 45° qaldırılması), tətbiq cari bucağı və sapmaları ölçür. BlazePose 3D ±3° bucaq dəqiqliyi təmin edir — klinik qiymətləndirmə üçün kifayətdir. Tezlik: 3–5 saniyədə 1 kadr (batareyaya qənaət). On-device — xəstənin tibbi məlumatlarının məxfiliyi. İnsultdan sonra reabilitasiya: hand-to-shoulder, elbow-extension, hip-flexion izlənməsi.

AR filtrləri və effektlər — Pose Detection sosial şəbəkə filtrlərinin (TikTok, Instagram, Snapchat) əsasındadır. Baş, çiyin və əl landmarks-ları maskaların, animasiyaların və dekorativ elementlərin üzərqoyulması üçün istifadə olunur. MediaPipe BlazePose Full + Face Mesh (468 nöqtə) flaqman cihazlarda 120+ FPS verir. ARKit/ARCore Face Tracking + Pose Detection — full-body AR üçün birləşmə. Tələblər: FPS > 30, motion-to-photon latency < 20 ms.

swift
// Duruş nöqtələri ilə AR filtri
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)
    }
}

İdman analitikası — peşəkar texnika qiymətləndirilməsi: qaçışın biomexaniki təhlili (cadence, stride length, arm swing symmetry), üzmənin (body roll, qol çəkməsində elbow angle), tennisin (shoulder rotation, wrist snap) təhlili. MoveNet Thunder postprosesinq ilə qeyri-peşəkar analitika üçün kifayət dəqiqlik təmin edir. Peşəkar idman üçün 3D Motion Capture (Vicon, OptiTrack) tələb olunur, lakin telefondakı Pose Detection kütləvi bazar üçün əlçatan alternativdir. Kadrlar arasında bucaqların sinxronlaşdırılması — əsas komponent.

Tez-tez verilən suallar

Kamera titrəməsi zamanı Pose Detection-i necə sabitləşdirmək olar?

Temporal smoothing (zaman hamarlaşdırma) istifadə edin: One Euro Filter (1€ filter) — hər bir landmark üçün ayrıca tənzimlənən cut-off frequency, yüksək tezlikli səsi (titrəmə) basdırır, real hərəkəti qoruyur (low latency). MediaPipe BlazePose hərəkət proqnozu ilə adaptiv hamarlaşdırma — quraşdırılmış HED (Holt Exponential Double Smoothing) ehtiva edir. ML Kit üçün 1€ filteri özünüz tətbiq edin: filtr iki parametrə malikdir — beta (sürət) və minCutoff (tezlik həddi). Tövsiyə olunan: beta = 0.04, minCutoff = 0.5 (Android).

Pose Detection kadrda neçə nəfəri aşkarlaya bilər?

ML Kit Pose Detection — bir nəfər (single-pose). MoveNet Lightning — 6 nəfərə qədər (multi-pose). MediaPipe BlazePose — MediaPipe Tasks vasitəsilə 2–3 nəfərə qədər (multi-pose). Qrup məşğələri olan tətbiqlər üçün MoveNet Lightning və ya BlazePose istifadə edin. Tək istifadəçili fitnes tətbiqləri üçün — ML Kit (sadə inteqrasiya, yüksək single-pose dəqiqliyi). AR filtrləri ilə videozənglər üçün — multi-pose ilə BlazePose Lite kifayətdir (yüksək FPS).

Duruş təsnifatı üçün sümüklər arasındakı bucağı necə hesablamaq olar?

İki sümük arasındakı bucaq: üç landmarks götürün — oynaq A, oynaq B (bucağın təpəsi), oynaq C. BA = (A - B) və BC = (C - B) vektorlarını hesablayın. Bucaq = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Bucaq 0–180° aralığındadır. Üçölçülü koordinatlar (BlazePose 3D) üçün Vector3D istifadə edin. ML təsnifatlandırıcısı üçün bucaqları [0,1] aralığına normallaşdırın.

Hər iki əlin duruşunu eyni anda təyin etmək olarmı?

Bəli, bütün əsas modellər (ML Kit, BlazePose, MoveNet) hər iki əlin landmarks-larını eyni anda aşkarlayır: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. Əl çəklərinin əlavə aşkarlanması (hand tracking) üçün Pose Detection + Hand Landmarker-i (hər əl üçün 21 nöqtə) birləşdirin. MediaPipe Hands + BlazePose — full-body + hands üçün standart birləşmədir. iOS-da — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

Pose Detection üçün kadrda insanın minimal ölçüsü nə qədərdir?

ML Kit Pose Detection: insanın minimal bounding box-ı — 100x100 piksel (nisbət ~1:1). MoveNet Lightning: 120x120 piksel. BlazePose: 80x160 piksel (şaquli bounding box). Kameradan 3 metr məsafədə (1920x1080) tam boy insan — təxminən 250x600 px, bu kifayətdir. Məsafə > 5 metr olduqda dəqiqlik düşür — Multi-Pose + high-resolution input istifadə edin. Uzaq obyektlər üçün Object Detection + Pose Estimation (two-stage) daha yaxşıdır.

Nəticələr

  • Pose Detection — 91–96% PCK dəqiqliyi ilə 17–33 əsas bədən nöqtəsinin təyini
  • ML Kit Pose Detection — 33 landmarks, 30 FPS-dək, sadə API, GPU/ANE-də
  • BlazePose (MediaPipe) — 33 landmarks + 3D, 60 FPS-dək, platformalararası
  • MoveNet Lightning/Thunder — 17 COCO keypoints, 30+ FPS, TFLite, multi-pose
  • Pose Classification — rule-based və ya ML ilə landmarks-dan hərəkətlərə
  • On-device — məxfilik, real-time, 3 ms–30 ms latency
  • Tətbiq — fitnes, reabilitasiya, AR filtrləri, idman analitikası

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun