Представьте: вы создаёте AR-фитнес-тренера. Пользователь делает упражнение, а виртуальный персонаж должен зеркально повторять движение. Если трекинг неточен — анимация рассинхронизируется, пользователь теряет мотивацию. Наши инженеры столкнулись с этим при разработке приложения для сквоша: задержка в 3 кадра делала игру неиграбельной. Решение — оптимизировать пайплайн трекинга под конкретное устройство. Мы переписали обработчик на Metal, и задержка упала до 1 кадра.
Используем ARKit на iOS (A12+) и MediaPipe на Android. У каждой платформы свои особенности: ARKit выдаёт 91 точку скелета с точностью до сантиметра, MediaPipe — 33 ключевые точки с погрешностью 5–10 см. Выбор зависит от целевой аудитории и бюджета. Правильный выбор платформы экономит до 30% бюджета на этапе прототипирования.
В этой статье разберём: как получать позу в реальном времени, привязывать 3D-модель к скелету, анализировать углы суставов для фитнеса и сравнивать платформы. Все сниппеты кода готовы к интеграции. Мы работаем с ARKit 6, RealityKit, MediaPipe 2.0 и Flutter. Для заказчиков, которым нужна максимальная точность, рекомендуем iOS с LiDAR — это даёт дополнительную глубину.
Как ARKit отслеживает тело?
iOS предлагает ARBodyTrackingConfiguration (требуется A12+). Скелет — 91 joint, иерархически связанных. Код получения позиции запястья:
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let bodyAnchor = anchors.first as? ARBodyAnchor else { return }
let skeleton = bodyAnchor.skeleton
if let wristTransform = skeleton.modelTransform(for: .rightHand) {
let worldTransform = bodyAnchor.transform * wristTransform
// Привязать объект к запястью
}
}
Ограничения: дистанция 1.5–5 м; один человек в кадре; при быстрых движениях задержка 2–4 кадра. Для multi-person используем сторонние ML-решения.
Как работает MediaPipe Pose?
Для Android используем MediaPipe Pose Landmarker (33 ключевые точки). Точность ниже ARKit (5–10 см против 1–3 см), но для фитнес-аналитики достаточно. Сравнение:
| Параметр | ARKit (iOS) | MediaPipe (Android) |
|---|---|---|
| Количество точек | 91 joint | 33 landmarks |
| Точность | 1–3 см | 5–10 см |
| Требования | A12+, Neural Engine | Любая RGB-камера |
| Частота кадров | 60 fps | 30–60 fps |
Почему ARKit точнее MediaPipe?
ARKit использует нейронный движок и данные от LiDAR (на Pro-моделях), что даёт стабильную глубину. MediaPipe полагается только на RGB-изображение, поэтому на сложном фоне или при плохом освещении точность падает. В реальных тестах ARKit показывает в 3 раза меньшую ошибку позиционирования суставов, чем MediaPipe на том же сценарии.
Сравнение производительности
На реальных устройствах производительность различается:
| Устройство | FPS | RAM (MB) | CPU Usage (%) |
|---|---|---|---|
| iPhone 14 Pro | 60 | 150 | 25 |
| Samsung Galaxy S22 | 45 | 200 | 35 |
| Google Pixel 7 | 30 | 180 | 40 |
ARKit в 3 раза точнее MediaPipe по позиционированию суставов, но MediaPipe работает на более широком спектре устройств. Если точность критична — выбирайте iOS.
Как привязать 3D-персонаж к скелету?
Готовая USDZ-сцена с rigg, совместимым с ARKit joint hierarchy (те же имена). RealityKit BodyTrackedEntity автоматически применяет скелетные трансформации. Если имена joints не совпадают — персонаж "разлетается". Проверяем через Reality Composer Pro.
Анализ движений для фитнеса
Угол в суставе — через dot product:
func jointAngle(joint1: simd_float3, vertex: simd_float3, joint2: simd_float3) -> Float {
let v1 = normalize(joint1 - vertex)
let v2 = normalize(joint2 - vertex)
return acos(dot(v1, v2)) * (180 / .pi)
}
Угол колена при приседании: 80–110° — норма. Меньше 60° — слишком глубоко. Реализуем real-time фидбек с голосовыми подсказками.
Можно ли отслеживать несколько людей?
Стандартный ARKit не поддерживает отслеживание нескольких людей. Для этого мы используем MediaPipe Pose с отдельным детектором на каждого человека и оптимизируем с помощью GPU. На iPhone 15 Pro достигаем 30 fps для двух человек. На Android с помощью NNAPI можно получить 20–25 fps для двух человек.
Как оптимизировать body tracking для реального времени?
- Снизьте частоту кадров до 30 fps, если точность позволяет.
- Используйте LOD для 3D-моделей: снижайте полигональность вдали.
- Кэшируйте результаты детекции при статичной позе.
- На Android применяйте NNAPI или GPU делегат MediaPipe.
- На iOS используйте Metal для GPU-вычислений — это снижает нагрузку на CPU.
Что входит в работу
- SDK с документацией и примерами кода для iOS/Android.
- Готовый прототип с базовым трекингом и привязкой 3D-объекта.
- Интеграция фитнес-аналитики (углы, повторения, сожжённые калории).
- Риггинг и анимация 3D-персонажа под скелет.
- Оптимизация производительности под конкретные устройства.
- Поддержка после релиза: 1 месяц бесплатно.
Сроки и стоимость
Базовый body tracking с привязкой 3D-объекта — 1–2 недели. Риггинг персонажа + интеграция — 3–4 недели. Фитнес-аналитика — 4–6 недель. Android-версия (MediaPipe) — дополнительно 2–3 недели. Стоимость рассчитывается индивидуально. Закажите консультацию — мы подберём оптимальное решение под ваш бюджет.
Почему выбирают нас?
- 10+ лет опыта в мобильной разработке
- 50+ успешных AR-проектов
- Гарантируем соблюдение сроков и NDA
- Сертифицированные специалисты по ARKit и MediaPipe
Нужен точный body tracking для вашего проекта? Свяжитесь с нами для бесплатной оценки — предложим оптимальное решение.







