Study!

新しく覚えたことのメモ書き

オンラインMTGでアドベンチャーゲーム風のUIで会話する方法

成果物

www.youtube.com

前段

オンラインMTGに皆さん飽きてきたかと思います。 私も最初は背景を変えたりアバターになったり色々したのですが、それも飽きてしまいました。 というわけで今回はひと手間加えてアドベンチャーゲーム風のUIで会話する方法をご紹介したいと思います。 これを改良すればなんか素敵なアプリケーションもできるかもしれないので、ぜひ皆さんご検討くださいませ。

アドベンチャーゲームのヒロインになろう!

アドベンチャーゲーム(ADV)とは、エロゲ、ギャルゲ、乙女ゲーなどのコンピュータゲームのいちジャンルです。 具体的には以下のように構成されています。

f:id:scapedog:20200415001429j:plain

出展: Nintendo Switch版「CLANNAD」が2019年春に配信決定。タッチスクリーン操作&5.1chサラウンドに対応し,Dangopediaも収録(4Gamer.net)

要素としては、

  • 背景
  • キャラクター立ち絵
  • セリフウィンドウ
  • セリフ

があり、これらを構築すればADVの登場人物になることができます。

アプローチの検討

今回は実写の人間をキャラクターと見立て、背景素材を挿入させ、その上にセリフウインドウ、セリフと乗せることにしましょう。 そのためには

  • Webカメラから取得した映像から人物を切り出す
  • セリフをリアルタイムに取得する

ことが必要になってきます。 前者に関しては

という方法があり、今回は一番簡便なZoomのバーチャル背景+OBSのクロマキー処理を利用します。 ちなみに、自分でバーチャル背景機能相当のものを実装する場合、Azule Kinectなどの深度センサーを活用すると良いでしょう。

後者に関しては

という方法があり、今回はGoogle Speech to Textを使います。

データの流れ

ざっくり以下のようになる

f:id:scapedog:20200415003849p:plain

OBSのVirtualCamがMacだと使えないのでCamTwistを利用する 基本的にこの構造であとはパパッとやればなんとかなる。

各実装

Google Speech to Textで音声をテキストにする

こちらに関してはStackOverflowなどの記事のほうが詳しいので割愛する というか音声ストリームの変換はサンプルがあるので、そのままパクる https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/speech/microphone/transcribe_streaming_mic.py

OBSのテキストを自動更新する

https://github.com/Palakis/obs-websockethttps://github.com/Elektordi/obs-websocket-py を使う 使い方はWebSocketで繋げてcallするだけ

from obswebsocket import obsws, requests
ws = obsws('localhost', 4444)
ws.connect()
# body プロパティに message を入れて更新
ws.call(requests.SetTextFreetype2Properties(*['body', None, None, None, None, None, 'Hiragino Kaku Gothic Pro', 0, 48, 'W6', None, None, None, message, None, None]))

結び

というわけで、雑実装でADVのキャラクターになってみた。 もうちょい時間を使って実装すればまともなADV UIが完成すると思われるので、皆さんにもやってほしい。