Разработка системы распознавания поз человека (Pose Estimation)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка системы распознавания поз человека (Pose Estimation)
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка системы распознавания поз человека (Pose Estimation)

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

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

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

Bottom-up: сначала находим все keypoints на изображении, потом группируем по людям. Быстрее при multiple people. Модели: 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'
    }

Метрики качества

  • 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 недель