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

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Hand Tracking в AR-приложении
Сложная
~5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    763
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    649
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1073
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    884
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    466

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

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

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

iOS: ARKit до iOS 18 не предоставлял публичный Hand Tracking API. Начиная с visionOS 1.0 и iOS 18 / ARKit 6HandAnchor с HandSkeleton доступен в RealityKit. На iPhone работает через обратную камеру. 26 joints на каждую руку.

До iOS 18 на iPhone — только сторонние ML-решения. После iOS 18 — нативный ARKit.

Android: ARCore не имеет hand tracking. MediaPipe Hands — стандарт на Android (и iOS, если нужна кросс-платформенность).

ARKit Hand Tracking (iOS 18+)

// iOS 18+, 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
            // Привязать объект к кончику пальца
        }
    }
}

На visionOS тот же API, но с двумя руками одновременно и без необходимости держать устройство.

MediaPipe Hands: кросс-платформенное решение

MediaPipe Hand Landmark Task — 21 joint на каждую руку, до 2 рук одновременно. iOS + Android. Бесплатно.

// 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, аналогично для остальных 4 пальцев.

Для AR-привязки в 3D: нормализованные 2D-координаты → unproject через camera intrinsics + depth (LiDAR или monocular depth estimation).

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

Базовые жесты без 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 образцах каждого жеста.

Взаимодействие рук с AR-объектами

Picking объектов: ray из ладони/пальца → intersection с AR-объектами. Pinch gesture = «схватить», разжать = «отпустить».

Деформация AR-объекта руками: две руки одновременно → масштабирование (расстояние между ладонями), вращение (ориентация вектора между ладонями).

Хирургическая симуляция: кончик пальца взаимодействует с виртуальными органами — collision detection между joint position и AR mesh. CollisionComponent + PhysicsBodyComponent в RealityKit для физически корректного взаимодействия.

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

Трекинг пальцев ухудшается при перекрытии (один палец за другим — распространённая ситуация). MediaPipe и ARKit оба используют 2.5D подход — проблема самоперекрытия не решена полностью.

Тёмный фон + тёмная кожа рук — контрастность снижается, detection confidence падает. Минимальное освещение для стабильного трекинга — 200 лк. Нужен UI-индикатор при confidence < 0.5.

Latency: MediaPipe на среднем Android (Snapdragon 720G) — 35-45 мс на кадр. ARKit HandTracking на iPhone 15 — 15-20 мс. Для музыкальных инструментов разница ощутима.

Сроки

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