Реалізація 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 + глибина (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 з ладоні/пальця → перетин з 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 тижні. Вартість розраховується індивідуально.