Дополняем реальность: обзорный материал
Автор: Игорь Литвиненко, Senior Mobile Developer.
Все наверняка слышали о VR-шлемах, создающих эффект присутствия в виртуальном мире. Однако сегодня хотелось бы поговорить не о виртуальной, а о дополненной реальности. Эти понятия важно различать. В шлемах виртуальной реальности все изображение генерируется — такая реальность полностью искусственная. Дополненная же реальность, в отличие от виртуальной, предполагает не создание полностью искусственной реальности, а дополнение видеопотока нашей реальности виртуальными объектами и данными. Таким образом, происходит совмещение виртуального и реального мира.
Основные технологии дополненной реальности
Как создается дополненная реальность? Чтобы произошло дополнение определенного реального объекта, нужно этот реальный объект обнаружить в видеопотоке. Это самое важное — после обнаружения объекта уже не составляет труда что-либо дорисовать и как-то его дополнить. Есть разные способы, позволяющие обнаружить нужные объекты, — в основном для этого используются маркеры дополненной реальности. Ниже в эволюционной последовательности перечислены основные способы обнаружения дополняемых объектов:
- Простейший маркер или изображение.
- Markerless — безмаркерная дополненная реальность.
- Простые 3D-маркеры.
- Комбинация маркеров для рендера сложных объектов (цилиндр, куб, параллелепипед).
- Frame Marker.
- Основанная на локации.
- Настоящая дополненная реальность.
Маркер-картинка
Простейший маркер дополненной реальности можно легко узнать по толстой черной рамке. Такой объект очень легко обнаружить в видеопотоке:
- Требования:
- Алгоритмы здесь простейшие: мы можем определить границы изображения (edge detection), квадрат и белый квадрат в середине, сделав перед эти threshold — бинаризацию отображения. Таким образом мы можем добраться до содержимого внутри, вырезать его и работать с ним как с картинкой — это намного проще, чем сканировать весь кадр.
- Выгода:
Markerless
Несмотря на название, при безмаркерном подходе маркер, на самом деле, все равно есть. Просто здесь он выглядит не как маркер, а как картинка.
- Требования:
- Алгоритмы. Для обнаружения таких маркеров используются характеристические точки: допустим, это точка, где меняется градиент. Т. е. это точка, где видна четкая граница. Также может использоваться алгоритм нахождения геометрических точек: в некоторых местах картинки есть точные маркеры, образующие углы, — например, геометрической точкой может быть крестик.
- Выгода:
Комбинация маркеров
Это технология позволяет учитывать простую форму объемных объектов: куб, цилиндр и т. п. Тут мы можем создать конфигурацию, которая помогает понять, что именно за объект перед нами — так, маркером может служить объект определенной формы с определенным сочетанием цветов (например, мы делали приложение, определяющее лекарство по упаковке и этикетке). Также мы сделали приложение, которое распознает марки вин — библиотека могла находить этикетки под разными ракурсами, что не работает в безмаркерной или простейшей технологии из-за нелинейной трансформации маркера.
Frame Marker
Допустим, вы проводите конференцию. У вас есть логотип, который вы развешиваете по стенам, чтобы показать людям, куда идти. Логотип один, поэтому все изображения — одинаковые; при этом вам нужно уникально идентифицировать каждую картинку. Как это сделать? При помощи frame marker. При использовании frame marker ID изображения шифруется в рамке:
- Требования:
- Алгоритмы:
- Выгода:
Основанная на локации дополненная реальность
Если вы ходите по городу и получаете сведения о зданиях, которые видите, скорее всего, дополнение реальности происходит с помощью локации.
В этом случае нет задачи распознавания изображения. Эта технология основывается на использовании присутствующих в мобильном устройстве GPS-приемника, компаса и акселерометра. Благодаря им, мы знаем, в каком направлении смотрим. Таким образом, для дополнения реальности просто нужно правильно отреагировать на показания датчиков мобильного устройства. Задача эта не такая уж и трудная — есть достаточно библиотек, которые с ней хорошо справляются.
Настоящая дополненная реальность
Здесь маркеров нет. Тут мы на ходу определяем 3D-формы и характеристики любых объектов, попадающих в объектив камеры. Нам нужно знать глубину объекта, чтобы превратить 2D-изображение в 3D. Для этого можно задействовать, например, уже упоминавшийся алгоритм SLAM, ищущий характеристические точки на окружающих предметах. Пока что на мобильных устройствах все это работает весьма медленно. Сейчас технологию настоящей дополненной реальности активно внедряет Sony в привязке к PlayStation.
Keyshare — keyshare.org
А сейчас расскажу, как мы в DataArt написали свой движок дополненной реальности и зачем мы это сделали.
Один швейцарский стартап решил предложить новую систему увеличения продаж, построенную на использовании технологии дополненной реальности, и мы разработали для него эту систему. Вот как она работает.
У нас есть запатентованный маркер дополненной реальности в виде изображения ключа, который можно разместить, например, в журнале рядом с описанием какого-либо продукта. Белые точки разного размера внутри этого ключа позволяют уникально идентифицировать содержимое. Есть сервер — он принимает код, прочитанный из ключа, и возвращает пользователю самые разные данные о продукте, его 3D-модель и т. д.
Для разработки такого ключа мы попробовали все самые популярные библиотеки, но не смогли найти маркер, который подходил бы к любым комбинациям. Когда мы используем маркерную дополненную реальность, она садится на ключевые точки. Маркер черно-белый, и ключевые точки сосредоточены в меняющихся местах. В итоге мы решили писать все с нуля.
Мы использовали алгоритм поиска MSER, который находит просто область. Ведь мы знаем, что точно есть черный ключ и точно есть белый крест внутри этого ключа. Поэтому мы сначала находим большую черную область, и внутри этой области находим белую область. Затем мы вырезаем картинку и смотрим соотношение сторон — оно должно быть 2:1. Далее анализируем форму. Ориентируясь по кресту, можем найти начало ключевой фразы. Что касается точек, они всегда находится в одних и тех же местах, поэтому найти их тоже нетрудно. В итоге у нас получился алгоритм поиска маркера по форме. Это, конечно, не универсальное решение, но нашу задачу выполняет просто отлично.
Так, на iPhone 5S мы получили производительность более 25 FPS. Достичь этого было довольно трудно. Сначала, как при работе с любым алгоритмом, мы уменьшили картинку: алгоритм распознавания намного лучше работает на уменьшенной картинке с низким качеством. Затем внедрили алгоритм предсказания — после того как обнаружили картинку, предполагаем, что ключ не может улететь из кадра больше чем на определенное значение пикселей. Тогда укорачиваем картинку. После этого анализируем динамику: если пользователь поворачивает телефон влево, ключ будет двигаться вправо. Это вероятностный алгоритм. если не находим сразу, что ищем, начинаем обрабатывать все большую область. У нас отличный алгоритм рендера модели, который писался с нуля.
Что у нас еще есть? На ключе есть три ряда, в каждом из них — 13 точек. Это значит, что возможны 469 комбинаций. Т. к. на расстоянии больше метра картинка уже несколько смазанная, мы сделали вероятностный алгоритм дешифровки с исправлением ошибки. Его мы используем в связке с самокорректирующимся ключом. Так мы безошибочно определяем четыре ложных знака, чего вполне хватает. Также у нас есть оптимизированный алгоритм детектирования, алгоритм слежения и предсказания следующего положения.
Несмотря на то, что такой ключ чем-то напоминает QR-код, есть принципиальные отличия. К QR-коду вы не сможете привязать дополненную реальность, потому что у него постоянно меняется содержимое. Другими словами, вы не можете создать его как маркер. Вы не можете поставить на него 3D-модель и не можете определить угол поворота. Кроме того, такой ключ очень легко узнаваем.
Football Clubs Recognizer
Также мы разработали приложение, которое помогает пользователям следить за любимыми футбольными клубами. Оно позволяет дополнить виртуальной реальностью изображение логотипа футбольного клуба — при наведении камеры на логотип показываются данные клуба.