フレクトのクラウドblog re:newal

http://blog.flect.co.jp/cloud/からさらに引っ越しています

Amazon Chime SDKのアプリケーションにBGM/SE機能を追加する

こんにちは。研究開発室の岡田です。

前回の記事では、Amazon Chime SDK for JS1のVoice Focusを用いてノイズ除去を行う方法をご紹介しました(参照)。今回は、さらに発展させてノイズ除去をした後、BGMやSEを追加する方法をご紹介します。これまでに何度かご紹介してきた仮想背景の音声版といったところでしょうか。

作るものは下の動画のようなものになります。大雨の中で講義をしている動画に対して、雨の音の代わりに宇宙っぽいBGMを追加しています(00:16-)。併せて背景を変えてあげれば、大雨の中にいた人があっという間に宇宙で話をしている状況に変わります。


Amazon Chime SDK for Javascript, noise suppression and sound mixing test

なお、今回はAmazon Chime SDKのノイズ除去機能であるVoice Focusの詳細については説明を行いません。前回の記事をご参照ください(参照)。


  1. Amazon Chime SDK for JSはAmazonが提供するビデオ会議システムをWebアプリに組み込むためのSDK

続きを読む

AR Remote Instructions base on ARKit

研究開発室の馮 志聖(マイク)です。

Content

  • Background
  • Abstract
  • Twilio version
  • ARWorldMap version
  • Real-time DB version
  • Conclusion
  • Other
  • Reference

Background

The coronavirus is ruthlessly eroding human lives, and many people work from home for safety reasons.

Remote work has become very common, among which video chat tools have become a popular focus. However, video chat tools have limitations and cannot be used for certain types of tasks, such as the inability to effectively point out the location when performing maintenance tasks.

Our goal is to improve this limitation and make remote work more convenient, so we will develop an AR Remote Instructions program.

続きを読む

VirtualGLでクラウドGPUリモート3Dワークステーションを作る

みなさんこんにちは。先端技術室の佐藤です。 今回はクラウドGPULinuxリモート3Dワークステーションを作るお話を紹介したいと思います。

(手順だけが知りたい方は、こちら。紆余曲折にお付き合いいただける方は、そのままお読みください。)

話の経緯

みなさんは、ある日業務要件で「3Dビジュアルワークステーション」が必要になったら、どうやって調達しますか?筆者が昨年遭遇したのはそのような状況でした。大きなCADデータが届き、確認する必要が生じたのです。身の周りには残念ながら、ゲーミングPCの類はありませんでした。会社のラップトップで開こうとした同僚からは「全然開けない。熱くて、ファンの音もすごくて、燃えそう。」という悲鳴が聞こえてきます。

こんな時に便利なのが「Virtual Workstation(以下、仮想ワークステーション)」で、AWSなどのクラウドベンダから各種提供されています。クラウド側でGPUを接続したインスタンスを起動し、仮想デスクトップで接続するものです。画像がネットワーク越しになりますのでゲームなどの動きの激しい用途には向きませんが、動きの少ない緻密な3D表示が求められる用途には向いています。今回もこれで行けそうでした。

しかしマニュアルを読み込んでいた筆者は、ふと疑問に思うことがありました。インスタンス価格はLinuxの方が安い(WindowsはOSの利用料金が上乗せされるため)が、そのLinuxの仮想ワークステーションにどうやったら画面をつなげるのか、どこにも書いてないのです。Google Cloudのマニュアルにかろうじて書いてありましたが、有償の仮想デスクトップソフトを利用するものであり、別途お金がかかります。できるだけ安く済ませる方法はないものでしょうか。

VirtualGLを知る

方々ググって見つけたのが、VirtualGLでした。しかしこれが、難しい。いえ、基本的に、仮想ワークステーションは難しいのです。普通は画面に出力する画像(フレームバッファデータ)を回収し、ネットワーク経由で仮想デスクトップクライアントまで送信しているのです。GPUベンダが特別なドライバを用意してしつらえるもので、野良環境のLinuxで組み上げるには相当な知識が求められます。

ギブアップしてWindowsで済ませようと思った筆者でしたが、一方で、Linuxでできたら、おもしろいだろうなぁ、とも思え、VirtualGLの研究を続けていました。

VirtualGLの原理はこうです。実行ファイルが起動する時に、Linux OSが提供する特別な環境変数を設定し、OpenGLの描画命令(システムコール呼び出し)をVirtualGLのライブラリにフックします。フックした先では物理スクリーン(通常は$DISPLAY=:0)に向けてこの命令を実行し、描画結果画像を回収します。そして仮想デスクトップ側のスクリーン($DISPLAY=:1など)に向けてこの画像を送信します。こんな曲芸のような仕組みがうまくいくものなのでしょうか?しかしVirtualGL自体は開発が継続しており、それなりに評価されているように見えます。

物理スクリーンはどこに?

ところで、クラウドインスタンスに物理スクリーンはあるのでしょうか?もちろん、ありません。一方で、例えばVirtualBoxなどの仮想化ソフトにUbuntu Linuxなどをインストールし、開いた画面(=仮想化ソフトが用意した仮想ハードウェア)には、物理スクリーンがあります。先ほどの話ですと、物理スクリーンがないと、VirtualGLの仕掛けは成り立ちませんので、クラウドインスタンスでは、VirtualGLは実行できないことになります。

これには本当に困ったのですが、VirtualGLやXOrgに関する巷の文書を読み漁り、また手元環境を方々観察していると、徐々に解決の糸口が見えてきました。

筆者は今回に限らずクラウドインスタンスを仮想デスクトップで利用しているのですが、Ubuntu 18.04の/var/logにあるログを見ると、Xorg.0.log、すなわち物理スクリーンに対応するログが出ており、エラー終了していました。他のログと照らし合わせると、起動時に「LXDE lightDM起動 -> Xorg物理スクリーン初期化 -> デバイスが見つからず終了」となっているようです。それならば、GPUに対応するドライバをインストールすれば、クラウドインスタンスでも物理スクリーンが成立するのではないか?試してみたところ、これがうまく行きました。

VirtualGLが動いた!

方々調査の末にたどり着いた手順の概要は、以下のようなものです。

  1. GPU付きのインスタンスを作成する。OSはUbuntu18.04LTS。
  2. LXDEと関連ライブラリをインストール。
  3. GPUドライバをインストール。X設定スクリプトの実行。
  4. VirtualGLのインストールと設定。
  5. VNCをインストール

以下、それぞれの手順をみていきましょう。

1. GPU付きのインスタンスを作成する

筆者が試したのはGoogle CloudのCloud GPUです。小さなインスタンスにもGPUを付けることができ、安価に試せるので私はよく使っています。GPUは各種ありますが、一番安いNVIDIA Tesla T4を選びました。米国リージョンなら時間あたり0.35米ドル(執筆時)。1日8時間でも約300円です。

2. LXDEと関連ライブラリをインストール

sudo apt install \
  lxde  \
  build-essential \
  pkg-config \
  libglvnd-dev \
  libglu1-mesa

3. GPUドライバをインストール。X設定スクリプトの実行

Google Cloudでは、NVIDIA用のドライバが以下で公開されていますので、gsutilコマンドでローカルにコピーします(バージョンは執筆時点のもの)。

gsutil cp gs://nvidia-drivers-us-public/GRID/GRID12.0/NVIDIA-Linux-x86_64-460.32.03-grid.run .

内容も確認しましょう。

sha256sum ./NVIDIA-Linux-x86_64-460.32.03-grid.run
89d734014555f5cafc606a228d02388c556942b7a56d08aa08fbec4e55afbb6a  ./NVIDIA-Linux-x86_64-460.32.03-grid.run
gsutil cat gs://nvidia-drivers-us-public/GRID/GRID12.0/NVIDIA-Linux-x86_64-460.32.03-grid.run.sha256
89d734014555f5cafc606a228d02388c556942b7a56d08aa08fbec4e55afbb6a NVIDIA-Linux-x86_64-460.32.03-grid.run

sudo bash ./NVIDIA-Linux-x86_64-460.32.03-grid.run

nvidia-xconfig

4. VirtualGLのインストールと設定

wget -O virtualgl_2.6.5_amd64.deb https://sourceforge.net/projects/virtualgl/files/2.6.5/virtualgl_2.6.5_amd64.deb/download

sudo dpkg -i ./virtualgl_2.6.5_amd64.deb
apt install -f

sudo vglserver_config

1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit

Choose:
1

Restrict 3D X server access to vglusers group (recommended)?
[Y/n]
n

Restrict framebuffer device access to vglusers group (recommended)?
[Y/n]
n

Disable XTEST extension (recommended)?
[Y/n]
Y

...

1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit

Choose:
X

ここまできたら、リブートします。

5. VNCをインストール

sudo apt install tigervnc-standalone-server
vncserver
(パスワードを設定)
vncserver -kill :1

echo "vglrun startlxde" > ~/.vnc/xstartup
chmod 755 ~/.vnc/xstartup

vnvserver

つないでみる

tivervnc-viewerをインストールしてつないでみましょう。Firefoxを起動してabout:supportを確認すると、「WebGL 2 Driver Renderer: NVIDIA Corporation -- Tesla T4」が確認できました。WebGLのデモページで動作を確認してみると、CPUだけでは決してなし得ないスピードでオブジェクトが動きます。(とは言え、画像がネットワーク越しなので限界はありますが。)

f:id:masashi-sato-flect:20210219140234j:plain

クラウドの魅力

これで時間払いで利用できる3Dワークステーションが手に入りました。魅力はなんと言っても、初期投資がなく、単価もおそらく最低であることです。どんどん活用していきたいと思います。

Amazon Chime SDKで音声からノイズを除去する

はじめに

こんにちは。研究開発室の岡田です。

前回の記事では、Amazon Chime SDK for JS1のVideo Processing APIを使い映像を加工して仮想背景を実現する方法をご紹介しました(参照)。今回は、音声を加工するについてご紹介します。Amazon Chime SDK for JSは、入力された音声からノイズを除去するVoice Focusという機能を提供しています。今回はこの効果を見ていきたいと思います。

こちらの動画は実際にVoice Focusを適用したものです(00:11~)。かなりきれいにノイズを抑えることができてますね。


Amazon Chime SDK for Javascript, noise suppression function(Voice Focus) test


  1. Amazon Chime SDK for JSはAmazonが提供するビデオ会議システムをWebアプリに組み込むためのSDK

続きを読む

注目のGoogle Meet 仮想背景機能のモデルをAmazon Chime SDKで使ってみた

こんにちは。研究開発室の岡田です。

前回の投稿Amazon Chime SDK*1のVideo Processing APIを使って仮想背景を実現する方法をご紹介しました。この中では人物と背景のセグメンテーションをBody Pixを用いて行っていました。今回は、より軽量といわれているGoogle Meetのモデルを用いて仮想背景機能を実装、評価してみたいと思います。

こんな感じに動きます。 f:id:Wok:20210118215437g:plain

*1:Amazon Chime SDKAmazonが提供するビデオ会議システムをWebアプリに組み込むためのSDK

続きを読む

Amazon Chime SDK の新機能 Video Processing APIを使って仮想背景を作る

こんにちは。研究開発室の岡田です。

12月21日にAmazon Chime SDK JS version 2.3.0がリリースされました。このリリースでは、新機能Video Processing APIが追加されました!

github.com

Video Processing APIはビデオ会議で用いる自分のカメラの画像(フレーム)を転送前に編集するAPIになります。これを使えば、たとえば、カメラの画像に写り込んだ背景をぼかす仮想背景機能が実現できます。 実現方法は、公式のドキュメントを読む限り、以前このブログで紹介したHTMLCanvasを使用して実現していた方法に近いように思われます。とうとう公式実装が来たか!という感じです。ワクワクしますね。

それでは早速Video Processing APIを使って仮想背景を作ってみることにしましょう。

続きを読む