ИИ-понимание сцены для AR
AR-приложение должно понять окружение за миллисекунды: где пол, где стены, что за предметы в кадре, как падает свет. Без этого виртуальный объект «плавает» в воздухе, не отбрасывает тени и выглядит неестественно. Scene understanding — фундамент, на котором строится весь AR-опыт.
Компоненты scene understanding
Плоскостная детекция — нахождение горизонтальных и вертикальных плоскостей. ARKit / ARCore делают это из коробки, но для нестандартных поверхностей (наклонные полы, скруглённые стены) нужны кастомные модели.
Depth estimation — оценка глубины из RGB-изображения (monocular depth). Models: DPT (Dense Prediction Transformer), MiDaS, UniDepth. На устройствах с LiDAR (iPhone Pro, iPad Pro) — fusion RGB + LiDAR для точности ±1-2cm.
Semantic segmentation сцены — какой пиксель принадлежит полу, стене, потолку, мебели. Нужно для корректного occulsion (виртуальный объект прячется за реальным предметом). Models: SegFormer, Mask2Former, обученные на ADE20K или ScanNet.
3D object detection — не просто bounding box, а 6DoF pose объекта в сцене. FoundationPose, CNOS — работают с CAD-моделями конкретных объектов.
Light estimation — оценка направления и интенсивности освещения для корректных теней AR-объектов. ARKit даёт spherical harmonics освещения из HDR estimate. Нейросетевые подходы: EfficientLit, DiffusionLight — точнее на сложных lighting ситуациях.
SLAM и пространственная привязка
Visual SLAM (Simultaneous Localization and Mapping) — основа любого AR: система одновременно строит карту окружения и определяет своё положение в ней.
Классика: ORB-SLAM3 (open source, CPU-friendly). Нейронный SLAM: DROID-SLAM, Point-SLAM — выше точность на сложных текстурах, но требуют GPU.
Для production AR-приложений на смартфонах используем ARKit / ARCore как базу SLAM и добавляем кастомные CV-модели поверх через Metal (iOS) или Vulkan (Android).
// ARKit: получение depth map и plane detection
func session(_ session: ARSession, didUpdate frame: ARFrame) {
// Depth estimation
if let depthMap = frame.sceneDepth?.depthMap {
// CVPixelBuffer с float32 depth values в метрах
processDepth(depthMap)
}
// Semantic segmentation (ARKit 4+)
if let segBuffer = frame.segmentationBuffer {
// Маска с классами: floor, wall, seat, window, door, table, face, person
processSemantics(segBuffer)
}
}
Occlusion: виртуальный объект за реальным предметом
Это самая заметная «ложь» AR — когда 3D-персонаж проходит сквозь реальный стол. Корректный occlusion требует depth ordering: для каждого пикселя знать, что ближе — виртуальный объект или реальная поверхность.
Решение: depth estimation (LiDAR или нейронная сеть) создаёт occlusion mask. Пиксели, где реальная глубина меньше виртуальной — рендерятся реальными. Это требует корректной синхронизации depth и RGB потоков (timestamp alignment < 5ms).
На устройствах без LiDAR: monocular depth (MiDaS v3.1) + semantics для уточнения границ объектов. Работает хуже, но приемлемо для крупных объектов.
Платформы и инструменты
| Платформа | SLAM | Depth | Semantics |
|---|---|---|---|
| iOS (ARKit) | Built-in | LiDAR / Neural | Built-in (ограниченный) |
| Android (ARCore) | Built-in | Depth API | Нет (кастомный) |
| HoloLens 2 | Mixed Reality | Time-of-Flight | Scene Understanding API |
| Apple Vision Pro | visionOS | LiDAR + stereo | RoomPlan / MeshAnchor |
| Custom (Jetson) | ORB-SLAM3 | Stereo / ToF | Кастомная SegFormer |
Сроки разработки
Базовый scene understanding модуль (плоскости + глубина + occlusion): 4–8 недель. Полное semantic понимание сцены с кастомными категориями: 10–16 недель. Стоимость рассчитывается индивидуально.







