Метод Прогрессивных меток в комьютерном зрении и дополненной реальности.
Наконец, пришло время рассказать о том, что мы разработали и какие проблемы преодолели за последние несколько месяцев(на самом деле год). Это еще один значимый шаг к тому как пользователи SketchAR почувствуют свободу творчества, не ограничиваясь условностями.
Пользуясь мобильным приложением, каждый хочет видеть виртуальный контент в любом месте, независимо от окружения, освещения или мощности телефона. Но компьютерное зрение — это сфера, в которой программное обеспечение тесно связано с ‘железом’. К сожалению или к стастью, концепции дополненной реальности всегда будут опережать техническое развитие.
Фундаментальные проблемы редко решаются маленькими командами, но найти метод способный упростить задачу мы в состоянии.
Зачем изобретать велосипед и почему никто не сделал необходимого до нас?
Большинство сторонних библиотек и платформ основываются на метках, скрытие которых сбивает виртуальный объект. В нашем случае, рисующая рука, перекрывает нарисованный контент при рисовании.
С другой стороны, анонсированные ARKit и ARCore не основываются на метках, но точность удерживания виртуальных предметов хуже, чем если бы объект придерживался чего-то знакомого. Методы хоть и цепляются за контрастные пятна, но задать собственный ориентир пока невозможно. Вторая проблема ARKit и ARCore — это невозможность манипуляции поверхностью с удерживанием предметов на ней. К примеру, после того как виртуальный объект помещён на плоскость, при её перемещении, виртуальное изображение останется в той же координате, а не последует за холстом как приклеенный.
Метод Прогрессивных меток.
Это означает, что нарисованная линия, которую проводит художник превращается в якорь и добавляет устойчивость удержания виртуального объекта.
Также, собранная информация используется для разработки полноценного ассистента. Кстати, за сбор, анализ и обучение на основе данных от рисования, отвечает машинное обучение и нейронные сети. В следующих статьях мы обязательно расскажем об этом подробнее.
Хьюстон у нас проблемы или главный в работе принцип — “не ссать”.
Для понимания того как решалась задача, стоит уточнить вводные:
Окружение.
Плоскости, на которых рисуют, бывают разных фактур, цветов и детализаций. В случае, если грубо определить окружающую среду, алгоритм будет «отвлекаться» на посторонние “шумы”. Эта проблема решается фильтрами (можно назвать каналами, по аналогии с каналами в Photoshop).
Унифицировать поверхности сложно, если, конечно, обучать нейронные сети на реальных данных от пользователей. Но обучение нейронных сетей — процесс долгий, поэтому рассматривать их как самостоятельный метод не верно. Только дополнять основной метод.
“Холст”.
Холст — это лист бумаги, стена или любая другая плоскость где собираются рисовать.
Разнообразие «холстов» обуславливается только соотношением сторон. В то же время, белый цвет является “врагом” компьютерного зрения. Советуем прочитать нашу заметку «Проблема Белого листа», чтобы понимать почему так происходит.
Рисунок.
Очевидно, что надеяться на навыки пользователя не приходится и ожидать полного соответствия рисунка с оригиналом не стоит, поэтому наш алгоритм учитывает условности, допуски и несоответствия. К примеру, вполне вероятно появление линии, которых нет на оригинале.
Руки.
Еще одним «врагом» для работы нашего приложения — руки в кадре, которые перекрывают рисунок в тот момент, когда автор создаёт очередной шедевр. Размер и форма, цвет кожи, стиль держания карандаша, отвлекают на себя часть внимания алгоритма.
Устройство.
Нефиксированное положение устройства. Пользователи держат телефон одной рукой, приближаясь и удаляясь от поверхности под разными углами.
Решение
После детального анализа этих проблем, пришло понимание того, как научить приложение видеть только то, что рисует пользователь, фильтруя, но не игнорируя окружающую среду.
Как это работает?
Преобразование нарисованного контента, сопоставление этого контента с оригиналом и размещение виртуального объекта на поверхности, требуют проработки со множеством решений. Сразу скажем, что подобных слоев/каналов гораздо больше. Мы демонстрируем малую часть, чтобы было понятно, сколько процессов происходит ежесекундно.
Как описали выше, слои разделяются, обучая алгоритм отличать все в кадре. К примеру, фон отделяем от руки, руку от её тени и т.д.
Экраны по порядку слева направо:
1. виртуальное изображение расположенное на поверхности видимое пользователю на экране смартфона.
2. Определение листа на поверхности
3. Грубое отделение листа от фона. Виден шум на поверхности стола и тень руки определяется как единое с рукой.
4. Четкое отделение окружения от листа и руки.
5. Определение только нарисованного контента от остального
6. Определение нарисованного контента относительно окружения.
После того, когда мы научились четко распознавать каждый из объектов, мы сопоставляем нужные нам предмет с оригиналом изображения. Не забываем, что запоминать каждое сравнивание необходимо при условии непрерывного движения камеры и рук в кадре.
Не углубляясь в подробности скажем, что подобный подход решает ряд продуктовых проблем и задач по улучшению пользовательского опыта и раскрывает простор для применения полученных данных для развития продукта в новых плоскостях: это и полноценный ассистент, и рекомендательные механизмы, подкрепленные данными от машинного обучения и нейронных сетей.
Следите за обновлениями, рисуйте больше и любите технологии, ведь именно они помогают развиваться и скоро поработят человечество!
Всем арт.