পাঠ ৩২ · ৩৫-এর মধ্যে · মডিউল ৪
Home / AI Courses / Computer Vision / Pose estimation

Pose estimation

Human pose estimation — keypoint detection
৭ মিনিট পড়া মাঝারি · Intermediate MediaPipe কোড

এই পাঠে যা শিখবেন

  • Pose keypoint convention
  • Top-down vs bottom-up
  • Heatmap regression
  • MediaPipe practical use

১ · Body keypoint convention

  • COCO 17-keypoint: standard — eyes, ears, shoulders, elbows, wrists, hips, knees, ankles।
  • OpenPose 25-keypoint: + foot, neck।
  • MediaPipe 33-keypoint: face details added।
  • Hand: 21 keypoint per hand।
  • Face: 68 (dlib) বা 468 (MediaPipe)।
কেন্দ্রীয় ধারণা

Pose estimation = "structured keypoint regression"। Per-pixel heatmap predict — peak = keypoint location। Sub-pixel accuracy from heatmap distribution।

২ · Top-down approach

  1. Person detect (Faster R-CNN, YOLO)।
  2. Each person crop → CNN → 17 heatmap (one per keypoint)।
  3. Heatmap argmax → keypoint coordinate।
  • Models: SimpleBaseline, HRNet, ViTPose।
  • Pros: high accuracy, well-localized।
  • Cons: per-person inference, slower।

৩ · Bottom-up approach

  1. Single CNN forward — all keypoint heatmap।
  2. Part Affinity Field (OpenPose) — keypoint connect।
  3. Group keypoint to person।
  • Models: OpenPose, HigherHRNet।
  • Pros: single forward, scale to multi-person।
  • Cons: grouping ambiguity in crowd।

৪ · Heatmap regression

Each keypoint → 2D Gaussian heatmap centered at ground-truth location।

$$H(x, y) = \exp\left( -\frac{(x - x_k)^2 + (y - y_k)^2}{2\sigma^2} \right)$$

  • Network predict heatmap, MSE loss।
  • Inference: argmax → integer coordinate।
  • Sub-pixel: integrate near peak।

৫ · HRNet (২০১৯)

Sun et al. — High-Resolution Network। Pose-এ paradigm shift।

  • Multi-resolution parallel branches।
  • High-resolution preserved throughout।
  • Spatial precision keypoint detect-এ critical।
  • COCO pose 75% AP — SOTA।

৬ · MediaPipe Pose (Google, ২০২০)

  • 33-keypoint, mobile-optimized।
  • Two-stage — pose detector + landmark।
  • Tracking via temporal smoothing।
  • Realtime on smartphone।
  • Open source, easy use।

৭ · 3D pose estimation

  • 2D keypoint → 3D coordinate predict।
  • Methods: VideoPose3D (Pavllo et al.), MediaPipe BlazePose।
  • Application: motion capture, AR, animation।
  • SMPL model — full body mesh।
Pose estimation = "stick figure extract from photo"। Each joint precise location। Animation, fitness, AR — all build on this stick figure।
Pose estimation — keypoint detection Image with pose CNN/HRNet multi-res extract 17 heatmap output 17 heatmaps per keypoint argmax → coord Heatmap-based — sub-pixel keypoint precise Top-down (per person crop) vs bottom-up (single forward)
Pose estimation — image → CNN → 17 heatmap → argmax keypoint। Stick figure extract।

৮ · MediaPipe practical

Python · MediaPipe
# pip install mediapipe
import mediapipe as mp
import cv2

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
    static_image_mode=True,
    model_complexity=2,            # 0=lite, 1=full, 2=heavy
    enable_segmentation=False,
    min_detection_confidence=0.5
)

img = cv2.imread('person.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = pose.process(img_rgb)

if results.pose_landmarks:
    h, w = img.shape[:2]
    for i, lm in enumerate(results.pose_landmarks.landmark):
        x, y = int(lm.x * w), int(lm.y * h)
        print(f"Landmark {i}: ({x}, {y}), confidence: {lm.visibility:.2f}")
        cv2.circle(img, (x, y), 5, (0, 255, 0), -1)

cv2.imwrite('output.jpg', img)
pose.close()

    
MediaPipe — extremely user-friendly। Mobile realtime। Hand, face, pose, holistic — all included।

৯ · Use cases

  • Fitness app: push-up count, yoga form correct।
  • Sports analytics: player tracking, biomechanics।
  • Animation: motion capture for game/film।
  • AR/VR: body tracking, virtual try-on।
  • Healthcare: rehabilitation, gait analysis।
  • Sign language: pose + hand recognition।
  • Action recognition: walking, running, falling detect।

১০ · Modern models

  • HRNet: high-resolution preserve। Top-down accurate।
  • ViTPose (২০২২): ViT backbone। 81% AP।
  • RTMPose (২০২৩): realtime SOTA।
  • MMPose (OpenMMLab): comprehensive library।
  • SMPL-X: full body mesh + face + hands।

১১ · Bangladesh applications

  • Yoga/fitness app for local market।
  • Cricket batting/bowling analysis।
  • Bangla sign language recognition।
  • Rehabilitation hospital — physiotherapy assistant।
  • Virtual saree try-on।
  • Dance form analysis (classical Bangla dance)।
Pose estimation crowded scene-এ struggle। Occlusion, similar clothing — accuracy drop। Multiple person — explicit ID tracking দরকার (DeepSORT)।

ভাবনার প্রশ্ন

প্র ০১ Heatmap regression vs direct coordinate regression — কেন heatmap প্রায়ই better?

Pose estimation-এর foundational design choice।

Direct regression:

  • Network output: 17 × 2 = 34 number (x, y per keypoint)।
  • L2 loss।
  • Simple, fast।

Heatmap regression:

  • Network output: 17 × H × W heatmap।
  • Each heatmap — Gaussian peak at keypoint।
  • Inference: argmax।

Why heatmap better:

  • Spatial supervision: per-pixel signal — denser gradient।
  • Multi-modal output: uncertainty natural represent।
  • Sub-pixel accuracy: peak interpolation।
  • Translation equivariance: CNN natural fit।

Empirical:

  • Direct: 65% PCK।
  • Heatmap: 80%+ PCK।
  • Significant gap।

Direct still useful:

  • RTMPose — direct regression with tricks।
  • DETR-style — set prediction।
  • Mobile/realtime — direct faster।

Hybrid:

  • Heatmap + offset regression (coordinate refine)।
  • Best of both।

মূল উপলব্ধি: Output structure matter। Heatmap CNN-এর spatial nature exploit। Modern direct regression catching up।

প্র ০২ OpenPose Part Affinity Field (PAF) কী? Bottom-up grouping কীভাবে?

OpenPose-এর key innovation।

Problem:

  • Single CNN — all person-এর keypoint detect।
  • Multiple wrist heatmap (multiple people)।
  • "This wrist belongs to which person's elbow?" — ambiguity।

PAF idea:

  • Each limb (e.g., elbow→wrist) — vector field predict।
  • Vector points along limb direction।
  • Path integral between two keypoint = PAF score।
  • High score → likely connected।

Output:

  • 17 keypoint heatmap।
  • 2 × 19 limb PAF (x, y direction per limb)।

Grouping algorithm:

  1. NMS on heatmap → candidate keypoint।
  2. Pair-wise PAF score compute।
  3. Greedy bipartite matching per limb type।
  4. Connected component → person।

Advantages:

  • Single forward pass — multi-person efficient।
  • Realtime even with 10+ people।

Limitations:

  • Crowded scene — grouping fail।
  • Occlusion — broken connection।
  • Top-down accuracy higher।

Modern variants:

  • HigherHRNet — better resolution।
  • Associative Embedding — learned grouping।
  • CenterNet pose — center + offset।

মূল উপলব্ধি: Bottom-up grouping — combinatorial structure CNN-এ encode। Vector field clever representation।

প্র ০৩ 3D pose estimation — 2D image থেকে 3D infer। Ill-posed problem? কীভাবে কাজ করে?

3D pose — geometric ill-posed but ML solvable।

Why ill-posed:

  • 2D image — depth information lose।
  • Multiple 3D pose project to same 2D।
  • "Pose ambiguity"।

Approaches:

  • Lifting: 2D keypoint → 3D coordinate (Martinez 2017)।
  • Direct: image → 3D directly।
  • Multi-view: multiple camera triangulation।
  • Temporal: video — temporal consistency।
  • SMPL-based: parametric body model।

Lifting-based:

  • Train on motion capture data (e.g., Human3.6M)।
  • Learn statistical prior — "natural pose"।
  • Resolve ambiguity using prior।

SMPL (Skinned Multi-Person Linear, ২০১৫):

  • Parametric body model।
  • 10 shape + 72 pose parameter।
  • Photo-realistic 3D mesh।
  • VIBE, ROMP — predict SMPL parameter।

MediaPipe BlazePose 3D:

  • Per-keypoint x, y, z।
  • z relative to hip (not world coord)।
  • Mobile realtime।

Application:

  • Motion capture — film, game।
  • VR avatar।
  • Sports — biomechanics analysis।
  • Healthcare — gait।

Bangladesh:

  • Game studio (Battery Low Interactive) — character animation।
  • Film industry — VFX assist।
  • Cricket coaching — biomechanics।

মূল উপলব্ধি: ill-posed problem — ML prior দিয়ে solvable। 3D pose modern CV-র mature subfield।

প্র ০৪ Bangladesh fitness app — pushup counter। MediaPipe Pose use করে কীভাবে count? Edge case কী?

Real Bangladesh use case। Local startups (e.g., Yoga House BD) explore।

Pushup detection logic:

  1. MediaPipe Pose extract keypoint।
  2. Calculate elbow angle: shoulder-elbow-wrist।
  3. Track angle across frames।
  4. State machine:
    • UP: elbow ~170° (arms extended)।
    • DOWN: elbow ~90° (chest near floor)।
    • UP→DOWN→UP = one rep।
  5. Count valid transitions।

Form check:

  • Body straight: shoulder-hip-ankle alignment।
  • Hip drop detect — bad form।
  • Visual feedback to user।

Edge cases:

  • Lighting: dim — keypoint detection fail।
  • Camera angle: non-side view — angle calculation off।
  • Loose clothing: hide body landmark।
  • Background clutter: false detection।
  • Multiple people: pick "main" person (closest/largest)।
  • Phone shake: noisy keypoint — temporal smooth।
  • Mat/clothes color: contrast issue।

Mitigation:

  • Onboarding: optimal camera position guide।
  • Confidence threshold — low conf reject।
  • Median filter on angle signal।
  • Min/max angle thresholds tuned।

App architecture:

  • Mobile camera → MediaPipe (on-device)।
  • Realtime feedback overlay।
  • Voice cue ("good form", "lower")।
  • Backend — workout history sync।

Bangla touch:

  • Bangla TTS feedback ("ভাল!", "নিচে")।
  • Local exercise (e.g., burpees, traditional)।
  • Rural area — low-internet operation।

Business consideration:

  • Premium fitness app subscription।
  • Personal trainer + AI hybrid।
  • Corporate wellness program।

Privacy:

  • On-device processing — no cloud upload।
  • User data: count, not video।
  • Transparent privacy policy।

মূল উপলব্ধি: Domain-specific application — pose-based AI rich opportunity। Bangladesh — fitness, healthcare, sports vertical underserved।

অনুশীলন

  1. MediaPipe pose: Webcam realtime pose detect। 33 landmark visualize।
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        results = pose.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
        if results.pose_landmarks:
            mp.solutions.drawing_utils.draw_landmarks(
                frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
        cv2.imshow('Pose', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): break
  2. Squat counter: knee angle track, count squat repetition।

    Hip-knee-ankle angle compute। DOWN: ~90°, UP: ~170°। State machine count rep।

  3. ভাবুন: Bangla cricket coach app — bowler arm action analyze। Pose estimation কীভাবে?

    Side-view video → 3D pose। Arm angle, release point, follow-through measure। Compare with pro reference. Real-time feedback।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? Google Colab use করুন।
পূর্ববর্তী পাঠ
পাঠ ৩১ · Face recognition