How can I choose the Zoom virtual background feature using Ubuntu?

Edit: Zoom 5.8.0 supports virtual background without greenscreen!

As of writing this, Zoom does not support person/face-detection based virtual background in their Linux-version software. The solution below helps achieve the similar effect, and since it creates a virtual webcam, you can most likely use this solution for any apps that use a webcam, for example, Microsoft Teams. These instructions were originally posted by @BenTheElder, and IMO is a super fun and neat project, especially if you are into computer vision. https://elder.dev/posts/open-source-virtual-background/

What the code is doing essentially is grabbing image frames with Python and OpenCV. For each image, the face/body is cropped using TensorFlow.js Bodypix, and merged with the specified background. The modified images are then used to create the video feed via pyfakewebcam and v4l2loopback. I have tested the below instructions with Ubuntu 20.04, code used is archived in https://github.com/pangyuteng/virtual-background

branch master requires GPU, while branch cpu-friendly uses only CPU.

EDIT: after getting the below to work, I also found out there is a more refined version by fangfufu https://github.com/fangfufu/Linux-Fake-Background-Webcam which is also based on @BenTheElder's solution.

--

  • install docker (https://docs.docker.com/engine/install/ubuntu)

  • (for those using GPU) install nvidia-docker (https://github.com/NVIDIA/nvidia-docker)

  • (for those using GPU) test nvidia-docker is installed properly

docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
  • install and setup virtual video device as "/dev/video20", and assuming the actual video device is "/dev/video0"
sudo apt-get upgrade -y
sudo apt-get install -y v4l2loopback-dkms v4l2loopback-utils

sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback devices=1 video_nr=20 card_label="v4l2loopback" exclusive_caps=1
  • add root to group video (likely unecessary...)
sudo usermod -aG video root
cat /etc/group | grep video
  • clone repo
git clone [email protected]:pangyuteng/virtual-background.git vbkgd
cd vbkgd
  • (for those using CPU) switch branch.
git checkout cpu-friendly
  • build containers
docker-compose build
  • (optional) adjust camera resolution and fps in docker-compose.yml
  • start the virtual camera via docker-compose (assuming physical video device at /dev/video0, virtual video device at /dev/video20 and gpu at /dev/nvidia0)
docker-compose up
  • launch zoom/teams/slack..., select v4l2loopback as webcam

  • live swap background by replacing file data/background.jpg - refresh rate hard coded at 3 seconds.


You have to go to: Settings > General > View Advanced Features > (the web site will open. log in) > Settings > In Meeting (advanced) > Enable Virtual Background.

For some reason, it is disabled by default in Ubuntu Zoom Client, and behave differently.

enter image description here

Then. in the Linux Client go to Settings and you will see a new submenu: Virtual Background

enter image description here

In previous versions (<5) a green background was required, it is no longer necessary and only a single colour background is needed, preferably green.

Hope this help.


As others have pointed out already, virtual background without green screen is not yet supported by zoom for Linux. There is a feature request for this in the zoom developer forum. Maybe supporting it can help making this feature a priority:

https://devforum.zoom.us/t/request-implement-virtual-backgrounds-in-linux/41558


According to the Zoom website, you need to have a physical green screen to have virtual backgrounds on Ubuntu:

Linux Requirements

  • Zoom Desktop Client for Linux, version 2.0.91373.0502 or higher
  • Dual Core 2Ghz or Higher (i5/i7 or AMD equivalent) processor
  • A physical green screen

Zoom 5.7.6 (31792.0820) (August 18, 2021) finally supports virtual background without a green screen on Linux.