ВВЕДЕНИЕ 3
1 РАСПОЗНАВАНИЕ ВЕРТИКАЛЬНЫХ ПЛОСКОСТЕЙ 6
1.1 Локализованные точки интереса 6
1.2 Отсеивание горизонтальных плоскостей 8
1.3 Нахождение второстепенной точки для построения плоскости 8
1.4 Проверка предполагаемой плоскости 9
1.5 Построение плоскости и определение ее границ 10
1.6 Объединение плоскостей 12
1.7 Оценка точности и эффективности работы алгоритма 14
2 РАСПОЗНАВАНИЕ ПРОИЗВОЛЬНЫХ ПОВЕРХНОСТЕЙ 16
2.1 Обоснование необходимости 16
2.2 Требования к алгоритму 17
2.3 Триангуляция Делоне 17
2.4 Реализация алгоритма построения триангуляции 19
3 ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ В ПРОЕКТЕ 22
3.1 Интеграция проекта приложения с Cocoapods 22
3.2 Установка библиотеки с помощью Cocoapods 23
3.3 Основные принципы взаимодействия с библиотекой 25
ЗАКЛЮЧЕНИЕ 28
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 30
ПРИЛОЖЕНИЕ
Термин “дополненная реальность” (также известный как AR, augmented reality) имеет довольно широкое определение, но в контексте мобильных устройств под дополненной реальностью подразумевается результат отображения виртуальных объектов на изображении с камеры устройства. В результате на экране устройства создается эффект присутствия этих виртуальных объектов в реальном окружении пользователя.
Дополненную реальность эксперты называют одним из главных технологических трендов ближайших лет. Так, исследование Digi Capital [1] прогнозирует, что суммарная капитализация рынка технологий дополненной реальности в 2021 году достигнет 83 миллиардов долларов, что в три раза превышает аналогичную оценку для виртуальной реальности (VR).
За последние годы было представлено множество продуктов и решений с использованием технологий дополненной реальности. В июне 2017 года одним из крупнейших игроков на этом рынке стала компания Apple, которая на конференции разработчиков WWDC представила новую платформу ARKit, позволяющую разработчикам применять технологию дополненной реальности в нативных приложениях для iPhone и iPad. По оценкам компании Sensor Tower, за первые полгода пользователи суммарно загрузили более 13 миллионов приложений с поддержкой ARKit, общее число которых в App Store превысило 2000 [2].
Данный фреймворк использует информацию со встроенных датчиков в устройстве, таких как акселерометр и гироскоп, а также с частотой 60 раз в секунду анализирует изображение, полученное с камеры, для определения физической позиции устройства относительно других объектов в пространстве — реальных и виртуальных.
Выделяя на изображении локализованные точки интереса и применяя к ним принцип параллакса [3], ARKit предоставляет разработчику приложения информацию о точном местоположении и ориентации устройства относительно начальной точки отсчета. Этот метод оценки положения и ориентации устройства называется визуальная одометрия [4] и аналогично применяется в других областях, например для определения позиции автономного робота на Марсе.
Достижение эффекта реалистичности в приложениях с использованием дополненной реальности требует высокой точности при расположении виртуальных объектов на сцене. Например, если пользователь хочет повесить картину на стену в AR-приложении, виртуальная картина должна вплотную прилегать к стене и располагаться параллельно ей, несмотря на то, на каком расстоянии от стены и под каким углом к ней находится устройство пользователя в данный момент.
Стандартные методы в ARKit предоставляют разработчику информацию о распознанных горизонтальных плоскостях в реальном мире, что позволяет повысить точность при работе пользователя с объектами на столе или на полу. Поддержка вертикальных плоскостей в ARKit была добавлена в марте 2018 года и требует обновление операционной системы до iOS 11.3, что ограничивает возможность ее широкого применения [5]. Более того, ARKit не содержит информацию о распознанных произвольных поверхностях, которые имеют не плоскую форму.
Таким образом, отсутствие детального распознавания окружения пользователя ограничивает спектр возможностей применения платформы ARKit и развитие индустрии технологий дополненной реальности в целом, поскольку ограничивается точность расположения виртуальных объектов и, соответственно, не достигается необходимый уровень реалистичности.
Целью данной работы является разработка алгоритмов для распознавания окружения пользователя на основе облака точек, полученного от фреймворка ARKit. В частности, представлены два алгоритма, которые могут быть использованы как совместно, так и отдельно друг от друга: распознавание вертикальных плоскостей и распознавание поверхностей произвольной формы. Стоит заметить, что под термином “плоскость” здесь и далее в этой работе подразумевается прямоугольник, имеющий ограниченные размеры, местоположение и ориентацию в пространстве.
Для реализации поставленной цели были выполнены следующие задачи:
• Реализация алгоритма обработки облака точек и отсеивания вершин, являющихся шумом;
• Создание алгоритма распознавания вертикальных плоскостей;
• Разработка алгоритма построения триангуляции Делоне по облаку точек, полученному от фреймворка ARKit;
• Выделение реализованного функционала в библиотеку Cocoapods для использования в проектах Xcode.
В рамках данной дипломной работы была разработана программная библиотека по распознаванию окружения пользователя в дополненной реальности, включающая в себя следующий основной функционал:
• Распознавание вертикальных плоскостей.
• Распознавание произвольных поверхностей.
Несмотря на существенные ограничения, описанные в пункте 1.1 и обусловленные необходимостью максимально быстрой обработки облака точек, оба алгоритма распознают поверхности с точностью, визуально сопоставимой с результатами работы системного алгоритма распознавания горизонтальных плоскостей в ARKit.
Тем не менее, возможные будущие улучшения включают в себя, в первую очередь, дальнейшее повышение точности и эффективности работы алгоритмов распознавания окружения пользователя, поскольку только в случае наиболее точного распознавания окружения представляется возможным естественно использовать технологии дополненной реальности. В частности, высокий интерес представляет возможность более эффективной фильтрации облака точек и отсеивание шума — вершины, которые на самом деле не принадлежат поверхностям в окружении пользователя.
Следует отметить, что библиотека для распознавания окружения пользователя, реализованная в рамках данной работы, была успешно применена в приложении MeasureKit [11], которое с сентября 2017 года было загружено более 950 тысяч раз и, по мнению Apple, было признано одним из лучших приложений в 2017 году [12]. Поддержка распознавания вертикальных плоскостей позволила повысить точность проводимых пользователем измерений и стала одной из уникальных особенностей этого проекта.