Многие из возможностей дополненной реальности, которые создает ROSE, сосредоточены на добавлении новых объектов или способов взаимодействия с уже существующим миром вокруг нас, позволяя пользователю взаимодействовать с виртуальными расширениями продукта, бренда или идеи. Однако в последнее время мы наблюдаем возобновление интереса брендов к созданию ориентированного на человека опыта, т.е. селфи. Совсем недавно мы погрузились в этот мир, работая над фильтрами Instagram кампании Стива Мэдденверс.

Конечно, идея, ориентированная на человека, не нова. Существует множество селфи-фильтров, разработанных для Instagram и Snapchat, популярность которых резко возросла за последние пять лет. Эти фильтры могут делать что угодно: от волшебного украшения чьего-либо лица до его старения, превращения в устрашающих орков и гоблинов, изменения их волос или черт лица, украшений и аксессуаров или полной замены их чужими. Это тоже своего рода дополненная реальность, и у нее есть свой огромный потенциал.

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

Что такое сегментация?

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

Типы сегментации:

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

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

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

Сегментация объектов: дает нам возможность выполнять окклюзию, чтобы объекты AR могли быть частично скрыты под реальными объектами или под ними, как это было бы логически в действительности, или даже для «вырезания и вставки» этих реальных объектов в виртуальное пространство.

Достижение сегментации

Как добиться сегментации? Приближение форм из базы данных никогда не будет даже близко к реалистичному. Определять границы по цветовому контрасту - непросто для людей с волосами или одеждой, близкими к цвету их кожи. Установление положения тела в начале опыта («Примите позу в соответствии с этим планом:»), а затем отслеживание изменений с течением времени - неуклюже и ненадежно. Нам нужно что-то почти мгновенное, что может перекалиброваться на лету и иметь большой запас приближения для регулировки. Нам нужно что-то умнее!

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

Все это не означает, что сегментация - это крайний край новых технологий. Например, Spark AR имеет возможности сегментации как минимум два года. Однако это довольно недавнее обновление платформы, которое позволяет пользователям использовать несколько классов сегментации в одном эффекте, и вы можете узнать больше об этом обновлении здесь. Эта новая возможность открывает двери к множеству более сложных эффектов, поэтому в этом тематическом исследовании мы используем сегментацию по нескольким классам для применения отдельных эффектов к фону, телу (лицу, волосам и коже) и одежде пользователя.

Каждый из этих слоев легко создается сам по себе с использованием текстуры сегментации с камеры. Например, Spark AR предоставляет шаблон «Фон», который показывает, как выполнить сегментацию людей и вставить фоновое изображение. Разбивая шаблон на части, мы видим, что это достигается путем создания двух прямоугольников с плоским изображением, которые накладываются на экран устройства и заполняют его. Самым верхним из них будет человек, а на нижнем - фоновое изображение. Для верхнего слоя (названного в шаблоне «пользователь») извлеченный канал камеры используется в качестве цветовой текстуры. Новички заметят, что в настоящее время нет видимых отличий от проекта пустой фронтальной камеры. Это связано с тем, что нормальный дисплей для всех практических целей является именно таким: просто прямоугольник с плоским изображением, который заполняет экран и отображает изображение с камеры. По сути, мы просто удвоили это количество, чтобы мы могли повозиться, и поместили нашу версию на первое место, скрывая «нормальный» дисплей.

Затем создается текстура сегментации человека, которая используется в качестве альфа-текстуры для пользовательского прямоугольника. Это устанавливает альфа-значение, которое определяет прозрачность, для всех частей пользовательского прямоугольника за пределами идентифицированного человека на 0, чтобы он был полностью прозрачным и вместо этого показывал то, что находится под ним. В пределах области, где находится идентифицированный человек, продолжает отображаться изображение с камеры. Это показывает нам, что текстура сегментации на самом деле состоит из двух двоичных областей: is и not, без какой-либо информации о том, что это есть / isn ' t на самом деле имеет в виду. Те, кто знаком с манипуляциями с изображениями, знают эту концепцию как «маскирование слоя». К каналу камеры обращаются дважды за кадр: один раз, чтобы определить, что является / не является двоичным, и создать карту текстуры (практически эквивалентную маске слоя), записывая эту информацию, и один раз, чтобы проверить, какого цвета должен быть каждый пиксель на этой карте. . (Проницательные наблюдатели заметят, что не имеет значения, в каком порядке происходят эти проверки.)

Наконец, шаблон позволяет вставить любое желаемое фоновое изображение в качестве цветовой карты прямоугольника фона. Вуаля: сегментация личности! Мы заменим стандартное изображение немного космоса для нашей эстетики.

Следующий шаг: добавление эффекта к лицу. Проблема: у нас нет встроенной сегментации «одежда»! У нас есть «волосы» и «тело», но нет ничего, что позволило бы нам легко отделить лицо и кожу от одежды. Snapchat Lens Studio достаточно хорош, чтобы обеспечить встроенную сегментацию «верхней одежды», но Spark AR не так уж и популярен. Нам нужно проявить немного творчества в отношении доступных нам вариантов.

Сообразительные люди, возможно, уже видели простое математическое решение. Наши варианты сегментации: «человек», «волосы» и «кожа». Человек без волос и кожи… это именно то, что мы ищем. Комбинируя текстуры волос и кожи и вычитая их из текстуры человека, мы получаем одежду. Давайте разберемся, как именно это выглядит в форме патча.

Как очень простая реализация концепции, она немного грубовата, но дает нам то, что нам нужно. Я внедряю некоторые настройки для примеров снимков экрана, но они не будут рассматриваться в этом тематическом исследовании, и я призываю вас исследовать, создавать и улучшать свои собственные решения!

«EZ Segmentation» - это актив патча прямо из библиотеки Spark AR, который предоставляет параметры для добавления эффектов либо к переднему плану (тело), ​​либо к фону (одежда). Довольно легко создавать эффекты самостоятельно, а затем передавать текстуру в слот. Здесь мы добавляем световой градиент свечения в паре с волнистым бликом линз на передний план и звездную анимацию на задний план.

Вы уже можете себе представить, что мы можем делать здесь с возможностью анимировать дизайн на одежде пользователя. И наоборот, мы можем оставить одежду нетронутой и добавить эффекты к коже пользователя, будь то окраска ее в стиле «Смурф» или «Халк» или ее полное стирание для фильтра типа «Человек-невидимка». Конечно, с этих предложений можно только начать; многоуровневая сегментация достаточно мощна, чтобы открыть дверь в потенциал галактики. Покажи нам, на что ты способен!

Автор Эрик Лян, инженер по дополненной реальности компании ROSE