Реалізація розпізнавання маркерів (Image Tracking) в AR-застосунку
Image tracking — прив'язка AR-контенту до фізичного зображення: упаковці товару, плакату, візитівці, сторінці книги. Користувач наводить камеру — зображення «оживає». Технічно це добре вивчене завдання, але в production регулярно натикаєшся на одні й ті ж граблі: трекінг «трясеться» на поверхнях, що блищать, втрачається при частковому перекритті, не масштабується на великий каталог маркерів. Ми — команда з досвідом понад 50 AR-проектів — вирішуємо ці проблеми під ключ. Звертайтеся для оцінки вашого проекту — ми гарантуємо стабільний трекінг та оптимальну якість.
Проблеми, які вирішуємо
- Трекінг «трясеться» на бликучих поверхнях (глянцева упаковка, голограми).
- Втрата трекінгу при частковому перекритті маркера або зміні освітлення.
- Неправильне масштабування AR-об'єктів через некоректні розміри маркерів.
- Неможливість масштабувати систему на великі каталоги (100+ маркерів).
- Низька якість детекції через однотонні або низькоконтрастні зображення.
Як ми це робимо: технічні деталі
ARKit Image Tracking
ARImageTrackingConfiguration — конфігурація для трекінгу без world tracking. Швидше ініціалізується, менше навантаження на CPU, але немає plane detection та world anchors.
ARWorldTrackingConfiguration з detectionImages — трекінг маркерів у контексті повного world tracking. Потрібен, коли AR-контент має існувати в світовому просторі між кадрами або коли потрібен plane detection одночасно з image tracking.
Підготовка reference image: ARReferenceImage з фізичними розмірами (physicalSize). Розмір обов'язковий — від нього ARKit обчислює дистанцію та scale. Неправильний розмір → об'єкт у неправильному масштабі.
guard let image = UIImage(named: "marker"),
let cgImage = image.cgImage else { return }
let referenceImage = ARReferenceImage(cgImage, orientation: .up, physicalSize: CGSize(width: 0.15, height: 0.10))
referenceImage.name = "product_label"
config.detectionImages = [referenceImage]
config.maximumNumberOfTrackedImages = 4
maximumNumberOfTrackedImages — критичний параметр. ARKit A12+ трекає до 100 зображень одночасно (виявлення), але активний трекінг позиції — до 4 на старих чипах, до 8 на A14+. Різниця: detected — знаємо, що маркер є; tracked — знаємо точну позицію в реальному часі.
Якість маркера і чому «будь-яке зображення» не працює
ARKit оцінює quality score кожного reference image. Зображення з низьким quality score трекаються нестабільно або не детектуються взагалі. Перевірка: додати зображення в Xcode AR Resources group → в інспекторі покаже попередження при низькому quality.
Погані маркери:
- Однотонні або з великими однотонними областями (логотип на білому фоні)
- Симетричні паттерни (ARKit плутається в орієнтації)
- Низькоконтрастні, бляклі зображення
- Текст без інших візуальних елементів
Хороші маркери:
- Висококонтрастні, різнорідні паттерни (обкладинки журналів, детальні ілюстрації)
- Асиметричні — ARKit однозначно визначає орієнтацію
- Фізичний розмір від 10 см — дрібні маркери трекаються з дистанції менше 30 см
Apple рекомендує використовувати зображення з різноманітними деталями та уникати однорідних областей.
Трекінг на бликучих поверхнях
Упаковка з глянцевим покриттям, голографічні наклейки, фольговані елементи — всі вони дають блики, які змінюють appearance маркера в залежності від кута освітлення. ARKit втрачає трекінг, тому що features points «плавають».
Рішення на рівні фізичного продукту: матове ламінування замість глянцю на зоні маркера. На рівні коду: hysteresis для втрати трекінгу — не одразу ховати AR-контент при trackingState == .limited, а із затримкою 0.5-1 секунда. Більшість коротких втрат відновлюються самі.
ARCore Image Tracking: порівняння з ARKit
| Параметр | ARKit | ARCore |
|---|---|---|
| Максимум трекованих зображень | 4 (A12) / 8 (A14+) | до 20 на сучасних пристроях |
| Якість маркера | Quality score, попередження в Xcode | Перевірка через arimg (обов'язково) |
| Cloud-трекінг | немає | є (Cloud Anchors) |
| Завантаження бази | bundle | попередня компіляція або runtime |
AugmentedImageDatabase — аналог ARKit detection images. Базу даних компілюємо заздалегідь через arcoreimg утиліту (командний рядок) або AugmentedImageDatabase(session:imageBytes:) в runtime. Попередньо скомпільована база завантажується швидше.
ARCore додатково надає AugmentedImage.getTrackingMethod(): FULL_TRACKING (повний трекінг) vs LAST_KNOWN_POSE (остання відома позиція). LAST_KNOWN_POSE дозволяє зберігати AR-контент на позиції навіть при тимчасовій втраті маркера з кадру.
Як масштабувати Image Tracking на сотні маркерів?
Для застосунків з великим каталогом (100+ маркерів — наприклад, всі SKU продуктової лінійки) не можна пакувати всі reference images в bundle. Архітектура:
- Сервер зберігає reference images + AR-контент
- При виявленні нового маркера (за зовнішнім ID в QR або через cloud recognition) — завантажуємо контент для конкретного маркера
- Cloud Image Target (Vuforia Cloud, Wikitude Cloud): клієнт відправляє кадр на сервер, сервер повертає ID маркера та transform. Працює для каталогів 100k+ зображень
Що входить в розробку Image Tracking під ключ?
- Аналіз ваших маркерів — оцінка якості, рекомендації щодо покращення
- Підготовка reference images (конвертація, обрізка, налаштування розміру)
- Інтеграція ARKit або ARCore (вибір конфігурації, обробка станів)
- Тестування на 5+ реальних пристроях (різні камери, освітлення)
- Оптимізація продуктивності (CPU/GPU, батарея)
- Документація та передача вихідних кодів
- Підтримка після запуску (2 тижні)
Замовте розробку — отримайте консультацію та оцінку термінів.
Процес роботи: покроково
- Ви надсилаєте опис завдання та приклади маркерів
- Ми аналізуємо та готуємо комерційну пропозицію
- Після узгодження — етапи: аналітика → проектування → реалізація → тестування → деплой
- Ви отримуєте готове рішення з гарантією стабільного трекінгу
Орієнтири за термінами
Базовий image tracking з 1–10 маркерами, статичний 3D-контент — від 3 до 5 днів. Анімований контент, відео-overlay, управління каталогом через CMS — 2–3 тижні. Cloud-рішення для 100k+ маркерів — окрема оцінка. Вартість розраховується індивідуально.
Типові помилки при розробці Image Tracking
- Неправильний physicalSize — об'єкт не масштабується - Низька якість reference image — трекінг втрачається - Ігнорування maximumNumberOfTrackedImages — падіння FPS - Відсутність hysteresis — контент мерехтитьНаш досвід: понад 50 AR-проектів, сертифіковані інженери Apple та Google. Пишіть — оцінимо ваш проект безкоштовно.







