제이슨 AGX Xavierと 모모で背景ぼかしの映像を配信する

5819 단어
最近、 Jetson AGX Xavier 上で Momo を使って、背景ぼかしの映像を配信するのを試してみました.
こんな感じに配信できるようになります.
Momo で背景ぼかしの映像を配信している様子 - YouTube
自分の顔を映すのは嫌だったので、ディスプレイにヒカキンを表示して、それを그물 모양의 물건カメラで撮影して配信しています.
元動画はこちらです: 【昔は好きだったけど今は嫌い】でエゴサしたらメンタル崩壊…【ヒカキンTV】【ツイッター】 - YouTube
ちゃんと背景がぼかされて配信されているのが分かります.
jtopコマンドで確認した 중앙처리기や GPUメモリ使用量はこんな感じになっています.

ちゃんと GPUも使って計算していることが分かります.

構成


今回の構成はこんな風になっています.

활용단어참조の tf-bodypix を使って、実カメラの映像を取り込んで、背景ぼかしした映像に変換し、それを v4l2loopbackという仮想カメラ(仮想ビデオデバイス)に出力しています.
あとは、모모がその仮想カメラのデータを読んで 소라に配信しているだけです.
つまり、今回はほぼコードを書いていません.
tf bodypixに 그물 모양의 물건カメラから読み取る部分も、仮想カメラへ出力する実装も入っていたため、単にいろいろインストールしてコマンドラインから実行するだけでした.

実際に動かすまでの手順


準備


まず 장량류を入れます.これは Jetson 用のインストール方法 があるので、それの通りに入れるだけです.
(インストール方法が変わっている可能性もあるので、最新の情報に関してはドキュメントを参照して下さい)
# apt で入れるパッケージのインストール
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran

# pip3 のインストール
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools==49.6.0 

# 依存ライブラリのインストール
sudo pip3 install -U numpy==1.16.1 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11

# tensorflow のインストール
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 tensorflow
가상적とかを使っても良いです.詳細は上記のドキュメントを見てください.
次に tf bodypixを入れます.
既に 장량류は入っているので不要で、그물 모양의 물건カメラと JSモデルは必要なので、以下のようにインストールします.
sudo pip3 install tf-bodypix[tfjs,webcam]
次に、v4l2loopbackな仮想デバイスを作成するためのパッケージをインストールします.
sudo apt install v4l2loopback-dkms
あとは 모모のパッケージを Momo のリリース からダウンロードして展開して配置しておきます.

修正


tf bodypixは、そのまま利用すると GPUを使ってくれなかったので、ちょっとだけコードを弄る必要があります./usr/local/lib/python3.6/dist-packages/tf_bodypix/cli.py を開いて、以下のように書き換えます.
--- a/cli.py    2020-12-19 20:49:46.398000000 +0900
+++ b/cli.py    2020-12-19 20:49:41.145000000 +0900
@@ -1,3 +1,6 @@
+import tensorflow as tf
+tf.config.experimental.list_physical_devices('GPU')
+
 import argparse
 import logging
 import os
@@ -14,7 +17,6 @@
 # pylint: disable=wrong-import-position
 # flake8: noqa: E402

-import tensorflow as tf
 import numpy as np

 from tf_bodypix.utils.timer import LoggingTimer
詳細は分からないのですが、장량류を先に 수입하다して特定の関数を読んでおくことで、GPUを使うための初期化が正常に走って、GPUが使えるようになります.いろいろ弄ってたら偶然動きました.

実行


まず仮想ビデオデバイスを作成します.今回は /dev/video1 になるようにしましたが、適当に変えても良いです.
sudo modprobe v4l2loopback video_nr=1 card_label=BlurCamera
次に tf bodypixを実行します.
CLI上から、그물 모양의 물건カメラから映像を読んで、背景ぼかしをして、仮想ビデオデバイスに出力するところまで全部出来るので、凄く楽です.
python3 -m tf_bodypix \
    blur-background \
    --internal-resolution 0.5 \
    --source-width 640 \
    --source-height 480 \
    --source-fps 30 \
    --source webcam:0 \
    --background-blur 20 \
    --output /dev/video1 \
    --threshold 0.5
あとはこの仮想ビデオデバイスを入力として、모모で配信するだけです.
tf_bodypixでの出力は 유이프形式で、MJPEGではないため、ハードウェア MJPEGデコーダが使えないことに注意して実行します.
./momo \
  --hw-mjpeg-decoder=false \
  --no-audio-device \
  --video-device=/dev/video1 \
  sora wss://<適切な接続先>/signaling <適切なチャンネル名> \
  --audio=false \
  --role=sendonly
これで配信できます.あとは 소라経由で送られてきた映像をブラウザで見れば、最初の動画のようになります.

感想


모모で背景ぼかしを配信するのは大変だと思ってたのですが、仮想ビデオデバイスを使って、tf bodypixを使えばすごく楽でした(その後 GPUを使ってくれない問題を解決するのは大変でしたが).
모모本体を弄るのではなく、仮想ビデオデバイスを使って解決していく方法は、割と良さそうな気がします.

좋은 웹페이지 즐겨찾기