Pose Detection: bu nima, modellar va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-07-19 O'qish vaqti: 9 daq

Pose Detection — asosiy nuqtalar (landmarks) orqali inson tanasining holatini aniqlaydigan kompyuter ko'rish texnologiyasi: bosh, yelkalar, tirsaklar, bilaklar, sonlar, tizzalar, to'piqlar. Har bir nuqta 2D fazoda koordinatalarga (x, y) ega, kengaytirilgan modellar (MediaPipe BlazePose 3D) esa chuqurlik uchun z-koordinatasini qo'shadi. Mobil ilovalarda Pose Detection fitnes kuzatuvchilarida, yoga ilovalarida, AR filtrlarda, reabilitatsiya dasturlarida va sport analitikasi tizimlarida qo'llaniladi. Google ML Kit, 2025 ma'lumotlariga ko'ra, qurilmadagi Pose Detection sekundiga 30 kadrgacha ishlaydi va 94% PCK aniqligiga ega.

Asosiy

  • Pose Detection — tasvirdan tananing asosiy nuqtalarini (landmarks) aniqlash
  • ML Kit Pose Detection — 33 landmarks, 30 FPS, 94% PCK aniqligi
  • MediaPipe BlazePose — 33 landmarks + 3D, GPUda 60 FPS gacha
  • MoveNet Lightning — 17 keypoints (COCO), 30+ FPS, 8 MB, INT8
  • On-device — maxfiylik, real-time, videoni serverga yubormasdan

Pose Detection nima: asoslar va metrikalar

Pose Detection (shuningdek Pose Estimation deb ham ataladi) tasvir yoki video asosida inson tanasining semantik asosiy nuqtalarini aniqlash vazifasiga tegishli. Top-down yondashuvi avval insonni aniqlaydi (Object Detection), keyin uning holatini belgilaydi. Bottom-up yondashuvi tasvirdagi barcha landmarkslarni topadi, keyin ularni shaxslar bo'yicha guruhlaydi (OpenPose). Mobil qurilmalar uchun bottom-up ishlatiladi — kadrda bir necha kishi bo'lganda tezroq. ML Kit va BlazePose single-stage yondashuvidan foydalanadi — aniqlash + holat bir o'tishda.

COCO Keypoints — 17 nuqtadan iborat standart to'plam: burun, ko'zlar (2), quloqlar (2), yelkalar (2), tirsaklar (2), bilaklar (2), sonlar (2), tizzalar (2), to'piqlar (2). MediaPipe BlazePose oyoq barmoqlari, to'piqlar, gavda markazi, yuz nuqtalarini qo'shib 33 nuqtadan foydalanadi. Nuqtalar qancha ko'p bo'lsa, holat tahlili shuncha aniq, ammo hisoblash yuki ham yuqori. Fitnes ilovalari uchun 17–20 nuqta yetarli. To'liq tahlil uchun (yoga, raqs) — 33 nuqta. AR filtrlar uchun — 33 nuqta + 468 yuz nuqtasi (MediaPipe Face Mesh).

PCK (Percentage of Correct Keypoints) — Pose Detection aniqligi metrikasi. Ground truthdan masofa chegarasida (odatda insonning bounding box o'lchamining 0.05–0.15) bashorat qilingan nuqtalarning ulushi sifatida hisoblanadi. ML Kit Pose Detection: 94% PCK@0.1. BlazePose Full: 96% PCK@0.1. MoveNet Lightning: 91% PCK@0.1. OKS (Object Keypoint Similarity) — COCOda ishlatiladigan, insonning masshtabi va nuqtaning qiyinligini hisobga oladigan metrika. mAP@OKS — benchmarklar uchun standart metrika.

ModelLandmarksPCK@0.1Latency (GPU)Hajmi
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: har bir landmark modelning nuqtaga qanchalik ishonchliligini va uning ko'rinishini ko'rsatadigan ballga (0..1) ega. Bali < 0.5 bo'lgan nuqtalar ko'rinmas deb hisoblanadi (yopiq, kadrdan tashqari). Holat tahlili uchun faqat ko'rinadigan nuqtalardan foydalaning. Tekislashni (alignment) baholash uchun — confidence-weighted distances hisoblang, bunda past balli nuqtalar metrikada kamroq vaznga ega.

ML Kit Pose Detection Android va iOSda

ML Kit Pose Detection — Google tomonidan qurilmada holatni aniqlash uchun kutubxona. 33 landmarksni, shu jumladan yuz nuqtalari, oyoq barmoqlari va to'piqlarni qo'llab-quvvatlaydi. Rejimlar: Accurate Mode (14 MB model, 15–30 ms, yuqori aniqlik) va Streaming Mode (5 MB, 5–10 ms, real-time uchun). Streaming Mode kuzatuv bilan yengil modeldan foydalanadi — birinchi kadrdan so'ng aniq pozitsiyalarni qayta aniqlamasdan harakatni kuzatadi, bu esa 60 FPSgacha beradi.

ML Kit Pose Detection API: PoseDetector (variantlar: setDetectorMode, setPerformanceMode) → InputImage → Pose (List<PoseLandmark>). Har bir PoseLandmarkda: landmarkType (38 tur), position (PointF3D), inFrameLikelihood (0..1) mavjud. Pose shuningdek taqdim etadi: insonning boundingBoxi, landmarks ro'yxati, getLandmark(type) metodi. Holat tasnifi uchun suyaklar orasidagi burchaklardan foydalaning: shoulderAngle, elbowAngle, hipAngle — qo'shni landmarks orasida Vector3D orqali hisoblanadi.

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 iOSda: Pose Detection ML Kit CocoaPods orqali mavjud. API Android bilan bir xil: PoseDetector → UIImage → Pose → PoseLandmark. iOSda ML Kit Core ML va ANE (A12+) dan foydalanadi, bu esa iPhone 15 Proda Accurate Mode da 10–20 ms kechikishni ta'minlaydi. Streaming Mode — 3–8 ms, 120 FPSgacha. iOSda ML Kit Pose Detection MediaPipe BlazePosedan tezroq ishlaydi (Core ML tezlashtirish), lekin eski qurilmalarda (iPhone X–11) FPS soni bo'yicha BlazePosedan past.

MediaPipe BlazePose: arxitektura va 3D

MediaPipe BlazePose — Google Research tomonidan Pose Detection uchun yuqori samaradorlikdagi model. MobileNetV2 + Feature Pyramid Network asosidagi gibrid detector-decoder pipeline arxitekturasidan foydalanadi. BlazePose Full: 33 landmarks + 3D koordinatalar (z chuqurligi). BlazePose Lite: chuqurliksiz 33 landmarks (2D). Ikkala model Android, iOS, Python va Web uchun MediaPipe Tasks Visionda mavjud. BlazePose Full GPUda 30–60 FPS, Lite esa 60+ FPS ishlaydi.

BlazePose bilan 3D Pose Estimation: model har bir landmark uchun z-koordinatani bashorat qiladi, bu stereo kamerasisiz chuqurlikni (oyoq-qo'llarning yaqinlashishi/uzoqlashishi) baholash imkonini beradi. Z-koordinata kameraga nisbatan metrik fazoda (metrlarda) hisoblanadi. BlazePose 3D aniqligi: ochiq benchmarklarda 37 mm MPJPE (Mean Per Joint Position Error) — fitnes va AR uchun yetarli, tibbiy diagnostika uchun yetarli emas. ARKit/ARFoundation uchun BlazePose 3D tabiiy chuqurlikni ta'minlaydi.

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 tezroq (60+ FPS vs 30 FPS), 3D koordinatalarni qo'llab-quvvatlaydi, MediaPipe orqali platformalararo ishlaydi. ML Kit integratsiyada soddaroq (MediaPipe SDK talab qilmaydi), yuqori aniqlikdagi oldindan o'qitilgan modellarni o'z ichiga oladi. iOSga asoslangan loyihalar uchun — ML Kit Pose Detection (ANE uchun yaxshiroq optimallashtirish). Platformalararo loyihalar uchun (Flutter, React Native) — MediaPipe BlazePose (barcha platformalar uchun yagona model). Murakkab sahnalarda aniqlik uchun — ikkala model solishtirish mumkin.

MoveNet: TensorFlowdan Lightning va Thunder

MoveNet — TensorFlowdan TFLite uchun optimallashtirilgan Pose Detection modellari oilasi. Lightning (8 MB, INT8 — 4 MB): 17 COCO keypoints, 91% PCK, 8–15 ms kechikish, 30+ FPS. Thunder (13 MB, INT8 — 6 MB): 17 keypoints, 95% PCK, 25–40 ms kechikish, 20+ FPS. MoveNet CenterNet arxitekturasi + yuqori aniqlikdagi heatmap uchun bilinear interpolatsiyadan foydalanadi. MoveNet multi-pose detectionni (6 kishigacha) qo'llab-quvvatlaydi. Modellar TensorFlow HUBda mavjud.

MoveNet Lightning vs Thunder: Lightning — yuqori FPS talab qiladigan real-time ilovalar uchun (fitnes, AR filtrlar). Thunder — GPUli qurilmalarda aniq holat tahlili uchun (reabilitatsiya, sport analitikasi). Ikkala model iOS uchun tf-coreml orqali Core MLga konvertatsiya qilinadi. MoveNet shuningdek TFLite Task Vision PoseLandmarker API orqali mavjud. Tavsiya: Lightningdan boshlang, aniqlik yetarli bo'lmasa — Thunderga o'ting (faqat +15 ms kechikish ustama).

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 kishigacha aniqlash. Standart heatmap yondashuvi o'rniga MoveNet person detection + pose refinement dan foydalanadi: avval odamlarni aniqlaydi (centroid-based), keyin har birining holatini baholaydi. Multi-pose rejimi single-pose dan 2–3x sekinroq: Lightning — 25–50 ms (6 kishi). Yagona foydalanuvchili fitnes ilovalari uchun single-pose dan foydalaning. Guruh mashg'ulotlari uchun (yoga, crossfit) — batareyani tejash uchun kadr cheklovi bilan multi-pose.

Holatlarni tasniflash: nuqtalardan harakatlarga

Pose Classification — aniqlashdan keyingi bosqich: landmarkslarni semantik harakatlarga aylantirish (turadi, o'tiradi, qo'l ko'tardi, cho'kadi). Yondashuvlar: Rule-based (qo'lda qoidalar — suyaklar orasidagi burchaklar), ML-based (landmarks vektori bo'yicha logistik regressiya yoki Random Forest), DL-based (kadrlar bo'yicha holatlar ketma-ketligining LSTM tasnifi). Rule-based — 50–80% aniqlik, sodda va tez. ML-based — 200+ belgilangan namuna bilan 85–95% aniqlik. LSTM — vaqt seriyalarida (video) 90–98% aniqlik.

Suyaklar orasidagi burchaklar: har bir nuqta uchun qo'shnilardan burchaklar hisoblanadi. Misollar: right elbow angle (shoulder → elbow → wrist), right knee angle (hip → knee → ankle), torso angle (yelkalar o'rtasi → sonlar o'rtasi). Burchaklar masshtab va ekrandagi insonning joylashuviga bog'liq emas. Burchaklarni [0, 1] oralig'iga normallashtirish oddiy chegara qoidasi bilan holatni tasniflash imkonini beradi: agar elbowAngle < 30° — qo'l bukilgan, > 150° bo'lsa — to'g'rilangan.

kotlin
// Qoidalarga asoslangan cho’qilish tasniflagichi
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 tarkibidagi oldindan o'qitilgan tasniflagichlar: cho'qilishlar, push-uplar, planka, oyoq ko'tarishlar. Tasniflagich landmarks ro'yxatini qabul qiladi va harakat + ishonchlilikni qaytaradi. Vaqt bo'yicha tekislashni (temporal filter) o'z ichiga oladi: HED (Holt Exponential Double Smoothing) holatlar o'rtasida silliq o'tish uchun. Maxsus harakatlar uchun — MediaPipe Model Maker (TensorFlow Lite + metadata) orqali 100–500 namuna bo'yicha tasniflagichni o'qiting.

Pose Detectionning fitnes va reabilitatsiyada qo'llanilishi

Texnikani tuzatish bilan fitnes kuzatuvchilari — ilova foydalanuvchining mashq paytidagi holatini tahlil qiladi va ovozli ko'rsatmalar beradi: “havozni pastga tushir”, “gavdani egma”. ML Kit Pose Detection + rule-based tasniflagich takrorlashlarni hisoblaydi va sifatni baholaydi. Squat: knee angle < 90° — to'g'ri cho'kish, back angle < 45° — xavfli gavda egilishi. Push-up: elbow angle < 90° pastki nuqtada — to'liq push-up. Pull-up: iyak turk sathidan yuqori.

Reabilitatsiya va fizioterapiya — Pose Detection fizioterapiya mashqlarini masofadan nazorat qilish uchun ishlatiladi. Shifokor namunaviy holatni belgilaydi (masalan, yelkani 45° ga yozish), ilova joriy burchak va og'ishlarni o'lchaydi. BlazePose 3D burchak aniqligini ±3° bilan ta'minlaydi — klinik baholash uchun yetarli. Chastota: 3–5 soniyada 1 kadr (batareyani tejash). On-device — bemorning tibbiy ma'lumotlarining maxfiyligi. Insultdan keyin reabilitatsiya: hand-to-shoulder, elbow-extension, hip-flexion kuzatish.

AR filtrlar va effektlar — Pose Detection ijtimoiy tarmoq filtrlarining (TikTok, Instagram, Snapchat) asosida yotadi. Bosh, yelka va qo'llarning landmarkslari niqoblar, animatsiyalar va dekorativ elementlarni qoplash uchun ishlatiladi. MediaPipe BlazePose Full + Face Mesh (468 nuqta) flagman qurilmalarda 120+ FPS beradi. ARKit/ARCore Face Tracking + Pose Detection — full-body AR uchun kombinatsiya. Talablar: FPS > 30, motion-to-photon latency < 20 ms.

swift
// Holat nuqtalari bilan 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)
    }
}

Sport analitikasi — professional texnikani baholash: yugurishning biomexanik tahlili (cadence, stride length, arm swing symmetry), suzishning (body roll, eshkak tortishda elbow angle), tennisning (shoulder rotation, wrist snap) tahlili. MoveNet Thunder postprotsessing bilan noprofessional analitika uchun yetarli aniqlikni ta'minlaydi. Professional sport uchun 3D Motion Capture (Vicon, OptiTrack) talab qilinadi, lekin telefondagi Pose Detection ommaviy bozor uchun qulay alternativdir. Kadrlar orasida burchaklarni sinxronlashtirish — asosiy komponent.

Tez-tez beriladigan savollar

Kamera titrashi paytida Pose Detectionni qanday barqarorlashtirish mumkin?

Temporal smoothing (vaqt bo'yicha tekislash) dan foydalaning: One Euro Filter (1€ filter) — har bir landmark uchun alohida sozlanadigan cut-off frequency, yuqori chastotali shovqinni (titrash) bostiradi, real harakatni saqlaydi (low latency). MediaPipe BlazePose harakatni bashorat qilish bilan moslashtirilgan tekislash — o'rnatilgan HED (Holt Exponential Double Smoothing) ni o'z ichiga oladi. ML Kit uchun 1€ filterni o'zingiz amalga oshiring: filtr ikkita parametrga ega — beta (tezlik) va minCutoff (chastota chegarasi). Tavsiya qilinadi: beta = 0.04, minCutoff = 0.5 (Android).

Pose Detection kadrda necha kishini aniqlay oladi?

ML Kit Pose Detection — bir kishini (single-pose). MoveNet Lightning — 6 kishigacha (multi-pose). MediaPipe BlazePose — MediaPipe Tasks orqali 2–3 kishigacha (multi-pose). Guruh mashg'ulotlari bo'lgan ilovalar uchun MoveNet Lightning yoki BlazePose dan foydalaning. Yagona foydalanuvchili fitnes ilovalari uchun — ML Kit (sodda integratsiya, yuqori single-pose aniqligi). AR filtrli videoqo'ng'iroqlar uchun — multi-pose bilan BlazePose Lite yetarli (yuqori FPS).

Holat tasnifi uchun suyaklar orasidagi burchakni qanday hisoblash mumkin?

Ikki suyak orasidagi burchak: uchta landmarks oling — bo'g'im A, bo'g'im B (burchak uchi), bo'g'im C. BA = (A - B) va BC = (C - B) vektorlarini hisoblang. Burchak = atan2(cross(BA, BC), dot(BA, BC)). Math.toDegrees(acos(dot(BA, BC) / (len(BA) * len(BC)))). Burchak 0–180° oralig'ida. Uch o'lchovli koordinatalar (BlazePose 3D) uchun Vector3D dan foydalaning. ML tasniflagichi uchun burchaklarni [0,1] oralig'iga normalishtiring.

Ikkala qo'lning holatini bir vaqtda aniqlash mumkinmi?

Ha, barcha asosiy modellar (ML Kit, BlazePose, MoveNet) ikkala qo'lning landmarkslarini bir vaqtda aniqlaydi: LEFT_SHOULDER, LEFT_ELBOW, LEFT_WRIST, RIGHT_SHOULDER, RIGHT_ELBOW, RIGHT_WRIST. Qo'llarni qo'shimcha aniqlash (hand tracking) uchun Pose Detection + Hand Landmarker (har bir qo'l uchun 21 nuqta) birlashtiring. MediaPipe Hands + BlazePose — full-body + hands uchun standart kombinatsiya. iOSda — VNDetectHumanHandPoseRequest + VNDetectHumanBodyPoseRequest.

Pose Detection uchun kadrdagi insonning minimal o'lchami qancha?

ML Kit Pose Detection: insonning minimal bounding boxi — 100x100 piksel (nisbat ~1:1). MoveNet Lightning: 120x120 piksel. BlazePose: 80x160 piksel (vertikal bounding box). Kameradan 3 metr masofada (1920x1080) to'liq bo'yli inson — taxminan 250x600 px, bu yetarli. Masofa > 5 metr bo'lganda aniqlik pasayadi — Multi-Pose + high-resolution input dan foydalaning. Uzoq ob'ektlar uchun Object Detection + Pose Estimation (two-stage) yaxshiroq.

Xulosalar

  • Pose Detection — 91–96% PCK aniqligi bilan 17–33 asosiy tana nuqtalarini aniqlash
  • ML Kit Pose Detection — 33 landmarks, 30 FPS gacha, sodda API, GPU/ANEdan
  • BlazePose (MediaPipe) — 33 landmarks + 3D, 60 FPS gacha, platformalararo
  • MoveNet Lightning/Thunder — 17 COCO keypoints, 30+ FPS, TFLite, multi-pose
  • Pose Classification — rule-based yoki ML orqali landmarksdan harakatlarga
  • On-device — maxfiylik, real-time, 3 ms–30 ms kechikish
  • Qo'llanilish — fitnes, reabilitatsiya, AR filtrlar, sport analitikasi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing