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