image
Многие разработчики уже давно используют AR в своих приложениях. Хорошее подспорье для этого — сторонние решения вроде OpenCV или Wikitude. С релизом iOS 11 программистам стал доступен системный фреймворк ARKit. Давайте посмотрим, насколько эти библиотеки хороши и какую из них стоит использовать для вашего следующего проекта с дополненной реальностью.

ARKit


К несомненным достоинствам ARKit можно отнести его нативность. Интеграция и настройка занимают всего несколько минут. Xcode любезно делает за вас половину необходимых операций, после чего фреймворк «просто работает». Очень легко организовать взаимодействие между ARKit и другими системными фреймворками (SpriteKit, SceneKit, Metal, CoreLocation и т.д.).

Библиотека хорошо оптимизирована и по-максимуму использует возможности железа последних моделей iPhone и iPad. Огромное количество вычислений, которые происходят под капотом, практически не сказывается на UX. Радует точность, с какой фреймворк распознает плоскости и маркеры. Не мешают этому ни плохое освещение, ни резкое перемещение устройства. Благодаря дополняющим друг друга технологиям VIO (Visual Inertial Odometry) и IMU (Inertial Measurement Unit), которые и составляют основу ARKit, ребятам из Apple удалось минимизировать ошибки в расчетах.

Не обошлось, конечно, и без недостатков. Во-первых, ARKit доступен только на устройствах с iOS 11+, поддерживается только на iPhone 6s и младше, iPad Pro (9.7, 10.5 или 12.9). К сожалению, это может оттолкнуть заказчиков, которые боятся потерять часть целевой аудитории.

ARKit спроектирован таким образом, что информация об объектах окружающего мира и положении в нем устройства постоянно калибруется. Из-за этого в начале сессии, пока данные недостаточно точны, создается ощущение «нестабильности» работы, избавиться от которого пока не удастся. Кроме того, если сессия достаточно длинная, незначительные, казалось бы, ошибки в показателях сенсоров будут накапливаться и становиться все более заметными.

При распознавании изображений возникают проблемы с позиционированием AR-объекта, объект плавает, не фиксируется четко в указанной точке. Аналогичное поведение наблюдается и в примере, опубликованном Apple. Тем не менее, объект, размещенный в заданной точке пространства практически не перемещается.

В некоторых случаях (маленькие черно-белые изображения не очень хорошего качества) распознавание маркера происходит, но система неверно определяет его координаты. В результате AR-объект отрисовывается в неправильном месте.

ARKit очень легок в освоении, чтобы начать работать, вам потребуется минимальный багаж знаний. В Сети уже опубликовано достаточно большое количество обучающих статей и примеров кода, а сообщество большое и отзывчивое, так что отыскать ответы на возникающие в процессе написания кода вопросы будет несложно.

OpenCV


Написанная на C++ библиотека OpenCV распространяется бесплатно и предоставляет вам возможность скачать iOS SDK с официального сайта или скомпилировать его самостоятельно.

Уже на этапе внедрения поклонников Swift ждет увлекательный квест по устранению ошибок компиляции, который грозит растянуться на несколько часов. К счастью, в Сети доступны пошаговые инструкции, опубликованные нашими боевыми товарищами, уже одолевшими несговорчивый фреймворк (например, OpenCV with Swift — step by step).

После того как вам удастся наконец запустить проект с подключенной библиотекой, возникнет вопрос, что же делать дальше. Возможно, вы решите поискать туториалы на официальном сайте. Там iOS-разработчиков будут ждать три примера использования старой версии фреймворка в проектах, ориентированных на iOS 8. Современных же статей, посвященных мобильной разработке с OpenCV, не так уж много. Видимо, это связано с тем, что все желающие освоить эту библиотеку давным давно это сделали и в разъяснениях больше не нуждаются.

Впрочем у новичков все же есть шанс освоить этот, вне всякого сомнения, мощный инструмент. Однако понадобится на это немало времени и сил. Как и любая другая низкоуровневая библиотека, OpenCV требует глубокого вдумчивого изучения, подробного разбора документации, просеивания тысяч дискуссий на форумах в поисках ответа на свой вопрос и бесконечных экспериментов.

Не забудьте, кстати, добавить к этому еще время на восстановление в памяти университетского курса математики, ведь выводить формулы за вас OpenCV не станет.

Wikitude


Начнем с того, что Wikitude — платный и отнюдь не дешевый фреймворк. Бесплатная версия содержит водяные знаки, поэтому использовать ее для релизной сборки вы не сможете.

Тем не менее библиотека стоит своих денег. В отличие от ARKit она поддерживает даже более старые устройства и версии системы. Продукт хорошо документирован, имеет множество статей, уроков и примеров кода, поэтому интеграция и реализация простейших задач у неподготовленного программиста займет всего несколько часов.

Основной сферой применения библиотеки является распознавание маркеров. В качестве последних могут использоваться любые изображения без альфа-канала. Правда, работает Wikitude только с родными форматами. Изображения маркеров приходится запаковывать в формат .wtc, 3D-модели преобразовывать в .wt3-файлы. Справедливости ради следует отметить, что Wikitude предоставляет средства для конвертации на своем веб-сайте.

В целом со своей задачей фреймворк справляется хорошо: маркеры распознаются, AR-объекты размещаются там, где вы запланировали, не плавают при изменении угла обзора или смещении камеры. Разместить картинку, видео или 3D-модель не составит труда, равно как и обеспечить их интерактивность. Поддерживается одновременная работа с несколькими маркерами, но при конфигурации классов библиотеки лучше ограничить их количество для повышения производительности.

Замечу однако, что при плохом освещении, а также неаккуратном перемещении устройства возникают проблемы с распознаванием маркеров даже в том случае, если для их создания использовались качественные исходные изображения.

Wikitude поддерживает JS и нативную версии SDK.

Если выберете для интеграции JS-версию, готовьтесь отринуть удобный Swift или милый сердцу Objective-C и сконцентрироваться на написании JavaScript кода. А так как последнее довольно мучительно при работе в Xcode, установите заодно Sublime или один из его заменителей. И постарайтесь писать сразу правильно, потому что процесс отладки и исправления ошибок будет нелегким.

Еще одно замечание касается оптимизации. При сколько-нибудь длительном взаимодействии с AR объектами JS версия фреймворка начинает заметно тормозить, fps сильно просаживается, что впрочем не удивительно.

Нативная версия SDK при всей своей дружелюбности практически лишена «магии». Фактически она только оповещает вас о том, что маркер распознан, сообщает его идентификатор и координаты в пространстве, после чего передает флаг вам в руки. Далее вы вольны использовать для отрисовки AR объектов свой любимый инструмент, например, OpenGL.

Заключение


Итак, если вы новичок, решивший попробовать свои силы в сфере дополненной реальности, все зависит от вашего заказчика и его потребностей. Если клиенту не жалко потратить несколько тысяч евро на качественный платный фреймворк, а вас не пугает JavaScript или OpenGL, берите Wikitude. В противном случае начните с ARKit. Благодаря многочисленным примерам и поддержке сообщества вы сможете довольно быстро реализовать несложные задачи и «прощупать» эту технологию. Затем, когда начнете понимать, что к чему, и немного освоитесь, можно будет штурмовать низкоуровневую OpenCV и покорять недоступные ранее вершины.

Комментарии (7)


  1. Sklott
    06.06.2018 12:18

    Странные выводы. Тут скорее разделение такое: если надо markerless — то ARkit, а если с маркерами — то Wikitude/OpenCV.


    1. EugeniaLDS Автор
      06.06.2018 12:26

      ARKit тоже работает с маркерами, причем справляется с распознаванием совсем не плохо.
      Если маркеров мало, их можно просто добавить в Assets, если их много и хранятся маркеры на сервере, скормить их изображения ARKit'у можно программно.


      1. Sklott
        06.06.2018 16:09

        Да, но у ARKit-а привязка к маркерам хуже, а в остальных SDK хуже markerless реализация, если она вообще есть. Иногда за markerless выдают реализации которые тупо считают маркерами снятые ключевые кадры…


  1. sadsmile
    06.06.2018 12:19

    Добавлю Kudan (https://www.kudan.eu/)
    Язык — ObjectiveC/Java
    Плюсы — работает на Андроиде и iOS, Существует возможность добавления картинки-маркера на лету (для нас было важно)
    Минусы — Ценовая политика


    1. EugeniaLDS Автор
      07.06.2018 12:11

      Спасибо, что поделились опытом. Попробуем Kudan «в бою».


  1. truggvy
    07.06.2018 14:07

    Очень странно, что в статье про AR на мобильных девайсах не упомянута Vuforia. Весьма известный фреймворк.
    Языки: C++/Java/C#(для Unity)
    Плюсы: по функционалу довольно близка к ARKit
    Минусы: платная
    Впечатления: лично я, в своё время, просто офигел от точности Extended Tracking


    1. olegi
      09.06.2018 09:37

      точность лучше чем ARKit 2?