AR-фреймворки для iOS: какой выбрать?

    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 и покорять недоступные ранее вершины.

    Lodoss Team

    59,00

    Сложные системы, мобильные приложения, дизайн и AR

    Поделиться публикацией
    Комментарии 8
      0
      Странные выводы. Тут скорее разделение такое: если надо markerless — то ARkit, а если с маркерами — то Wikitude/OpenCV.
        0
        ARKit тоже работает с маркерами, причем справляется с распознаванием совсем не плохо.
        Если маркеров мало, их можно просто добавить в Assets, если их много и хранятся маркеры на сервере, скормить их изображения ARKit'у можно программно.
          0
          Да, но у ARKit-а привязка к маркерам хуже, а в остальных SDK хуже markerless реализация, если она вообще есть. Иногда за markerless выдают реализации которые тупо считают маркерами снятые ключевые кадры…
        0
        Добавлю Kudan (https://www.kudan.eu/)
        Язык — ObjectiveC/Java
        Плюсы — работает на Андроиде и iOS, Существует возможность добавления картинки-маркера на лету (для нас было важно)
        Минусы — Ценовая политика
          0
          Спасибо, что поделились опытом. Попробуем Kudan «в бою».
          0
          Очень странно, что в статье про AR на мобильных девайсах не упомянута Vuforia. Весьма известный фреймворк.
          Языки: C++/Java/C#(для Unity)
          Плюсы: по функционалу довольно близка к ARKit
          Минусы: платная
          Впечатления: лично я, в своё время, просто офигел от точности Extended Tracking
            0
            точность лучше чем ARKit 2?
              0
              Вот тут не смогу подсказать, так как не достаточно много работал с обоими.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое