Hintergrundbilder in Videokonferenzen

Fr, 26. März 2021, Lioh Möller

Wer kennt sie nicht, die Hintergrundbilder in Videokonferenzen? Von blühenden Wiesen über Palmenstrände bis hin zur Regenwaldkulisse. Unter Linux bieten nur wenige Lösungen die Möglichkeit zur Definition eines Hintergrundbildes. Eine Ausnahme stellt Jitsi dar, für welches in der aktuellen Version eine entsprechende Funktion nachgerüstet wurde.

Bildquelle: Jitsi Newsletter März 2021

Wer mit Anwendungen wie Teams und Co. zu kämpfen hat und sich dennoch eine ähnliche Funktion wünscht, der sollte einen Blick auf das Linux-Fake-Background-Webcam Projekt werfen.

Um den Eingabestrom der Webcam in Echtzeit zu manipulieren, kommt ein virtuelles v4l2loopback Device zum Einsatz.

Im Folgenden wird die Installation der Software unter Debian GNU/Linux 10 beschrieben.

Installiere zunächst das v4l2loopback Kernel Modul im DKMS-Format, sodass bei einer Kernel-Aktualisierung ein automatischer Rebuild des Modules erfolgt:

sudo apt install v4l2loopback-dkms

Es empfiehlt sich folgende Modulparameter in der Datei /etc/modprobe.d/v4l2loopback.conf anzugeben:

sudo vi /etc/modprobe.d/v4l2loopback.conf

options v4l2loopback devices=1 exclusive_caps=1 video_nr=2 card_label="v4l2loopback"

Die Definition exclusive_caps wird von einigen Anwendungen wie Zoom oder Chrome vorausgesetzt. video_nr gibt die /dev/video* Device-Node der virtuelle v4l2loopback Webcam an.

Im Folgenden wird davon ausgegangen, dass es sich bei /dev/video2 um die virtuelle Webcam und bei /dev/video0 um die physikalische Webcam handelt.

Damit das Kernelmodul beim Systemstart automatisch geladen wird, kann eine Datei /etc/modules-load.d/v4l2loopback.conf erstellt werden:

sudo vim /etc/modules-load.d/v4l2loopback.conf

v4l2loopback

Bei Linux-Fake-Background-Webcam kommt python3 und node.js 12 zum Einsatz, welches wie folgt installiert werden kann:

sudo apt-get install python3-pip git
sudo curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
sudo apt-get install -y nodejs

Daraufhin kann das Git-Repository der Fakecam gecloned werden und die Installation als unprivilegierter Benutzer gestartet werden:

git clone https://github.com/fangfufu/Linux-Fake-Background-Webcam.git
cd Linux-Fake-Background-Webcam
./install

Zum Start kann ein Script /usr/local/bin/fakecam_start.sh erstellt und ausführbar gemacht werden:

sudo touch /usr/local/bin/fakecam_start.sh
sudo chmod +x sudo /usr/local/bin/fakecam_start.sh
sudo vi /usr/local/bin/fakecam_start.sh

#!/bin/bash
cd /Pfad/zu/Linux-Fake-Background-Webcam/bodypix/ && node app.js > /dev/null 2>&1 &
sleep 5
cd /Pfad/zu/Linux-Fake-Background-Webcam/fakecam/ &&  python3 ./fake.py --no-background  --no-foreground  > /dev/null 2>&1 &

Wobei /Pfad/zu/Linux-Fake-Background-Webcam/ durch den Pfad zum Git-Checkout aus dem vorhergehenden Schritt ersetzt werden muss.

Der Aufruf erfolgt als regulärer Benutzer durch die Eingabe von fakecam_start.sh

Alternativ oder zum Testen können die oben aufgeführten Befehle auch in zwei unterschiedlichen Terminalconsolen ausgeführt werden.

fake.py --help zeigt eine Hilfe an, in der die verfügbaren Parameter im Detail erklärt werden. Das zuvor erstellte Script startet die fakecam lediglich mit einem verschwommenen Hintergrund. Es besteht die Möglichkeit eigene Hintergrundbilder anzugeben, welche sich standardmässig im JPG-Format in dem zuvor erstellten Ordner /Pfad/zu/Linux-Fake-Background-Webcam/fakecam/ befinden müssen.

Auch einen Hologramm-Effekt bringt die Anwendung mit und Vordergrundbilder werden ebenfalls unterstützt.

Kontrollieren lässt sich die Funktion der Fake-Webcam mithilfe des ffplay Kommandos unter Angabe des virtuellen Webcam-Devices.

ffplay /dev/video2

Zum Beenden der Anwendung kann ein weiteres Script erstellt werden und ausführbar gemacht werden:

sudo touch /usr/local/bin/fakecam_stop.sh
sudo chmod +x sudo /usr/local/bin/fakecam_stop.sh
sudo vi /usr/local/bin/fakecam_stop.sh

#!/bin/bash
ps aux | grep "python3 ./fake.py --no-background --no-foreground" | grep -v "grep python3 ./fake.py --no-background --no-foreground" | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1
ps aux | grep "node app.js" | grep -v "grep node app.js" | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1

Dabei müssen die Parameter von fake.py entsprechend an die des Aufrufs in dem fakecam_start.sh Script angepasst werden.

Standardmässig nutzt das Projekt die CPU.TensorFlow auf NVIDIA Grafikkarten wird ebenfalls unterstützt.

In unseren Tests konnten wir die Anwendung mit cuda_10.0.130 und cudnn-10.0 erfolgreich nutzen. Dazu musste allerdings die Umgebungsvariable TF_FORCE_GPU_ALLOW_GROWTH=true gesetzt werden:

cd /Pfad/zu/Linux-Fake-Background-Webcam/bodypix/
npm install dotenv

In der Datei app.js folgen des require in der ersten Zeile einfügen:

vi app.js
require('dotenv').config(); 

Env Datei erstellen:
vi .env
TF_FORCE_GPU_ALLOW_GROWTH=true

Durch die Verwendung von TensorFlow konnte die CPU Last bei der Nutzung der Fakecam deutlich reduziert werden.

In Videokonferenzen kann nach erfolgreicher Einrichtung und dem Start von fakecam_start.sh die virtuelle Kamera als Eingabegerät ausgewählt werden.

Grundsätzlich haben wir unser Projekt zur Nutzung von Hintergrundbildern in Videokonferenzen als sehr lehrreich empfunden. Der Blur Effekt ist nützlich, Hintergrundbilder sind nach unserer Einschätzung eher Spielerei. Wer aber immer schonmal in einer Videokonferenz den amerikanischen Präsidenten oder Darth Vader spielen wollte, der findet mit der Fakecam ein tolles Bastelprojekt zum Wochenende. Ansonsten macht eine natürliche Kulisse in einem aufgeräumten Home-Office natürlich immer noch am meisten her.