Human Pose Estimation System Development

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
Human Pose Estimation System Development
Medium
from 1 week to 3 months
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822

System Development распознавания поз человека (Pose Estimation)

Pose estimation — детекция ключевых точек тела человека (keypoints): суставы, голова, конечности. Задача: по изображению или видео получить 2D или 3D координаты 17–133 точек скелета. Applications: фитнес-приложения с анализом техники упражнений, кинозахват без маркеров, реабилитационные системы, спортивная аналитика, AR/VR аватары.

Top-down vs Bottom-up подходы

Top-down: сначала детектировать людей (bounding boxes), потом для каждого отдельно предсказать keypoints. Более точный, медленнее при большом количестве людей. Models: ViTPose, RTMPose, HRNet.

Bottom-up: сначала находим все keypoints на изображении, потом группируем по людям. Быстрее при multiple people. Models: OpenPose, HigherHRNet.

from ultralytics import YOLO
import cv2

# YOLOv8-pose — top-down, производительный вариант
model = YOLO('yolov8l-pose.pt')

def estimate_poses(image_path: str) -> list[dict]:
    results = model(image_path, conf=0.5)
    poses = []

    for result in results:
        for i, (bbox, kps) in enumerate(zip(
            result.boxes.xyxy,
            result.keypoints.data
        )):
            keypoints = []
            for j, kp in enumerate(kps):
                x, y, conf = kp
                keypoints.append({
                    'name': COCO_KEYPOINTS[j],
                    'x': float(x),
                    'y': float(y),
                    'confidence': float(conf)
                })

            poses.append({
                'person_id': i,
                'bbox': bbox.tolist(),
                'keypoints': keypoints
            })

    return poses

COCO_KEYPOINTS = [
    'nose', 'left_eye', 'right_eye', 'left_ear', 'right_ear',
    'left_shoulder', 'right_shoulder', 'left_elbow', 'right_elbow',
    'left_wrist', 'right_wrist', 'left_hip', 'right_hip',
    'left_knee', 'right_knee', 'left_ankle', 'right_ankle'
]

ViTPose и RTMPose

ViTPose — лучшее качество на COCO benchmark. ViTPose-H: AP 79.1 на COCO val2017. Transformer-based backbone.

RTMPose — оптимизирован для production (RTMDet детектор + RTMPose backbone). RTMPose-l: AP 76.3, latency 3ms на T4. Рекомендуется для систем реального времени.

from mmpose.apis import MMPoseInferencer

inferencer = MMPoseInferencer('rtmpose-l_8xb32-270e_coco-wholebody-384x288')
results = inferencer('image.jpg', out_dir='output/')

3D Pose Estimation

Для реабилитации, спортивного анализа нужны 3D-координаты:

  • MotionBERT — transformer для 2D→3D лифтинга: принимает 2D keypoints из видео, выдаёт 3D скелет
  • MediaPipe Pose — встроенный 3D (относительные 3D координаты без depth camera)
  • Stereo camera setup — точный 3D через две синхронизированные камеры
  • Depth camera (Intel RealSense, Azure Kinect) — RGBD для точного 3D

Анализ техники выполнения упражнений

import numpy as np

def analyze_squat_form(keypoints: dict) -> dict:
    """Анализ техники приседания по keypoints"""
    # Угол в колене
    hip = np.array([keypoints['left_hip']['x'], keypoints['left_hip']['y']])
    knee = np.array([keypoints['left_knee']['x'], keypoints['left_knee']['y']])
    ankle = np.array([keypoints['left_ankle']['x'], keypoints['left_ankle']['y']])

    knee_angle = calculate_angle(hip, knee, ankle)

    # Выравнивание спины (наклон туловища)
    shoulder = np.array([keypoints['left_shoulder']['x'],
                          keypoints['left_shoulder']['y']])
    torso_angle = calculate_angle(shoulder, hip,
                                   np.array([hip[0], hip[1] + 100]))

    return {
        'knee_angle': knee_angle,
        'torso_angle': torso_angle,
        'depth': 'sufficient' if knee_angle < 90 else 'insufficient',
        'back_alignment': 'good' if 70 < torso_angle < 90 else 'needs_correction'
    }

Metrics качества

  • OKS (Object Keypoint Similarity) — основная метрика COCO
  • AP (Average Precision) на COCO val
  • PCKh (Percentage of Correct Keypoints) — для head-normalized threshold
Модель AP COCO val FPS (T4)
RTMPose-t 68.5 300
RTMPose-l 76.3 100
ViTPose-B 75.8 50
ViTPose-H 79.1 20
Применение Срок
Фитнес-приложение с анализом упражнений 4–6 недель
Реабилитационная система с 3D 7–10 недель
Mocap без маркеров для анимации 8–14 недель