Наконец пришло время рассказать о том, что мы разработали и какие проблемы решили за последний год — ещё один значительный шаг на пути к тому, чтобы пользователи SketchAR чувствовали свободу творчества без ограничений условностей.
Существует огромный спрос на мобильные приложения с виртуальным контентом, независимо от ограничений текущих технологий. Поскольку компьютерное зрение — это сфера, где софт тесно связан с железом, к сожалению, большинство концепций AR-продуктов всегда будут ограничены задержками на технической стороне.
Небольшие команды редко решают фундаментальные проблемы, но мы можем найти метод, который упрощает задачу.
Зачем изобретать велосипед и почему до нас никто этого не пытался сделать?
Большинство сторонних библиотек и платформ используют предустановленные маркеры для фиксации виртуального объекта на его месте в реальном мире. В нашем случае рука, рисующая изображение, перекрывала эти маркеры, поэтому нам пришлось разработать собственный метод.

ARKit не может делать то же самое без маркеров.
Кроме того, ARKit и ARCore не основаны на маркерах (за исключением окружения), но точность фиксации виртуальных объектов была бы выше, если бы некоторые предустановленные маркеры удерживали виртуальный объект на месте. Текущий метод включает обнаружение и отслеживание ключевых точек для направления пользователя, но пока невозможно, чтобы пользователь сам задавал собственные опорные маркеры. Вторая проблема ARKit и ARCore — невозможность перемещать виртуальный объект вместе с реальным миром. Например, разместив виртуальный объект на физической поверхности, мы не можем перемещать объединённую виртуальную и физическую поверхность как единое целое — как будто приклеенную — потому что виртуальное изображение остаётся на том же месте и не следует за поверхностью.
Как уже говорилось, SketchAR работает с белой бумагой, которая является «убийцей» для большинства алгоритмов компьютерного зрения. Однако наши алгоритмы специально оптимизированы для таких условий. Они достаточно стабильны и точны, чтобы привязывать AR-контент к бумаге. Они продолжают работать даже после сбоя трекинга ARKit. Скорость тоже важна. Мы перенесли большую часть вычислений на GPU, что позволяет SketchAR работать в реальном времени на iPhone, начиная с модели 5SE.
Метод «прогрессивных маркеров».
Это означает, что линия, нарисованная художником, превращается в якорь и добавляет устойчивости удержанию виртуального объекта.
Также собранные данные используются, чтобы продолжать помогать нам разрабатывать полноценного персонализированного ассистента для каждого пользователя. Кстати, мы используем машинное обучение и нейронные сети для анализа и обучения на данных из рисунков каждого пользователя. Мы расскажем об этом подробнее в следующих статьях.
Хьюстон, у нас проблема, или принцип работы — «не бояться».
Чтобы понять, как была решена проблема, нужно вернуться к началу:
Окружение. У каждой поверхности своя текстура, цвет и структура. Кроме того, алгоритмы могут отвлекаться на посторонний «шум» окружения. Эту проблему решают фильтры («каналы», такие же, как каналы в Photoshop).
Унификация поверхностей сложна, если, конечно, обучение нейронной сети не основано на реальных данных пользователей. Обучение нейронной сети — это непрерывный процесс, и поэтому его никогда не стоит считать завершённой частью продукта.
«Холст». Холст — это лист бумаги, стена или любая другая поверхность, на которой вы решите рисовать. Разнообразие «холстов» определяется только их размерами. При этом белый цвет — «враг» компьютерного зрения. Пожалуйста, прочитайте нашу заметку «Проблема белой бумаги», чтобы понять, почему так происходит.
Рисунок. Очевидно, мы знаем уровень навыков наших пользователей и не ожидаем, что скетч будет полностью соответствовать оригинальному изображению. Поэтому наш алгоритм учитывает несоответствия пользователя.
Руки. Ещё один «враг» успешной работы приложения — когда рука на экране пересекает поверхность, маркеры или сам рисунок. Размер и форма, цвет кожи и даже манера держать карандаш отвлекают часть внимания алгоритма.
Устройство. Нефиксированное положение устройства. Пользователи держат телефон одной рукой, приближаясь и отдаляясь от поверхности под разными углами.
Решение.
После детального анализа этих проблем мы поняли, как «научить» приложение видеть только то, что рисует пользователь, фильтруя, но не игнорируя окружение.
Ниже вы можете увидеть, как окружающий мир превращается в плоское изображение и делится на слои для анализа каждого из них через каналы.

Как это работает?
Преобразование отрисованного контента, его сопоставление с оригиналом, а затем размещение виртуального объекта на поверхности требует многогранного подхода. На самом деле некоторые из этих слоёв гораздо значимее других. Это становится ясно, когда мы смотрим лишь на небольшую часть процесса — сколько действий происходит каждую секунду.
Это простая схема того, как окружение превращается в плоское изображение. Затем оно разделяется на множество слоёв (каналов) для анализа.
Как описано выше, слои разделяются, и алгоритм учит камеру различать всё, что она видит. Например, фон отделяется от руки, рука — от своей тени и так далее.

Экраны расположены по порядку слева направо:
- Виртуальное изображение, расположенное на поверхности, видимое пользователю на экране смартфона.
- Распознавание листа на поверхности.
- Бумага грубо отделяется от фона. Виден шум на поверхности стола, а тень от руки распознаётся как единый объект.
- Чёткое отделение руки от поверхности.
- Обнаружение только нарисованного контента.
- Распознавание нарисованного контента относительно окружения.
Когда приложение умеет чётко распознавать каждый из объектов, оно сопоставляет их с оригинальными изображениями. Помните, что каждое действие алгоритма происходит, пока камера и руки непрерывно двигаются в кадре.

Пример того, как много ложных сопоставлений происходило в первой версии алгоритма.

Этот пример хороших сопоставлений в более поздних версиях алгоритма.
Не вдаваясь в подробности, этот подход решает многие проблемы и задачи продукта по улучшению пользовательского опыта. Он расширяет возможности применения полученных данных, тем самым позволяя нам вывести продукт на новый уровень. Это полноценный ассистент, подкреплённый данными машинного обучения и нейронных сетей.
SketchAR доступен в AppStore уже почти год, в Play Market — полгода, и даже на MS Hololens. Несмотря на восторженные отзывы пользователей и прессы, до сих пор нет конкурирующего приложения с похожим функционалом. Это подчёркивает сложность проблемы и оригинальность наших алгоритмов.
Следите за обновлениями, рисуйте больше и любите технологии, ведь они помогают нам расти… а скоро поработят человечество! ;)
Искусство для всех!



