Motivation

Was ich bei datenschutzfreundlichen Videokonferenz-Tools vermisse, ist die Möglichkeit, den Hintergrund des Webcam-Live-Bildes zu ersetzen, wie z.B. bei Zoom, Teams und anderen kommerziellen Anwendungen.
In Jitsi ist die Funktion zwar mit Status “beta” implementiert, funktioniert aber mehr schlecht als recht, wenn keine ordentliche Hardware-Beschleunigung durch proprietäre Grafiktreiber gewährleistet ist. Denn für die Funktion des Hintergrund-Ersetzens kommt machine learning via TensorFlow-Framework zum Einsatz, welches normalerweise effizient von modernen Grafikkarten-GPUs gestemmt wird. Existiert keine Schnittstelle zur Grafik-Hardware, übernimmt die CPU. Und die kommt mit solchen Berechnungen ganz schön ins Schwitzen. Ganz besonders leistungshungrig ist der Weichzeichenfilter (blurring), welcher bei Jitsi verwendet wird.

Wie cool wäre da eine Universallösung, welche mit Jitsi, BigBlueButton und weiteren Anwendungen funktionieren würde, welche auf die Webcam zugreifen?

Fundstück

Kürzlich bin ich über Benjamin Elders Blog-Artikel “Open Source Virtual Background” gestolpert. Mit Hilfe von OpenCV, dem TensorFlow GPU Backend, pyfakewebcam und v4l2loopback hat er ein fake (webcam) device implementiert, mit Hilfe dessen ein beliebiges Hintergrundbild in das Webcam-Livebild gerechnet werden kann… inklusive einem coolen Star Wars Hologramm-Effekt für das eigene Konterfei.

Benjamins skill level spiegelt sich deutlich in seinem Post wider. Daher ist das Projekt nicht einfach mal schnell mit ein paar Klicks und etwas Copy-Pasta nachgebaut.

Daniel Llewellyn hat sich dem Projekt angenommen, eine GUI programmiert, den gesamten inperformanten JavaScript-Code in Python neu geschrieben, weitere Teile optimiert und in ein Snap gepackt.

Mit ein paar Vorbereitungsschritten, funktioniert die Anwendung ohne viel Gefummel.

Installation

Meine Installationsanleitung bezieht sich auf Fedora. Für die Debian-Welt hat Daniel bereits vorgelegt.

Kernel-Headers

Zuerst sollte das System auf den aktuellen Stand gebracht werden.

sudo dnf update

Anschließend braucht es die Kernel-Headers, damit bei der Installation des v4l-Loopbacks gleich das v4l2loopback Kernel-Modul gebaut wird.

sudo dnf install kernel-headers

Das v4l2loopback Kernel-Modul

Während das Kernel-Modul in der Debian-Welt bereits in den Standard-Repos zu finden ist, sucht man es bei Fedora vergeblich. Zum Glück gibt es bereits ein betreutes COPR-Repo von sentry.

Aktivieren des COPR-Repos:

sudo dnf copr enable sentry/v4l2loopback && sudo dnf install v4l2loopback

Das Kernel-Modul wird gleich gebaut.

Konfiguration

Man erstellt eine Datei /etc/modprobe.d/fakecam.conf für ein paar Tweaks des Kernel-Moduls mit folgendem Inhalt:

options v4l2loopback devices=1 video_nr=20 card_label="fakecam" exclusive_caps=1

Das virtuelle Webcam-Device bekommt hier also den Namen fakecam.

Damit das Kernel-Modul beim Systemstart geladen wird, muss die Datei /etc/modules-load.d/fakecam.conf angelegt und mit folgendem Aufruf befüllt werden:

v4l2loopback

Zum Schluß das Modul neu laden

sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback

oder einfach rebooten.

Installation des fakecam Snaps

Zuguterletzt das fakecam Snap installieren.

Falls der Snap Paketmanager noch nicht installiert ist

sudo dnf install snapd

Dann

sudo snap install fakecam

Anwendung

Über die GUI lässt sich das Fakecam-Loop-Backend elegant konfigurieren.

Um das Device in beliebigen Anwendungen auswählen zu können, muss die Fakecam gestartet sein. Das Videobild wird per Default in der Auflösung 640x480 gestreamt. Wem das zu klein ist, muss per Konsole Hand anlegen. Die Einstellung für die Auflösung fehlt in der GUI leider noch.

fakecam --resolution 1280x720 --background /path/to/your/background.jpg --hologram --mirror

Der Befehl startet das fake-Device mit der Auflösung 1280x720, dem angegebenen Hintergrund, Hologramm-Effekt und gespiegeltem Bild.

Bedenke: Mit HD-Auflösung kriegt eine CPU ordentlich was zu tun! Für ein flüssiges Bewegtbild sollte die Schnittstelle zur GPU der Grafikkarte verfügbar sein (Stichwort: Tensor-Berechnungen). Für AMD-Grafikkarten sieht es da leider schlecht aus. Wer mit nvidia-Grafikkarte und proprietärem Treiber aufwarten kann, darf mir gerne mal berichten, wie flüssig das in HD und höher läuft.