ブログ@HoloLabInc

株式会社ホロラボのブログです

AIとAzure Kinectでどこでもグリーンバックを実現する「Virtual Stage」を試してみた

コロナ禍でイベントがバーチャル化するなか、いままでのオフラインイベントのようなステージ上での講演のような動画を作成できる「Virtual Stage」が発表されました。なお、リアルタイムではなく録画データを使用した後処理になります。

www.youtube.com

オープンソースなので機材を準備すれば誰でも同じ動画を作成することがきでます。

github.com

実際に作ってみた動画がこちらです

www.youtube.com

撮影環境はこのようになっています。真っ白な壁に向かってAzure Kinectで撮影します。

f:id:kaorun55:20200601001417j:plain

環境

環境はこのようになっています(画像はGitHubより引用) PCにAzure Kinectを2台接続しています(なお、Azure Kinectは1台でも最後まで動作します)

f:id:kaorun55:20200601001525p:plain

この環境で「Speaker.Recorder」を起動すると、Azure Kinectの録画(カラー、深度)と、PowerPointのスライド録画と音声が、それぞれ記録されます。

f:id:kaorun55:20200601001611p:plain

撮影したAzure Kinectの録画データを「Background Matting」というソフトウェアを使用して背景の除去を行います。

f:id:kaorun55:20200601001628p:plain

「Background Matting」は下記をベースに、Azure Kinectの深度データを使って除去の精度を向上させているようです。

grail.cs.washington.edu

撮影手順

撮影の手順は大きく下記のようになります。

流れ

準備

  • ハードウェア
    • NVIDIAのGPUが搭載されたPC
      • Azure Kinect BodyTracking SDKを使用しているためNVIDIAのGPU(CUDA)が必要です
    • Azure Kinect
  • 各種ソフトウェアのインストール
    • 「Speaker.Recorder」のビルドに必要なソフトウェアの設定
    • 「Background Matting」の実行に必要なソフトウェアの設定

撮影

  • 「Speaker.Recorder」で講演を記録します
  • 「Background Matting」で講演者の背景を除去した動画を作成します
  • 背景が除去された動画を使用して、講演動画を作成します

準備

GitHubからプロジェクトをダウンロードします。

github.com

Speaker.Recorder

「Speaker.Recorder.sln」を開き「Speaker.Recorder」をスタートアッププロジェクトに設定してビルドします。

f:id:kaorun55:20200601002716p:plain

ビルド環境は下記になります。

  • Windows 10 64 ビット版 version 1903 以降
  • Windows 10 SDK 10.0.18362
  • Visual Studio 2019 16.5.5

アプリケーションの実行には下記が必要です

Background Matting

Background MattingはPythonのスクリプトです。ここでAzure Kiectの録画データを使って背景除去を行います。

環境構築はちょっと手間がかかります。

  • Windows 10 x64 と NVIDIA のグラフィックカード
  • NVIDIA CUDA 10.0 と NVIDIA CudNN をインストールする(CudNNはcudnn64_7.dllを「BackgroundMatting」フォルダにコピーする)
  • Conda 環境のインストール

    • minicondaをインストールする
    • PowerShellでBackgroundMattingフォルダへ移動し初期化と環境設定を行う

    conda init exit conda env create -f .\environment.yaml

  • OpenCV 4.3.0

    • OpenCV 4.3.0 をダウンロードする
    • 3rdparty/opencv フォルダに展開する(訳注: ほかの環境でも利用する場合はCドライブ直下などでパスを通した方がよい)
    • [ROOT]\3rdparty\opencv\build\x64\vc15\bin にパスを通す
  • FFMPEG 4.2.2
    • ffmpeg 4.2.2 をダウンロードする
    • 3rdparty/ffmpeg-4.2.2 フォルダに展開する(訳注: ほかの環境でも利用する場合はCドライブ直下などでパスを通した方がよい)
    • [ROOT]\3rdparty\ffmpeg-4.2.2\bin にパスを通す
  • Visual C++ Redistributable
  • 推論モデル
    • 推論モデル をダウンロードする
    • 「BackgroundMatting」の Models\ フォルダに配置する
  • Azure Kinect SDK 1.4.0
    • ダウンロード してインストールする
    • 環境変数 PATHC:\Program Files\Azure Kinect SDK v1.4.0\sdk\windows-desktop\amd64\release\bin フォルダを追加する
  • Azure Kinect Body Tracking SDK 1.0.1
    • ダウンロード してインストールする
    • 環境変数 PATHC:\Program Files\Azure Kinect Body Tracking SDK\sdk\windows-desktop\amd64\release\bin フォルダを追加する

撮影

最初に「Speaker.Recorder」で講演の記録を行います。

「Speaker.Recorder」を実行すると、PowerPointの選択(必要な場合)、背景の記録、撮影、後処理の順で進んでいきます。

講演に使用するPowerPointファイルを指定すると、スライドと音声が記録された動画もAzure Kinectの録画ファイルと一緒に生成されます。

f:id:kaorun55:20200601003721p:plain

PowerPointファイルを開いた時にこのようなエラーがよく発生します。アプリを再起動して直ることもありますが、場合によってはスライドを作り直す必要もあるかもしれません。

f:id:kaorun55:20200601003739p:plain

録画が完了するとドキュメントフォルダの「Recorded Sessions」に記録された動画が保存されます。

  • kinect0.mkv: Azure Kinectの録画データ(mkvファイル)
  • presentation.mp4: スライドと音声の動画
  • slides.pptx: 実際のスライドファイル

f:id:kaorun55:20200601004101p:plain

続いて「Background Matting」を実行します。「BackgroundMatting」フォルダの「run.ps1」が実行用のスクリプトです。

これを開くと下記のようになっています。--input および --outputを指定します。 全体を変換する場合 --startおよび--durationは削除します(この時「--fixed_threshold "640," ’」の最後の「’」は削除します)。

conda activate bgmatting
$Env:CUDA_VISIBLE_DEVICES=0
python .\bg_matting.py `
  --name "Speaker" `
  --input D:\Speaker\ `
  --output_dir D:\Speaker\output\ `
  --fixed_threshold "640," `
  --start 34 `
  --duration 234
conda deactivate

スクリプトが正常に終了すると --output で指定したフォルダに背景除去された動画が生成されます。

f:id:kaorun55:20200601005937p:plain

  • kinect0_color_Speaker.mp4: オリジナル動画
  • kinect0_matte_Speaker.mp4: 背景が除去された動画
  • kinect0_out_Speaker.mp4: マスク動画

編集

kinect0_matte_Speaker.mp4を動画編集ツールなどでグリーンバック動画として利用します。

完成した動画がこちら。背景やスライドの重ね合わせについては、いろいろアイデアがでそうですね。

www.youtube.com

参考

元の動画を並べたもの

www.youtube.com

背景除去を行った動画

www.youtube.com

編集後1

www.youtube.com

編集後2

www.youtube.com