Как заменить фон на веб камере
Перейти к содержимому

Как заменить фон на веб камере

  • автор:

Как установить виртуальный фон для видеоконференций в сервисах Zoom, Скайп, Microsoft Teams, Google Meet и Ватсап

фото автора

фон

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

Видеовстречи с возможностью записи без ограничений по времени

Зачем нужен ненастоящий задний фон при видеозвонке

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

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

Еще одна причина использовать виртуальный фон для видеоконференций — реклама компании, товара или услуги. Создайте баннер с логотипом бренда или изображением продукта и разместите его на заднем фоне. Он привлечет внимание и добавит солидности.

На платформе для ВКС Линк Вебинары функция смены фона встроена автоматически (есть даже в бесплатной версии). Для клиентов, использующих платные тарифы, предусмотрена опция брендирования: кроме стандартных виртуальных фонов, можно выбрать логотип компании или оформление в корпоративных цветах.

Как установить виртуальный фон для видеоконференций в сервисах Zoom, Скайп, Microsoft Teams, Google Meet и Ватсап | Фото 1

Брендирование позволяет персонализировать весь контент: от фона до e-mail рассылки и кнопок в записи. Поэтому платформа Линк Вебинары идеально подходит для организации обучения сотрудников и партнеров крупных компаний, а также для проведения платных мероприятий.

Анна Дратцева

Менеджер проектов Центра развития функции обучения Тинькофф

Как изменить фон во время видеозвонка в Zoom

Предлагаем пошаговую инструкцию, как изменить фон для видеоконференции приложения zoom:

  1. сначала необходимо скачать приложение;
  2. запустите приложение Zoom;
  3. откройте настройки;
  4. зайдите во вкладку «Виртуальный фон»;
  5. выберите один из предустановленных вариантов, которые предлагает программа.

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

Как изменить задний фон в Скайпе при видеозвонке

Фон в Скайпе можно изменить прямо во время проведения видеоконференций.

  1. Нажмите на стрелку рядом со значком камеры.
  2. Выберите, что вам предпочтительнее: полностью заменить фон на картинку или просто размыть то, что находится у вас за спиной.
  3. Нажмите на нужную вкладку: задний фон сразу изменится.

Если вы решили поставить виртуальное изображение, обратите внимание, чтобы оно было сохранено в альбомном формате.

Как установить виртуальный фон для видеоконференций в сервисах Zoom, Скайп, Microsoft Teams, Google Meet и Ватсап | Фото 2

Как сменить фон заднего плана при видеозвонке в Microsoft Teams

Если вы пользуетесь десктопной версией, то вам следует:

  1. Найти вкладку «Фильтры фона» (под изображением видео).
  2. Выбрать опцию размытия или загрузить собственное изображение.

Выбранный фон сохранится в настройках до тех пор, пока его вручную не заменят другим.

Видеоконференция уже началась, а вы в процессе решили изменить картинку за спиной? Следуйте инструкции:

  1. откройте элементы управления собранием;
  2. войдите в раздел «Дополнительные действия»;
  3. откройте вкладку «Применить фоновые эффекты»;
  4. выберите подходящую картинку;
  5. нажмите «Предварительный просмотр»;
  6. сохраните настройки, если все устраивает.

Функция смены фона пока не доступны пользователям ОС Linux.

Тем, кто скачал приложение и использует Microsoft Teams на смартфоне, нужно:

  1. Выбрать «Фоновые эффекты».
  2. Нажать на «Размытие» или заменить фон на одну из предложенных картинок (можно загрузить свое изображение).
  3. Кликнуть на кнопку «Готово».

Фон сохранится во всех видеоконференциях, пока вы не измените настройки.

Как установить виртуальный фон для видеоконференций в сервисах Zoom, Скайп, Microsoft Teams, Google Meet и Ватсап | Фото 3

Как настроить фон во время видеозвонка в Google Meet

Перед стартом конференции выполните всего несколько действий:

  1. Кликните на значок «Применить визуальные эффекты».
  2. Выберите готовый вариант или добавьте изображения из своей галереи.
  3. Задайте нужный фильтр при необходимости.
  4. Нажмите «Присоединиться».

Если встреча уже идет, то алгоритм действий другой:

  1. Нажмите на вкладку «Еще».
  2. Кликните на «Применить визуальные эффекты».
  3. Выберите нужный фон.

Изменение картинки и функция размытия не ухудшают работу программы и не искажают качество видеопотока и звука.

Как поменять фон в сервисе Cisco Webex

Перед началом онлайн-встречи:

  1. Откройте вкладку «Изменить фон».
  2. Определитесь с фоном и сохраните настройки.

Если мероприятие уже началось, нажмите на значок «Меню» (3 вертикальные точки). Выберите пункт «Изменить фон». Кликните на «Применить».

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

Можно ли изменить фон для видеозвонка в Ватсап

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

Более сложный фон для видеоконференции: как сделать

Есть специальные программы и приложения, которые позволяют создавать оригинальные видео и анимационные картинки для заднего фона. Среди них: Movavi Video Editor, Wondershare UniConverter, Video Background Changer. Но с их помощью можно изменить фон только на тех платформах для ВКС, у которых изначально предусмотрена такая функция.

Заключение

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

FAQ

  • Как сделать фон в видеоконференции? Порядок действий зависит от особенностей платформы. Но чаще всего кнопка для смены фона размещена в настройках или вынесена на главный экран.
  • Где взять фон для зума? Можно выбрать из готовых вариантов, которые предлагает программа, или загрузить собственное изображение — любое на свой вкус.

Поделиться в соцсетях:

Подпишитесь на блог МТС Линк

Читайте кейсы и инструкции по работе в онлайне на почте

Смотрите также

  • Как использовать Snap Camera на платформе Webinar?
  • Чем заменить Zoom: аналоги сервиса
  • Порядок организации и проведения видеоконференций

Как использовать хромакей в видеоредакторе OBS Studio?

Вам понадобится хромакей и веб камера, которая будет снимать ведущего на фоне хромакея.

Начинаем подготовку к работе:

1. Установите хромакей за спиной спикера.

2. Откройте программу OBS Studio.

3. Убедитесь, что камера и микрофон включены и работают.

Удаление зеленого фона

Для того, чтобы удалить зеленый фон, выполните несколько шагов:

1. Нажмите значок веб камеры правой кнопкой мыши и выберите меню Filters.

2. В нижнем левом углу кликните на плюсик и выберите инструмент Chroma Key.

3. Подтвердите применение фильтра. При этом зеленый фон должен исчезнуть.

Настройки хромакея

Для того, чтобы добиться полной прозрачности фона без каких-либо погрешностей, требуется настроить несколько параметров:

1. Чтобы удалить имеющиеся на фоне артефакты, достаточно немного передвинуть ползунок Similarity в сторону увеличения.

2. Для сглаживания края объекта (ведущего) можно воспользоваться инструментом Smoothness.

3. Если нужно подкорректировать тон кожи, используйте ползунок Key Color Spill Reduction.

4. Для того, чтобы убрать лишние части фона и уменьшить масштаб ведущего, нажмите клавишу Alt и перетащите маркер рамки так, как вам нужно.

5. После записи стрима, просмотрите полученное видео.

Замена фона

1. После того, как произведены все необходимые настройки, закройте окно Chroma Key.

2.Убедитесь, что фон стал прозрачным.

Почему стоит заказать хромакей у нас?

  • Состав ткани, используемой для изготовления хромакея, — 100% полиэстер плотностью 285 г/м, поэтому наши изделия не просвечивают и не бликуют;
  • Цветовая гамма наших изделий — более 10 разных цветов;
  • При шитье больших полотен, используются технологические швы, которые не видны и не снижают качество видеомонтажа;
  • Хромакей нашего производства можно стирать в стиральной машине и отпаривать утюгом;
  • Наша компания работает с такими крупными заказчиками, как Муз-ТВ, лейбл Black star, певица Лобода, ТВ-3, театры Москвы, школы и т.д.;
  • Сроки изготовления полотна хромакея по вашим размерам — 1-3 дня.

Заказать хромакей можно на главной странице нашего сайта. Для консультации звоните по бесплатному номеру 8 800 550 76 07.

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

Как удалить или заменить фон в Logitech

В этом руководстве мы покажем вам, как заменять или удалять фон во время записи видео с веб-камеры с помощью веб-камеры Logitech.

filmora author

Мария Матвеева

Время обновления: 13 Nov 2023 г.

Скриншоты требуют повествования, чтобы быть эффективными, и по этой причине YouTubers и продюсеры контента eLearning постоянно включают себя в обучающие и игровые видеоматериалы. Веб-камеры обычно используются во время сеансов записи экрана, чтобы запечатлеть кадры рассказчика, но такая простая ошибка, как, например, невнимание к фону видео, может испортить идеально снятое веб-камерой видео.

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

Как заменить и удалить фон с помощью Personify ChromaCam software

ChromaCam для Logitech Webcam

Перед тем, как приступить к настройке фона видео с веб-камеры, необходимо выполнить несколько подготовительных шагов. В настоящее время Personify ChromaCam доступна только в операционной системе Windows, поэтому пользователи Mac не могут установить программное обеспечение, даже если они владеют веб-камерой Logitech C992 Pro Stream и веб-камерой BRIO 4K Pro. Если вы приобрели эти модели веб-камеры, то при первом подключении веб-камеры к компьютеру у вас спросят, хотите ли вы установить программное обеспечение Personify ChromaCam бесплатно.

Заметка: Вы можете загрузить программное обеспечение с веб-сайта камеры ChromaCam, если вы не используете веб-камеру Logitech C922 или BRIO 4K. ChromaCam работает со всеми 2D веб-камерами, но вам может понадобиться pay.

Технические характеристики программного обеспечения не предъявляют высоких требований, но вам все равно потребуется , по крайней мере, Windows 7, или более свежая версия ОС Windows, установленная на вашем ПК, а также процессор Intel или AMD и 4 ГБ оперативной памяти. Камера ChromaCam оптимизирована для 64-разрядной Windows, хотя она может работать и в 32-разрядной версии ОС, а программное обеспечение может использоваться только с процессорами, входящими в комплект Intel AVX Set. Personify ChromaCam совместима со многими приложениями для видеочата и вещания программных продуктов, в том числе Skype, OBS Studio, XSplit Broadcaster Software (мы возьмем его, например, в этой статье), Google Hangouts, GameShow или Twitch, чтобы упомянуть несколько.

Не зависимо от программного обеспечения, которое вы используете с ChromaCam, процесс настройки довольно прост и включает в себя всего несколько простых шагов. Мы покажем, как можно заменить и удалить фон с помощью Personify ChromaCam с помощью кнопки Logitech C922 Pro Stream webcam.

Шаг 1 — Скачать & Установить программное обеспечение ChromaCam

Подключите веб-камеру к компьютеру и установите программное обеспечение ChromaCam. Если по каким-либо причинам веб-камера Logitech C922 Pro Stream не предоставляет такой возможности, вы можете загрузить программное обеспечение с Страницой поддержки клиентов Logitech.

logitech-c922-chromacam

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

Бесплатная версия ChromaCam добавляет водяные знаки ко всем видеозаписям, и вы должны заплатить 29,99$ единовременную плату за их удаление. Однако бесплатная версия программного обеспечения, поставляемая в комплекте с веб-камерой Logitech C922 Pro Stream, не создает водяных знаков.

Когда программное обеспечение ChromaCam будет успешно установлено на вашем компьютере, и после того, как вы убедитесь, что веб-камера работает правильно, вы можете запустить XSplit Broadcaster. Если вы еще не установили это программное обеспечение на вашем компьютере, вы можете нажать здесь для запуска процесса установки.

personify-chromacam-remove-background

Шаг 2 — Настройка нового сеанса записи

После открытия программы XSplit вы должны перейти в меню Add Source, а затем выбрать Personify ChormaCam из выпадающего списка Webcam, capture card, video devices (Персонифицировать ChormaCam). На экране появится окно Personify (Персонификация), в котором вы сможете выбрать новый фон для видео с веб-камеры, щелкнув по шаблонам, представленным в окне Personify (Персонификация).

Если вы хотите настроить параметры записи видео, щелкните правой кнопкой мыши веб-камеру C922 Pro Stream и откройте выпадающее меню Configure. Выберите функцию Видеовыход и перейдите к выбору Сжатие цветового пространства, Ратуша кадра или Размер выходного видеосигнала. Опция Видеовход в меню Настройка предоставляет доступ к Настройкам камеры Logitech для веб-камеры и позволяет активировать функцию компенсации низкой освещенности, которая повышает производительность C922 Pro Stream в условиях низкой освещенности.

Шаг 3 — Выбор опций удаления и замены фона

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

chromacam-interface

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

Шаг 4 — Запись с помощью ChromaCam

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

Вы можете приостановить или остановить запись одним щелчком мыши, и все, что вы сможете найти ваши видео в XSplit’s Records tab.

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

Помощь для лучшей замены фона

Изменить или удалить фон в видео с веб-камеры легко, но есть несколько вещей, которые вы можете сделать, чтобы убедиться, что все видео с веб-камеры, созданные с помощью программного обеспечения Personify ChromaCam, соответствуют самым высоким визуальным стандартам.

1. Используйте простой монохромный фон

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

2. найти правильный баланс между производительностью и качеством видео

Logitech C922 при использовании с Personify ChromaCam может снимать видео со скоростью 60 кадров в секунду в разрешении 720p, но программное обеспечение также позволяет снизить качество записи экрана и повысить качество отснятого материала с веб-камеры. Нажмите на значок «Настройка» в окне Personify, а затем просто перетащите ползунок Performance VS Quality, чтобы улучшить качество отснятого материала, созданного с помощью ChromaCam. Тем не менее, снижение качества видео также снизит частоту кадров, так что ваши записи на экране могут быть не так гладко, как если бы они были захвачены с максимальным разрешением.

3. Используйте профессиональное осветительное оборудование

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

Видеозвонки с виртуальным фоном и опенсорсные инструменты

Сейчас, когда многие из нас находятся на карантине из-за COVID-19, видеозвонки стали куда более частым явлением, чем раньше. В частности, сервис ZOOM неожиданно стал очень популярным. Вероятно, самой интересной возможностью Zoom является поддержка виртуального фона (Virtual Background). Она позволяет пользователям, в интерактивном режиме, заменять фон, находящийся позади них, на любое изображение или видео.

Я уже давно применяю Zoom на работе, на опенсорсных встречах, посвящённых Kubernetes, делая это обычно с корпоративного ноутбука. Теперь я, в режиме работы из дома, склонен к использованию более мощного и удобного персонального настольного компьютера для решения некоторых из моих опенсорсных задач.

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

Так как зелёного экрана у меня нет, я решил просто реализовать собственную систему удаления фона. А это, конечно, куда лучше, чем наведение порядка в квартире, или постоянное использование рабочего ноутбука.

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

Чтение данных с камеры

Начнём с начала и ответим на следующий вопрос: «Как получить видео с веб-камеры, которое будем обрабатывать?».

Так как я на домашнем компьютере использую Linux (когда не играю в игры), я решил использовать Python-привязки Open CV, с которыми я уже знаком. Они, помимо V4L2-биндингов для чтения данных с веб-камеры, включают в себя и полезные базовые функции по обработке видео.

Чтение кадра с веб-камеры в python-opencv устроено очень просто:

import cv2 cap = cv2.VideoCapture('/dev/video0') success, frame = cap.read() 

Я, чтобы улучшить результаты при работе с моей камерой, перед захватом с неё видео применил следующие настройки:

# настройка камеры на 720p @ 60 FPS height, width = 720, 1280 cap.set(cv2.CAP_PROP_FRAME_WIDTH ,width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height) cap.set(cv2.CAP_PROP_FPS, 60) 

Возникает такое ощущение, что большинство программ для видеоконференций ограничивают видео параметрами 720p @ 30 FPS, или ниже. Но мы, в любом случае, можем и не читать каждый кадр. Такие настройки задают верхний лимит.

Поместим механизм захвата кадра в цикл. Теперь у нас есть доступ к видеопотоку с камеры!

while True: success, frame = cap.read() 

Сохранить кадр в тестовых целях можно так:

cv2.imwrite("test.jpg", frame) 

После этого мы можем убедиться в том, что камера работает. Замечательно!

Надеюсь, вы не против моей бороды

Обнаружение фона

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

Хотя возникает такое ощущение, что создатели Zoom нигде не рассказывают о том, как именно программа убирает фон, то, как ведёт себя система, заставляет меня задуматься о том, что тут не обошлось без нейронных сетей. Это сложно объяснить, но результаты выглядят именно так. Кроме того, я нашёл статью о том, как в Microsoft Teams реализовано размытие фона с помощью свёрточной нейронной сети.

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

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

Построение такого датасета при подготовке к обучению нейронной сети, возможно, не потребует больших усилий. Это — благодаря тому, что команда исследователей из Google уже сделала всё самое тяжёлое и выложила в опенсорс предварительно обученную нейронную сеть для сегментации людей. Эта сеть называется BodyPix. Работает она очень хорошо!

Сеть BodyPix сейчас доступна лишь в форме, подходящей для TensorFlow.js. В результате, легче всего её применить, воспользовавшись библиотекой body-pix-node.

Для ускорения получения вывода сети (прогноза) в браузере предпочтительно пользоваться WebGL-бэкендом, но в среде Node.js можно воспользоваться бэкендом Tensorflow GPU (обратите внимание на то, что для этого понадобится видеокарта от NVIDIA, которая у меня есть).

Для того чтобы упростить настройку проекта, воспользуемся маленьким контейнеризованным окружением, обеспечивающим работу TensorFlow GPU и Node.js. Использование всего этого с помощью nvidia-docker — гораздо легче, чем самостоятельный сбор необходимых зависимостей на своём компьютере. Для этого на компьютере понадобится лишь наличие Docker и актуальных графических драйверов.

Вот содержимое файла bodypix/package.json :

Вот — файл bodypix/Dockerfile :

# Базовый образ, соответствующий требованиям TensorFlow GPU FROM nvcr.io/nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04 # Установим node RUN apt update && apt install -y curl make build-essential \ && curl -sL https://deb.nodesource.com/setup_12.x | bash - \ && apt-get -y install nodejs \ && mkdir /.npm \ && chmod 777 /.npm # Проверим, имеется ли достаточно видеопамяти # К сожалению tfjs-node-gpu не даёт сведений о конфигурации GPU :( ENV TF_FORCE_GPU_ALLOW_GROWTH=true # Устанавливаем node-зависимости WORKDIR /src COPY package.json /src/ RUN npm install # Задаём приложение в качестве точки входа COPY app.js /src/ ENTRYPOINT node /src/app.js 

Теперь поговорим о получении результатов. Но сразу предупреждаю: я не отношусь к Node.js-экспертам! Это — лишь результат моих вечерних экспериментов, поэтому будьте ко мне снисходительны :-).

Следующий простой скрипт занят обработкой изображения с двоичной маской, отправленного на сервер с использованием HTTP POST-запроса. Маска — это двумерный массив пикселей. Пиксели, представленные нулями — это фон.

Вот — код файла app.js :

const tf = require('@tensorflow/tfjs-node-gpu'); const bodyPix = require('@tensorflow-models/body-pix'); const http = require('http'); (async () => < const net = await bodyPix.load(< architecture: 'MobileNetV1', outputStride: 16, multiplier: 0.75, quantBytes: 2, >); const server = http.createServer(); server.on('request', async (req, res) => < var chunks = []; req.on('data', (chunk) =>< chunks.push(chunk); >); req.on('end', async () => < const image = tf.node.decodeImage(Buffer.concat(chunks)); segmentation = await net.segmentPerson(image, < flipHorizontal: false, internalResolution: 'medium', segmentationThreshold: 0.7, >); res.writeHead(200, < 'Content-Type': 'application/octet-stream' >); res.write(Buffer.from(segmentation.data)); res.end(); tf.dispose(image); >); >); server.listen(9000); >)(); 

Для преобразования кадра в маску мы, в Python-скрипте, можем воспользоваться пакетами numpy и requests:

def get_mask(frame, bodypix_url='http://localhost:9000'): _, data = cv2.imencode(".jpg", frame) r = requests.post( url=bodypix_url, data=data.tobytes(), headers=) # преобразуем необработанные байты в numpy-массив # необработанные данные выглядят как uint8[width * height] со значениями 0 или 1 mask = np.frombuffer(r.content, dtype=np.uint8) mask = mask.reshape((frame.shape[0], frame.shape[1])) return mask 

В результате получается примерно следующее.

Пока я всем этим занимался, я наткнулся на следующий твит.

Это, определённо, самый лучший фон для видеозвонков

Теперь, когда у нас имеется маска для отделения переднего плана от фона, заменить фон на что-то другое будет очень просто.

Я взял из ветки того твита фоновое изображение и обрезал его так, чтобы получилась бы картинка формата 16×9.

Фоновое изображение

После этого я сделал следующее:

# читаем виртуальный фон (соотношение сторон изображения должно быть 16:9) replacement_bg_raw = cv2.imread("background.jpg") # меняем размер изображения так, чтобы оно вписалось бы в кадр (width & height из предыдущего кода) width, height = 720, 1280 replacement_bg = cv2.resize(replacement_bg_raw, (width, height)) # комбинируем фон и передний план, используя инвертированную маску inv_mask = 1-mask for c in range(frame.shape[2]): frame[. c] = frame[. c]*mask + replacement_bg[. c]*inv_mask 

Вот что у меня после этого получилось.

Результат замены фона

Такая маска, очевидно, недостаточно точна, причиной этого являются те компромиссы в сфере производительности, на которые мы пошли, настраивая BodyPix. В общем, пока всё выглядит более или менее терпимо.

Но, когда я смотрел на этот фон, меня посетила одна идея.

Интересные эксперименты

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

Первый очевидный шаг заключается в смягчении краёв маски. Например, это можно сделать так:

def post_process_mask(mask): mask = cv2.dilate(mask, np.ones((10,10), np.uint8) , iterations=1) mask = cv2.erode(mask, np.ones((10,10), np.uint8) , iterations=1) return mask 

Это позволит немного улучшить ситуацию, но особого продвижения вперёд тут нет. Да и простая замена — дело довольно-таки скучное. Но, так как мы дошли до всего этого сами, это значит, что мы можем сделать с картинкой всё что угодно, а не просто убрать фон.

Учитывая то, что мы используем виртуальный фон из «Звёздных войн», я решил создать эффект голограммы для того чтобы сделать картинку интереснее. Это, кроме того, позволяет сгладить размытие маски.

Для начала обновим код пост-процессинга:

def post_process_mask(mask): mask = cv2.dilate(mask, np.ones((10,10), np.uint8) , iterations=1) mask = cv2.blur(mask.astype(float), (30,30)) return mask 

Края теперь оказываются размытыми. Это хорошо, но нам ещё нужно создать эффект голограммы.

Голливудские голограммы обычно отличаются следующими свойствами:

  • Бледная цветная или монохромная картинка — будто нарисованная ярким лазером.
  • Эффект, напоминающий линии развёртки или нечто вроде сетки — будто изображение выводится несколькими лучами.
  • «Эффект привидения» — будто бы проекция выполняется послойно или так, как если бы при создании проекции не выдерживалось бы правильное расстояние, на котором она должна выводиться.

Сначала, чтобы окрасить изображение в оттенок синего, можем воспользоваться методом applyColorMap :

# делаем мэппинг кадра в сине-зелёное цветовое пространство holo = cv2.applyColorMap(frame, cv2.COLORMAP_WINTER) 

Далее — добавляем линии развёртки с эффектом, напоминающим уход в полутона:

# для каждой строки bandLength уменьшить яркость на 10-30%, # не трогать строки bandGap. bandLength, bandGap = 2, 3 for y in range(holo.shape[0]): if y % (bandLength+bandGap) < bandLength: holo[y. ] = holo[y. ] * np.random.uniform(0.1, 0.3) 

Далее, реализуем «эффект привидения», добавляя к изображению сдвинутые взвешенные копии текущего эффекта:

# shift_img из: https://stackoverflow.com/a/53140617 def shift_img(img, dx, dy): img = np.roll(img, dy, axis=0) img = np.roll(img, dx, axis=1) if dy>0: img[:dy, :] = 0 elif dy0: img[:, :dx] = 0 elif dx 

И наконец, мы хотим сохранить какие-то из исходных цветов, поэтому скомбинируем голографический эффект с оригинальным кадром, поступив примерно так, как при добавлении «эффекта привидения»:

holo_done = cv2.addWeighted(img, 0.5, holo2, 0.6, 0) 

Вот как выглядит кадр с эффектом голограммы:

Кадр с эффектом голограммы

Сам по себе этот кадр выглядит неплохо.

Попробуем теперь совместить его с фоном.

Изображение, наложенное на фон

Готово! (обещаю — видео такого рода будет выглядеть интереснее).

Вывод видео

А теперь надо сказать о том, что мы тут кое-что упустили. Дело в том, что всем этим мы пока не можем воспользоваться для совершения видеозвонков.

Для того чтобы это исправить, воспользуемся pyfakewebcam и v4l2loopback для создания фиктивной веб-камеры.

Мы, кроме того, планируем прицепить эту камеру к Docker.

Сначала создадим файл fakecam/requirements.txt с описанием зависимостей:

numpy==1.18.2 opencv-python==4.2.0.32 requests==2.23.0 pyfakewebcam==0.1.0 

Теперь создадим файл fakecam/Dockerfile для приложения, реализующего возможности фиктивной камеры:

FROM python:3-buster # обеспечиваем актуальность pip RUN pip install --upgrade pip # устанавливаем зависимости opencv RUN apt-get update && \ apt-get install -y \ `# opencv requirements` \ libsm6 libxext6 libxrender-dev \ `# opencv video opening requirements` \ libv4l-dev # устанавливаем зависимости из requirements.txt WORKDIR /src COPY requirements.txt /src/ RUN pip install --no-cache-dir -r /src/requirements.txt # копируем виртуальный фон COPY background.jpg /data/ # запускаем скрипт фиктивной камеры (с небуферизованным выводом для упрощения отладки) COPY fake.py /src/ ENTRYPOINT python -u fake.py 

Теперь, из командной строки, установим v4l2loopback:

sudo apt install v4l2loopback-dkms 

Настроим фиктивную камеру:

sudo modprobe -r v4l2loopback sudo modprobe v4l2loopback devices=1 video_nr=20 card_label="v4l2loopback" exclusive_caps=1 

Нам, для обеспечения работоспособности некоторых приложений (Chrome, Zoom), нужна настройка exclusive_caps . Метка card_label задаётся лишь для обеспечения удобства выбора камеры в приложениях. Указание номера video_nr=20 приводит к созданию устройства /dev/video20 в том случае, если соответствующий номер не занят, а он вряд ли будет занят.

Теперь внесём в скрипт изменения, позволяющие создать фиктивную камеру:

# тут, опять же, используются те же, что и раньше, значения width и height fake = pyfakewebcam.FakeWebcam('/dev/video20', width, height) 

Нужно отметить, что pyfakewebcam ожидает изображения с каналами RGB (Red, Green, Blue — красный, зелёный, синий), а Open CV работает с порядком каналов BGR (Blue, Green, Red).

Исправить это можно до вывода кадра, а затем отправить кадр так:

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) fake.schedule_frame(frame) 

Вот — полный код скрипта fakecam/fake.py :

import os import cv2 import numpy as np import requests import pyfakewebcam def get_mask(frame, bodypix_url='http://localhost:9000'): _, data = cv2.imencode(".jpg", frame) r = requests.post( url=bodypix_url, data=data.tobytes(), headers=) mask = np.frombuffer(r.content, dtype=np.uint8) mask = mask.reshape((frame.shape[0], frame.shape[1])) return mask def post_process_mask(mask): mask = cv2.dilate(mask, np.ones((10,10), np.uint8) , iterations=1) mask = cv2.blur(mask.astype(float), (30,30)) return mask def shift_image(img, dx, dy): img = np.roll(img, dy, axis=0) img = np.roll(img, dx, axis=1) if dy>0: img[:dy, :] = 0 elif dy0: img[:, :dx] = 0 elif dx 

Теперь соберём образы:

docker build -t bodypix ./bodypix docker build -t fakecam ./fakecam 
# создадим сеть docker network create --driver bridge fakecam # запустим приложение bodypix docker run -d \ --name=bodypix \ --network=fakecam \ --gpus=all --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ bodypix # запустим камеру, учтя то, что нам нужно пройтись по видеоустройствам, и то, # что пользователь и группа должны иметь разрешение на доступ к ним # возможно, придётся воспользоваться командой вида `sudo groupadd $USER video` docker run -d \ --name=fakecam \ --network=fakecam \ -p 8080:8080 \ -u "$$(id -u):$$(getent group video | cut -d: -f3)" \ $$(find /dev -name 'video*' -printf "--device %p ") \ fakecam 

Осталось учесть лишь то, что это надо запустить до открытия камеры при работе с любыми приложениями. А в Zoom или где-то ещё нужно выбрать камеру v4l2loopback / /dev/video20 .

Итоги

Вот клип, который демонстрирует результаты моей работы.

Your browser does not support HTML5 video.

Результат замены фона

Видите! Я звоню с Сокола Тысячелетия, пользуясь опенсорсным стеком технологий для работы с камерой!

То, что у меня получилось, мне очень понравилось. И я, определённо, всем этим воспользуюсь на следующей видеоконференции.

Уважаемые читатели! Планируете ли вы поменять то, что видно при видеозвонках у вас за спиной, на что-то другое?

  • Блог компании RUVDS.com
  • Python
  • Программирование
  • Видеоконференцсвязь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *