UbuntuでZoomのバーチャル背景を使う方法

# （追記）公式が対応しました
[Zoom5.7.6 (31792.0820)](https://support.zoom.us/hc/ja/articles/205759689-Linux-%E5%90%91%E3%81%91%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%8E%E3%83%BC%E3%83%88#:~:text=%E3%82%B0%E3%83%AA%E3%83%BC%E3%83%B3%E3%83%90%E3%83%83%E3%82%AF%E3%81%AA%E3%81%97%E3%81%A7%E3%81%AE%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E8%83%8C%E6%99%AF%E7%94%BB%E5%83%8F%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%20%2D%20Linux)で無事にグリーンバックなしのバーチャル背景がサポートされました！
# はじめに
~~ver.5.8.3 (145)現在、Linux版Zoomはグリーンバックがないとバーチャル背景が使えません。~~
※[Linux版の要件](https://support.zoom.us/hc/ja/articles/360043484511#:~:text=%E3%82%B0%E3%83%AA%E3%83%BC%E3%83%B3%E3%83%90%E3%83%83%E3%82%AF%E3%81%AA%E3%81%97%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E3%81%BF)にCPU4コア以上があるので、記事を書いた当時私のマシンではver.5.8.3なのに使えなかったようです。
![Screenshot from 2021-11-14 19-08-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857499/6e3e6f7e-04c4-034a-e12d-501d5a92751f.png)
だったらリアルタイムでWebカメラの映像から人物を認識して、人物のまわりに背景を仕込んでWeb会議アプリに渡そう、と考えた猛者がいるようで[Linux-Fake-Background-Webcam](https://github.com/fangfufu/Linux-Fake-Background-Webcam)というpythonアプリがGitHubに公開されています。READMEにはインストール手順が丁寧に書かれていますが、Ubuntuでインストールする手順について日本語の情報が見当たらなかったので記事に残します。

# 環境
* OS:Ubuntu 21.10
* WebCamera:Logitech, Inc. HD Webcam C615
* Zoom:ver.5.8.3 (145)
* Python:ver.3.9.7
* pip:ver.20.3.4

# v4l2loopbackインストール
Linux-Fake-Background-Webcamは仮想デバイスのカーネルモジュールとして公開されている[v4l2loopback](https://github.com/umlaeute/v4l2loopback)を使用します。aptにパッケージがあるようですがLinux-Fake-Background-WebcamのREADMEに以下の記載があるので念の為ソースからコンパイルしました。

*If you are using Ubuntu 18.04, and if you want to use v4l2loopback, please compile v4l2loopback from the source.
（環境がUbuntu 18.04でv4l2loopbackを使うならソースからコンパイルしてね）*

[補足1]
Ubuntuでv4l2loopbackが動かない問題の対応として今は[Akvcam](https://github.com/webcamoid/akvcam)を使う選択肢もあるようです。とはいえ元々v4l2loopbackを想定して作られたアプリなので、まずはv4l2loopbackにトライしました。
[補足2]
v4l2loopbackはUEFIのSecure bootが有効だと動かないそうなので、事前に無効化が必要です。

```
# 現状のビデオデバイスを確認
ls /dev/video*

# カーネルヘッダーのインストール
sudo apt install dkms linux-headers-`uname -r`

# v4l2loopbackのリポジトリをclone
git clone https://github.com/umlaeute/v4l2loopback.git

# ディレクトリの移動
cd v4l2loopback

# DKMSでモジュールをインストール
sudo cp -R . /usr/src/v4l2loopback-1.1
sudo dkms add -m v4l2loopback -v 1.1
sudo dkms build -m v4l2loopback -v 1.1
sudo dkms install -m v4l2loopback -v 1.1

# video2でv4l2loopbackをロード
sudo modprobe v4l2loopback devices=1 exclusive_caps=1 video_nr=2 card_label="fake-cam"

# video2ができていることを確認
ls /dev/video*
```


# python環境の確認
python3と19.3以上のpipが必要です。

```
# python3が入っていることを確認
python3 --version

# python3入っていなかった場合インストール
sudo apt install python3

# 19.3以上のpipが入っていることを確認
pip --version

# pipが入っていなかった場合インストール
sudo apt install pip
```
# Linux-Fake-Background-Webcamインストール
リポジトリをクローンしてインストールするだけ。

```
# Linux-Fake-Background-Webcamのリポジトリをclone
git clone https://github.com/fangfufu/Linux-Fake-Background-Webcam.git

# ディレクトリの移動
cd Linux-Fake-Background-Webcam

# root権限でinstall.shの実行
sudo ./install.sh
```

# Linux-Fake-Background-WebcamをZoomで使う
Linux-Fake-Background-Webcam配下のfake.pyを実行して、Zoomのカメラでfake-camを選択するだけです。

```
# ディレクトリの移動
cd Linux-Fake-Background-Webcam

# background.jpgを背景画像に使ってLinux-Fake-Background-Webcamを実行
python3 fake.py -b background.jpg

# CTRL+Cで一時停止、CTRL+\で終了です。
```
![Screenshot from 2021-11-14 21-07-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857499/d4357d86-45fc-0abd-5d16-ade8e165b0b2.png)
※画像はリポジトリで提供されているbackground.jpgを使っています。
※カメラをオンにして、人物を映さずにスクリーンショットを撮っています。

# v4l2loopbackのロード設定
このままだと再起動する度に手動でmodprobeする必要があるので、起動時に呼び出してくれるよう設定が必要です。Linux-Fake-Background-Webcamのリポジトリではご丁寧に設定用シェルスクリプトを用意してくれているのでroot権限で実行すれば完了します。

```
# ディレクトリの移動
cd Linux-Fake-Background-Webcam

# root権限でv4l2loopback-install.shの実行
sudo ./v4l2loopback-install.sh
```

# 最後に
pythonでリアルタイムに処理をするのでCPU負荷が高くなるのは気になるところです。グリーンバックなしのバーチャル背景が公式で実装されることに期待です。

# 参考サイト
* [Teams / Webex 対応！ Linux でバーチャル背景を使う](https://eng-blog.iij.ad.jp/archives/7345)