Slide 1

Slide 1 text

XRミーティング 20220817 HoloLens 2 で音声認識を使った リアルタイム翻訳をやってみた試行錯誤 ワンフットシーバス 田中正吾

Slide 2

Slide 2 text

私の話はスライドを後ほど共有します。 話す内容に注力いただいて大丈夫です!

Slide 3

Slide 3 text

田中正吾(たなかせいご) 屋号:ワンフットシーバス 2004年よりフリーランス。以後、FLASH制作を 中心にインタラクティブコンテンツを主に行い現 在に至る。 最近ではWEBフロントエンドをベースにしなが らも、情報とインターフェースが合わさるアプ ローチという視点でIoTやMixed Realityといった 技術も取り入れながら活動しています。

Slide 4

Slide 4 text

HoloLens 2 https://www.microsoft.com/ja-jp/hololens/hardware

Slide 5

Slide 5 text

HoloLens 2 で音声認識を使った DeepL経由リアルタイム翻訳つくりました

Slide 6

Slide 6 text

HoloLens 2 には音声認識機能があり トークを日本語テキストに変換できます 音声認識機能 (インターネット経由) 音声データ マイク入力 テキスト 空間に テキスト表示

Slide 7

Slide 7 text

こんな機能です https://docs.microsoft.com/en-us/dotnet/api/microsoft.mixedreality.toolkit.input.dictationhandler?v iew=mixed-reality-toolkit-unity-2020-dotnet-2.8.01

Slide 8

Slide 8 text

音声認識した日本語を DeepL の翻訳 API を通して 英語に翻訳して表示しています 日本語 音声認識 (インターネット経由) 英語 中継サーバー DeepL API

Slide 9

Slide 9 text

ということで、ひとまず リアルタイム翻訳のデモしてみます

Slide 10

Slide 10 text

いろいろ試行錯誤したことを話します 参考資料・UI の考察・つくりやすくする中継サーバーの話 など

Slide 11

Slide 11 text

音声認識の導入はこちらの記事が とても参考になりました!感謝です! https://bluebirdofoz.hatenablog.com/entry/2021/08/24/080140

Slide 12

Slide 12 text

最近 1 on 1 デモもしてうまく動いたので よりよい UI(使い勝手)の考察

Slide 13

Slide 13 text

翻訳開始は Click と Focus を用意していた

Slide 14

Slide 14 text

MRTK の Touch End と OnClick で 遠近両方で指がクリックしたときに動作

Slide 15

Slide 15 text

Click は録音開始が明確にできる わざわざ押すのでユーザーにやや手間はかかる 不特定多数の方に操作してもらう場合は、操作の説明と慣れが大事

Slide 16

Slide 16 text

Focus の場合

Slide 17

Slide 17 text

MRTK の OnFocusOn で ポインターが触れたときに動作 ホントは「目線がフォーカスしたら発動」を期待したが、手からの操作ポインターが触れたときの操作だった

Slide 18

Slide 18 text

ということで、操作面をデモしてみます

Slide 19

Slide 19 text

会話時などを考えると、より邪魔をしにくい よりよい UI を考えたくなる 以前、目線 Gaze を追う仕組みを使ったことがあるので、目線を合わせる間、翻訳しつづける UI いいかも

Slide 20

Slide 20 text

つくりやすくする中継サーバーの仕掛け

Slide 21

Slide 21 text

いろいろ翻訳 API につなぎたいけど、Unity 側の JSON 処理や HTTP やりとり苦労しがち

Slide 22

Slide 22 text

JsonUtility クラスで JSON 形式に変換できるが ひな形となるクラスを用意する必要がある

Slide 23

Slide 23 text

データが分かっている前提で このようなクラスをつくればよい、が。 構造が違ったりデータが無かったりすると手厳しいエラー。とうぜん違う API では違う指定をする。 Web API にありがちな状態により応答データが変わることに対応しにくかったり柔軟性にやや難。 (いや、もちろんやるとなれば、がんばってつなぐんですけども!)

Slide 24

Slide 24 text

Unity と中継サーバーの連携は固定し汎用化 サーバーが翻訳 API とのつなぎをがんばった サーバーはローコードツール Node-RED を使用し柔軟性が高められた。Unity の変更量をなるべく減らした。 日本語 音声認識 (インターネット経由) 英語 自前 Node-RED DeepL API

Slide 25

Slide 25 text

Node-RED の中身 HoloLens 2 から来た音声認識テキストを DeepL API に http request ノードでつないで 返ってきた結果をシンプルに HoloLens 2 に返答する仕組み

Slide 26

Slide 26 text

DeepL の他に IBM Watson の翻訳 API もつないで 翻訳の性質を試すことができて楽しい ゆくゆくは使用量による課金や翻訳辞書のともなう翻訳もありそうだし設定することは多そう (時間があれば、翻訳 API ごとの簡単な使用感も話してみる)

Slide 27

Slide 27 text

より拡張してみた例 今日はデモしないですが、別件でためしてみた話

Slide 28

Slide 28 text

IoTデバイスへ翻訳済みテキストを 表示するようにもできる M5Stack に MQTT でつないだ例

Slide 29

Slide 29 text

こんなかんじです

Slide 30

Slide 30 text

ダッシュボード にも翻訳済みテキストを 表示するようにもできる 登壇場所から距離があるときや、遠隔でリアルタイム翻訳を体験できる

Slide 31

Slide 31 text

時間があれば話したいハマりポイント めちゃくちゃ個人的なハマり方ですが!

Slide 32

Slide 32 text

音声認識のさまざまなイベントを捉えて 自前のイベントに流すあたりの話

Slide 33

Slide 33 text

イベント指定時にちゃんと Dynamic string を指定 受け手としてつくった関数が Static Parameters と Dynamic string にでてくるまでは親切。 うっかり Static 指定すると予期しない動作(イベント発火するのに引数のデータがないぽい?)に なったのでちゃんと Dynamic string を指定する。あくまで今回の場合はですが。

Slide 34

Slide 34 text

まとめ ➔ 音声認識して翻訳する仕組みはわりとすんなりできてよ かった。 ➔ 翻訳 API いろいろ試すために中継サーバーにつなぎを任 せたら柔軟性を保ちつつ試せた。 ➔ 使っていただくと UI 面で色々良くしたいことが見えてき たのでやってみたい。 ➔ やってみると結構言語コミュニケーションを補助してくれ そうな可能性を感じるので今後もブラッシュアップしてい きたいです!