В этом документе описывается, как разработчики могут использовать сегментацию фона (background segmentation, BGS) в Intel RealSense SDK для создания новых увлекательных приложений для совместной работы. Описывается предполагаемое поведение программ и их производительность в разных сценариях, оговариваются ограничения, о которых следует помнить разработчикам перед поставкой продуктов клиентам. Основная аудитория этой статьи — группы разработки, использующие BGS, и ОЕМ-производители.
На КДПВ — приложение Cyberlink YouCam RX как пример применения BGS.
Область применения
Сегментация фона (технология BGS) — важная отличительная особенность камеры Intel RealSense для приложений для совместной работы и создания контента. Возможность отделения фона в реальном времени без особого оборудования или постобработки — очень интересная дополнительная функция для существующих приложений для телеконференций.
Существует огромный потенциал доработки существующих приложений или создания новых с использованием технологии BGS. Например, потребители могут просматривать общий контент вместе с друзьями на YouTube* через другую программу в ходе сеанса видеочата. Сотрудники могут видеть изображение друг друга, наложенное на общую рабочую область при виртуальном собрании. Разработчики могут интегрировать BGS для создания новых сценариев использования, таких как изменяющийся фон или фоновое видео в приложениях, где используется камера или общий доступ к экрану. Выше и ниже показаны приложения, использующие камеру Intel RealSense. Кроме того, разработчики могут изобретать и другие сценарии использования, например съемку селфи и изменение фона, использование средств совместной работы (браузеры, офисные приложения) для совместного доступа и совместного редактирования, скажем, для создания видео караоке с разным фоном.
Приложение Personify, использующее BGS
Создание образца приложения с сегментацией фона
Требования
- Платформа с процессором Intel Core с включенным рутовым портом USB3.0
- Память: 4 ГБ
- Камера Intel RealSense F200
- Intel RealSense SDK
- Программное обеспечение Intel Depth Camera Manager или система, в которой этот компонент уже установлен OEM-производителем
- Microsoft Windows* 8.1, 64-разрядная версия
- Microsoft Visual Studio* 2010–2013 с последней версией пакета обновления
В этой статье мы поясняем, как разработчики могут заменить фон на видео или другие изображения в образце приложения. Мы также приводим фрагмент кода для смешения выходного изображения с любым фоновым изображением и рассказываем о влиянии на производительность.
Текущая реализация сегментации фона поддерживает форматы YUY2 и RGB. Допустимое разрешение — от 360p до 720p (для цветного изображения) и 480p (для изображения глубины).
На рисунке ниже показано общее представление конвейера BGS. Кадры глубины и цвета записываются камерой Intel RealSense и передаются в основной SDK (то есть в среду выполнения Intel RealSense SDK). На основе запроса, поступающего от приложения, кадры доставляются в блок User Extraction, где образуется сегментированное изображение в формате RGBA. К этому изображению можно применить альфа-смешение с любым другим изображением RGB для получения итогового фонового изображения на выходе. Разработчики могут использовать любые механизмы для смешения изображений на экране, но наилучшая производительность достигается при использовании графического процессора.
Конвейер BGS
Ниже поясняется, как интегрировать трехмерную сегментацию в приложение разработчика.
1. Установите следующие компоненты Intel RealSense SDK.
- Основная среда выполнения Intel RealSense SDK
- Модуль сегментации фона
2. Используйте веб-установщик или автономный установщик, чтобы установить только основные и индивидуальные компоненты. Среду выполнения можно установить только в режиме UAC.
intel_rs_sdk_runtime_websetup_x.x.x.xxxxxx --silent --no-progress --accept-license=yes --finstall=core,personify --fnone=all”
Можно определить, какая среда выполнения установлена в системе, с помощью следующего API Intel RealSense SDK:
// session is a PXCSession instance
PXCSession::ImplVersion sdk_version=session->QueryVersion();
3. Создайте экземпляр для использования трехмерной камеры. При этом создается конвейер для работы любого трехмерного алгоритма.
PXCSenseManager* pSenseManager = PXCSenseManager::CreateInstance();
4. Включите нужный промежуточный модуль. Рекомендуется включать только модуль, необходимый приложению.
pxcStatus result = pSenseManager->Enable3DSeg();
5. Укажите профиль, нужный для вашего приложения. Запуск с более высоким разрешением и с более высокой кадровой скоростью приведет к повышению нагрузки. Передайте профили, чтобы получить с камеры нужный поток.
PXC3DSeg* pSeg = pSenseManager->Query3DSeg();
pSeg->QueryInstance<PXCVideoModule>()->QueryCaptureProfile(profile, &VideoProfile);
pSenseManager->EnableStreams(&VideoProfile);
6. Инициализируйте конвейер камеры и передайте первый кадр на промежуточный уровень. Этот этап требуется для всех промежуточных уровней, он необходим для работы конвейера.
result = pSenseManager->Init();
7. Получите сегментированное изображение с камеры. Выходное изображение выводится с промежуточного уровня в формате RGBA, оно содержит только сегментированную часть.
PXCImage *image=seg->AcquireSegmentedImage(...);
8. Смешайте сегментированное изображение с собственным фоном.
Примечание. Смешение значительно влияет на производительность, если оно осуществляется на ЦП, а не на ГП. Образец приложения работает на ЦП.
- Можно использовать любую методику для смешения сегментированного изображения RGBA с другим растровым изображением.
- Можно использовать нулевое копирование данных в системную память при использовании ГП вместо ЦП.
- Для смешения можно использовать Direct3D* или OpenGL*.
Вот фрагмент кода для получения передачи изображения в системную память, где srcData имеет тип pxcBYTE.
segmented_image->AcquireAccess(PXCImage::ACCESS_READ,
PXCImage::PIXEL_FORMAT_RGB32, &segmented_image_data);
srcData = segmented_image_data.planes[0] + 0 * segmented_image_data.pitches[0];
Смешение и рендеринг
- Запись: чтение потоков данных цвета и глубины с камеры.
- Сегментация: разделение на фон и пиксели переднего плана.
- Копирование цвета и сегментированного изображения (маски глубины) в текстуры.
- Изменение размера сегментированного изображения (маски глубины) до такого же разрешения, как у цветного изображения.
- (Необязательно) Загрузка или обновление фонового изображения (при замене) в текстуру.
- Компиляция/загрузка шейдера.
- Установка цвета, глубины и (необязательно) фоновых текстур для шейдера.
- Запуск шейдера и показ.
- (В приложениях для видеоконференций) Копирование объединенного изображения на поверхность NV12 или YUY2.
- (В приложениях для видеоконференций) Передача поверхности в аппаратный кодировщик Intel Media SDK H.264.
Производительность
На работу приложения влияют следующие факторы.
- Кадровая скорость
- Смешение
- Разрешение
В приведенной ниже таблице показана нагрузка на процессор Intel Core i5 5-го поколения.
Без рендеринга | Рендеринг с помощью ЦП | Рендеринг с помощью ГП | |
---|---|---|---|
720p, 30 кадр./с. | 29,20 % | 43,49 % | 31,92 % |
360p, 30 кадр./с. | 15,39 % | 25,29 % | 16,12 % |
720p, 15 кадр./с. | 17,93 % | 28,29 % | 18,29 % |
Чтобы проверить влияние рендеринга на вашем собственном компьютере, запустите образец приложения с параметром -noRender, а затем без этого параметра.
Ограничения технологии BGS
Сегментация пользователей по-прежнему развивается, и с каждой новой версией SDK качество повышается.
О чем следует помнить при оценке качества.
- Избегайте наличия на теле предметов такого же цвета, как у фонового изображения. Например, черная футболка при черном фоне.
- Слишком яркое освещение головы может повлиять на качество изображения волос.
- Если лежать на кровати или на диване, система может работать неправильно. Для видеоконференций лучше подходит сидячее положение.
- Прозрачные и светопроницаемые объекты (например, стеклянный стакан) будут отображаться неправильно.
- Точное отслеживание руки вызывает затруднения, качество может быть нестабильным.
- Челка на лбу может привести к проблемам при сегментации.
- Не двигайте головой слишком быстро. Ограничения камеры влияют на качество.
Отзывы корпорации Intel о технологии BGS
Как повысить качество программного обеспечения? Лучше всего — оставлять отзывы. Выполнение сценариев в схожей среде может быть затруднено, если разработчик захочет повторить тестирование с новым выпуском Intel RealSense SDK.
Чтобы снизить расхождение между разными запусками, рекомендуется снимать входные последовательности, использующиеся для воспроизведения проблем, чтобы увидеть, улучшается ли качество.
Пакет Intel RealSense SDK поставляется с образцом приложения, помогающим собирать последовательности для воспроизведения.
- Важно для предоставления отзывов о качестве
- Не для анализа производительности
При установке по умолчанию образец приложения находится в папке C:Program Files (x86)IntelRSSDKbinwin32FF_3DSeg.cs.exe. Запустите приложение и выполните действия, показанные на приведенных ниже снимках экрана.
Вы увидите на экране самого себя, при этом фон будет удален.
Воспроизведение последовательностей
Если выбрать режим Record, можно сохранить копию вашего сеанса. Теперь можно открыть приложение FF_3DSeg.cs.exe и выбрать режим воспроизведения для просмотра записи.
Заключение
Промежуточный модуль сегментации фона технологии Intel RealSense предоставляет пользователям новые интересные возможности. Среди новых моделей использования — изменение фона на видео или другое изображение, создание селфи с сегментированным изображением.
Справочные материалы
- Камера Intel RealSense (F200)
- Intel RealSense SDK
- Программное обеспечение Intel Depth Camera Manager или система, в которой этот компонент уже установлен OEM-производителем
- Советы и рекомендации по использованию сегментации фона Intel RealSense
- Демонстрационные приложения Intel Real Sense
Автор: Intel