Реализация Hand Tracking в AR-приложении: от жестов до взаимодействия

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация Hand Tracking в AR-приложении: от жестов до взаимодействия
Сложный
~5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Реализация Hand Tracking в AR-приложении

Hand tracking — отслеживание кистей рук и пальцев без маркеров, через камеру. Самостоятельное управление AR-интерфейсом, виртуальные музыкальные инструменты, обучающие приложения по хирургии или механике — везде, где руки становятся контроллером, требуется точное распознавание 21 сустава на каждую руку. Технически задача сложна: быстрые движения, перекрытие пальцев, потеря трекинга при плохом освещении. Наш опыт позволяет решать эти проблемы с помощью нативных и кроссплатформенных решений, сокращая затраты на разработку до 40% за счёт использования готовых библиотек.

Почему hand tracking — сложная техническая задача?

Каждая рука имеет 21 joint (в MediaPipe) или 26 (в ARKit), которые нужно отслеживать в реальном времени с низкой задержкой. Проблемы: самоперекрытие пальцев (щипок, когда большой палец перекрывает указательный), потеря трекинга при слабом освещении (<200 лк) и высокая вычислительная нагрузка на GPU. Современные решения комбинируют машинное обучение и геометрические алгоритмы для стабильного захвата.

Платформенная ситуация

iOS: Начиная с последних версий iOS и ARKit Hand Tracking предоставляет публичный API с 26 joints. До этого использовались сторонние ML-решения. Android: ARCore не имеет hand tracking, поэтому стандартом стал MediaPipe Hands с 21 joint, который работает и на iOS для кроссплатформенности.

Как ARKit и MediaPipe решают проблему перекрытия пальцев?

Оба фреймворка используют 2.5D-подход: сначала определяют bounding box кисти, затем уточняют joints внутри. При перекрытии уверенность падает, но ARKit лучше справляется благодаря глубине от LiDAR (на iPad Pro/iPhone Pro). MediaPipe использует только RGB и даёт более плавный трекинг, но с большей задержкой на слабых устройствах.

Реализация hand tracking на iOS (Swift)

// Последние версии iOS, RealityKit
let session = ARKitSession()
let handTrackingProvider = HandTrackingProvider()

Task {
    try await session.run([handTrackingProvider])

    for await update in handTrackingProvider.anchorUpdates {
        let handAnchor = update.anchor
        guard handAnchor.isTracked else { continue }

        // Позиция кончика указательного пальца
        if let indexTip = handAnchor.skeleton.joint(named: .indexFingerTip) {
            let worldTransform = handAnchor.originFromAnchorTransform * indexTip.anchorFromJointTransform
            // Привязать объект к кончику пальца
        }
    }
}

Когда hand tracking с MediaPipe оправдан?

MediaPipe Hands бесплатен, кроссплатформенен и подходит, если требуется поддержка старых устройств или единая кодовая база. Пример на Kotlin:

// Android
val handLandmarker = HandLandmarker.createFromOptions(context,
    HandLandmarkerOptions.builder()
        .setBaseOptions(BaseOptions.builder().setModelAssetPath("hand_landmarker.task").build())
        .setNumHands(2)
        .setMinHandDetectionConfidence(0.5f)
        .setMinTrackingConfidence(0.5f)
        .build()
)

val result = handLandmarker.detect(mpImage)
// result.landmarks() — List<List<NormalizedLandmark>>
// 21 точка на каждую руку в нормализованных координатах [0..1]

21 joint в MediaPipe: WRIST, THUMB_CMC .. THUMB_TIP, INDEX_FINGER_MCP .. INDEX_FINGER_TIP, аналогично для остальных пальцев. Для AR-привязки в 3D: нормализованные 2D-координаты → unproject через camera intrinsics + depth (LiDAR или monocular depth estimation).

Сравнение ARKit и MediaPipe

Критерий ARKit Hand Tracking MediaPipe Hands
Платформы iOS, visionOS iOS, Android
Количество joints 26 21
Задержка (iPhone 15) 15-20 мс 20-30 мс (iOS)
Задержка (Android средний) 35-45 мс
Бесплатность Да (в составе платформы) Да
Точность при перекрытии Выше Ниже

ARKit быстрее MediaPipe в 2-3 раза на современных устройствах, но MediaPipe обеспечивает кроссплатформенность.

Распознавание жестов

Базовые жесты без ML — через геометрию joints:

  • Pinch (щипок): расстояние между THUMB_TIP и INDEX_FINGER_TIP < порог (2-3 см).
  • Открытая ладонь: все TIP joints выше соответствующих MCP joints по Y-оси.
  • Кулак: все TIP joints ниже MCP по Y-оси.
  • Victory (V): index и middle TIP выше MCP, остальные — ниже.

Сложные жесты (ASL алфавит, кастомные комбинации) — CreateML GestureClassifier или TensorFlow Lite custom model. Обучение на 500-1000 образцах каждого жеста.

Пример: обучение кастомного жеста Используйте CreateML с датасетом из 1000 кадров для каждого жеста. Тренируйте классификатор на основе геометрических признаков (углы между суставами) — точность достигает 95%.

Как hand tracking взаимодействует с AR-объектами

Picking объектов: ray из ладони/пальца → intersection с AR-объектами. PinchGesture = «схватить», разжать = «отпустить». Две руки одновременно → масштабирование (расстояние между ладонями), вращение (ориентация вектора между ладонями). Хирургическая симуляция: кончик пальца взаимодействует с виртуальными органами через collision detection.

Ограничения в реальных условиях

Перекрытие пальцев остаётся проблемой. MediaPipe и ARKit используют 2.5D — самоперекрытие не решено полностью. Контрастность руки на тёмном фоне снижает confidence. Минимальное освещение для стабильного трекинга — 200 лк. Latency: MediaPipe на среднем Android — 35-45 мс, ARKit на iPhone — 15-20 мс. Для музыкальных инструментов разница ощутима.

Пошаговый план реализации hand tracking

  1. Анализ требований и выбор платформы (ARKit / MediaPipe / гибрид).
  2. Интеграция библиотеки и настройка конфигурации (пороги уверенности, количество рук).
  3. Разработка логики жестов (геометрическая или ML-классификация).
  4. Реализация взаимодействия с AR-объектами (raycast, collision).
  5. Тестирование на реальных устройствах в разных условиях освещения.
  6. Оптимизация производительности (снижение нагрузки на GPU, асинхронная обработка).

Что входит в работу

  • Архитектурное описание и техническая документация.
  • Исходный код с комментариями и интеграцией в существующий проект.
  • Тестовый билд для iOS и/или Android.
  • Консультация по доработкам и поддержка на этапе внедрения.
  • Гарантия качества и соблюдение сроков.

Получите консультацию по вашему проекту — мы оценим сроки и реализуем hand tracking под ключ. Закажите разработку hand tracking и ускорьте вывод вашего AR-продукта на рынок.

Сроки

Базовый hand tracking с распознаванием pinch/open жестов на iOS — от 1 до 2 недель. Кроссплатформенное решение на MediaPipe — от 2 до 3 недель. Кастомный классификатор жестов с обучением — плюс 2-3 недели. Интерактивное взаимодействие рук с AR-объектами — плюс 2-4 недели. Стоимость рассчитывается индивидуально после анализа требований.

Мы разрабатываем AR-приложения на ARKit и ARCore, которые работают стабильно даже в сложных условиях. Наш опыт — 7+ лет в мобильной разработке и 30+ реализованных проектов с дополненной реальностью. Гарантируем: трекинг не потеряется, освещение будет реалистичным, а пользователь не почувствует дискомфорта. Сертифицированные разработчики Apple и Google.

Почему трекинг теряется и как это исправить?

ARKit и ARCore используют VIO (Visual-Inertial Odometry) — совместную обработку данных камеры и IMU. Трекинг срывается в трёх сценариях: освещение ниже ~50 lux, текстурно однородные поверхности (белая стена, стекло) и быстрые движения камеры.

На практике это значит: если продукт предназначен для примерки мебели, добавляем явное UI-предупреждение при ARCamera.TrackingState.limited(.insufficientFeatures). Приложение, которое молча теряет трекинг, получает 2-звёздочные отзывы — мы такое не допускаем.

Обнаружение плоскостей настраивается через ARWorldTrackingConfiguration.planeDetection = [.horizontal, .vertical]. Важно: ARKit продолжает уточнять геометрию плоскостей через ARSCNViewDelegate.renderer(_:didUpdate:for:) — если не обрабатывать обновления, объект начинает плавать при уточнении якоря. Наша команда решает эту проблему на этапе архитектуры, а не при тестировании.

AR Foundation: кросс-платформа с нюансами

Unity AR Foundation — слой абстракции поверх ARKit и ARCore. Он сокращает время разработки на 40% по сравнению с раздельными нативными кодовыми базами. Но некоторые функции (например, ARBodyTrackingConfiguration для body tracking) недоступны и требуют нативного плагина.

Для React Native и Flutter прямой AR Foundation отсутствует. Используем ViroReact (React Native) или ar_flutter_plugin для простых сценариев, но для production-качества — нативные модули с мостом. Гибридный подход: AR-сцена рендерится нативным ARKit/ARCore view, управление из JS/Dart через method channel. Входит в нашу стандартную поставку.

Задача iOS Android Кросс-платформа
Plane detection ARKit ARCore AR Foundation, Unity
Face tracking ARKit (TrueDepth) ARCore Augmented Faces Banuba, Snap Camera Kit
Image tracking ARKit (Vision) ARCore Augmented Images AR Foundation
Object detection ARKit 3D Object Scanning ARCore нет единого SDK
Persistence (сохранение якорей) ARKit World Map ARCore Cloud Anchors

Сравнение платформ: ARKit опережает ARCore по стабильности трекинга и набору функций (на 30% меньше сбоев в сценариях с низким освещением), но AR Core дешевле в поддержке устройств. AR Foundation — компромисс: теряет до 20% производительности на сложных сценах, но окупается единой кодовой базой.

Try-on: примерка товаров через AR

Примерка очков, украшений, косметики — отдельный класс задач. Здесь нужен face tracking, а не plane detection.

ARKit предоставляет ARFaceTrackingConfiguration — 52 blend shape коэффициента для мимики, 3D-меш лица, позиция и ориентация в пространстве. Работает только на устройствах с TrueDepth-камерой (iPhone с Face ID).

Для Android эквивалент — ML Kit Face Mesh Detection или Google ARCore Augmented Faces (Pixel и некоторые флагманы). Для кросс-платформенного try-on используем Banuba Face AR SDK (Banuba Face AR SDK documentation) — покрывает оба устройства, даёт готовые маски и стабильный трекинг даже на mid-range Android.

Качество try-on критически зависит от 3D-моделей товаров. Модели должны быть оптимизированы под real-time: не более 10-15K полигонов для украшений, PBR-материалы с корректными roughness/metallic картами, LOD для дальних дистанций. В рамках нашего подряда мы предоставляем готовые гайды по оптимизации моделей.

Как добиться реалистичного освещения в AR?

ARKit с современными версиями iOS поддерживает Environmental Texturing — автоматическое создание environment map из камеры для реалистичных отражений. Включается через ARWorldTrackingConfiguration.environmentTexturing = .automatic. Без этого металлические и стеклянные материалы выглядят пластиково.

ARCore предоставляет Light Estimation — intensity и color temperature окружающего света, применяемые к шейдеру виртуальных объектов. На практике это разница между объектом, который «вписывается» в сцену, и очевидно наложенной 3D-моделью. Мы гарантируем, что финальное изображение не выдаёт виртуальности.

Что входит в работу

  • Архитектура AR-решения (выбор стека, проектирование модулей)
  • 3D-пайплайн: оптимизация моделей под real-time, PBR-материалы, LOD
  • Интеграция трекинга (плоскости, лица, изображения, объекты)
  • Тестирование на 10+ реальных устройствах (iOS и Android)
  • Документация по использованию SDK и готовых компонентов
  • Поддержка после запуска (1 месяц баг-фиксинга)

Сроки и оценка

Простая AR-сцена с размещением одной 3D-модели на плоскости — 1–2 недели. Face try-on с каталогом товаров — от 6 недель (3D-пайплайн, интеграция трекинга, UI выбора и сохранения). Полноценный AR-шоппинг с облачными якорями и мультиплеером — от 3 месяцев. Оценим проект за 1 день — пишите, обсудим вашу AR-идею.