Разработка виртуального фона в виде SDK

Рассказываем, как мы разрабатывали виртуальный фон Virtual Background SDK с применением машинного обучения, и какие задачи пришлось решить на этом долгом и нелегком пути.

Разработка виртуального фона в виде SDK

Что такое виртуальный фон и кому он нужен?

Виртуальный фон — это замена реального фона картинкой, либо видео без применения хромакея. Хромакей, прежде всего, известен в кино- и телеиндустрии, и избавляет от необходимости тратиться на дорогие декорации. Технология хромакея не ограничивается киноиндустрией и уже давно применяется и обычными пользователями. Однако, имеет ряд недостатков, т. е. наличие зеленого либо синего фона, что в домашних условиях не всегда доступно. Альтернативой зеленому фону с развитием технологий машинного обучения стал виртуальный фон.

Резкий скачок популярности виртуального фона произошел в 2020 году, с началом пандемии, когда многие сотрудники были вынуждены перейти на работу из дома. И если кто-то может позволить себе домашний офис с красивой библиотекой за спиной, многим приходилось работать в стесненных условиях. В таком случае не каждый может позволить себе даже зеленый фон.

Виртуальный фон, также известный как умный хромакей, позволяет решить часть из вышеописанных проблем. Не требуется уже иметь однотонный фон, производительность современных устройств сделала технологию доступной практически всем, и каждый может скрыть беспорядок за спиной без серьезных вложений. Функция уже знакома многим, так как присутствует в Zoom и Skype. Однако рынок не ограничивается только этими решениями. С распространением функции виртуального фона, ее потребность стала актуальной практически в каждой программе — нам поступали запросы от компаний с решениями для телемедицины, технической поддержки и видео-звонков для разных сфер бизнеса.

Идея и разработка

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

Виртуальный фон призван решить описанные проблемы. Решение должно быть в виде одной кнопки — убрать фон. Разработка и встраивание собственных решений занимает много времени, а готовых продуктов на рынке не было. Учитывались следующие факторы:

  • кроссплатформенность,
  • высокая производительность и поддержка как можно большего числа устройств,
  • оптимизация для изображений с веб-камер или камер мобильных телефонов (т.е. необходимо было учитывать качество картинки, наличие шумов, уровень освещенности, положение человека),
  • решение должно представлять собой SDK, т.е. готовую библиотеку, которую можно встроить в любую программу.

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

  • подготовить набор данных для решения именно нашей проблемы,
  • разработать решение, пригодное для запуска на как можно большем количестве устройств.

Изначально мы планировали использовать существующие наборы данных для решения схожих проблем. Сюда входили датасеты MS COCO, Supervisely Person и AISegment.com - Matting Human Datasets. Существующие наборы данных нам не подходили, так как изображения были слишком качественными и обучить модель на них не получилось. Большинство пользователей, несмотря на весь прогресс в развитии оптики и сенсоров, имеют достаточно скромные по качеству веб-камеры и фронтальные камеры телефонов. К тому же, за время пандемии, каналы передачи данных подверглись сильной нагрузке и некоторые компании даже были вынуждены ограничивать качество видео-звонков.

Пример изображения из датасета MS COCO<br />
Пример изображения из датасета MS COCO

Поэтому было принято решение о создании собственного набора данных. Разметка производилась вручную. Каждый новый набор картинок существенно улучшал нашу модель. Помимо размеченных картинок, использовались средства для оптимизации самих изображений. Текущий датасет содержит 12000 изображений.

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

Разработка виртуального фона в виде SDK
Примеры изображений из собственного датасета<br />
Примеры изображений из собственного датасета

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

Запуск модели возможен на центральном процессоре, либо на видеокарте. Итогом адаптации модели стала поддержка наиболее распространенных платформ через стандартизированный и универсальный интерфейс - поддерживаются Windows, macOS, Android и iOS (включая iPadOS). Каждая платформа предоставляет свои средства для запуска моделей. Все модели были обернуты в нативные компоненты для каждой из поддерживаемых платформ, представлены в виде SDK. Software Development Kit — набор средств для разработки, в нашем случае представляет собой фактически черный ящик — на вход подается исходное, а на выход получается сегментированное изображение.

Что получилось

Virtual Background SDK сегодня может работать на следующих платформах:

  • WinML — встроенный фреймворк от Microsoft, доступен в операционных системах Windows 10 2004 и выше, поддерживается ускорение на CPU или GPU.
  • OpenVINO — фреймфорк от Intel, поэтому оптимизирован под процессоры или GPU Intel (поддерживается на Windows). Поддерживаются процессоры 6-го поколения, хотя может работать на 4- и 5-м поколениях процессоров и GPU.
  • MediaPipe — решение от Google, позволяет запускать модели на платформе Android. На топовых устройствах модель показала уверенные 30 кадров в секунду.
  • CoreML — нативное решение от Apple для всей экосистемы - macOS, iOS, iPadOS. Модель показала 30 кадров в секунду.
  • Web (WebAssembly) — работает в веб браузере без установки. Все операции выполняются на устройстве пользователя.

Планы проекта

Оптимизация

Производительность текущей реализации может достигать 50 кадров с секунду для разрешения 1080p и даже больше, но сильно зависит от железа. Если железо не старое (не старше 5-7 лет), то легко достигается планка в 30 кадров в секунду.

Улучшение качества

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

Расширение списка поддерживаемых платформ и железа

Хотя мы и упомянули большое количество фреймворков, на которых работает наша модель, еще есть куда развиваться и где проводить оптимизацию. Фрагментация аппаратных платформ оказывает существенное влияние на разработку.

Демо версию для демонстрации возможностей можно загрузить на сайте: https://virtualbackgroundsdk.com/

Видео демонстрация: https://www.youtube.com/watch?v=qg3uGmgFQEw

3535 показов
114114 открытия
Начать дискуссию