はじめに
この記事はSkyWay Advent Calendar 2018の19日目の記事です。
SkyWay(WebRTC)を使って作成した簡易Web会議システムに、リアルタイム会話翻訳機能(日本語と英語の翻訳と読み上げ機能)を実装できるか試してみました。
できたもの
リアルタイム翻訳機能の付いたWeb会議を作ってみました。 pic.twitter.com/o1W3jqmpyw
— 依藤充範 (@yorifuji) 2018年12月18日
映像ではわかりづらいですが、右側の端末で喋った日本語の声が、左側の端末では英語の声で読み上げられています。
映像では試していませんが英語から日本語への変換もできます。
翻訳機能の付いたWeb会議として使うことができるかもしれません。
デモサイト
Windows or macOS の Google Chrome でのみ動作します。
右下の Room Name に任意の部屋の名前を入力して Connect してください。部屋の名前はユニークな名前の方が良いでしょう。
左下の 音声認識・翻訳
を押すと下記のダイアログが表示されます。
全てのチェックボックスにチェックを付けて、自分の話す言語を選択してください。なお、相手側も同じ言語を選択している場合は翻訳されません(例えば二人ともJapaneseを選択している場合は翻訳されません)。
なお、1台の端末で複数のタブで開くと音声認識が正常に動かないため、動作を確認する際は2台以上の端末で使ってください。
実現方法
翻訳は
ローカルで音声認識(文字起こし) --> WebRTC(SkyWay)でテキスト送信 --> 受信側で翻訳 --> 音声合成を使って読み上げ
という流れで実現しました。
音声認識(文字起こし)
Web Speech API の SpeechRecognition
を使いました。現時点ではChromeのみ利用可能のようです。
こちらの記事に使い方がわかりやすく載っています。
https://qiita.com/kolife/items/a0af7702eef05994fbfb
今回、音声認識はローカルの端末で行い、文字起こししたテキストを SkyWay の機能を使って相手の端末に送信しています。
翻訳
翻訳APIを提供しているクラウドサービスを使うことも考えましたが、手軽に実現したかったのでこちらの記事を参考に、 GoogleAppsScript
を使ったAPIを用意しました。
https://qiita.com/tanabee/items/c79c5c28ba0537112922
上記のAPIに相手から送られてきたテキストを投げて、翻訳されたテキストを取得しています。
音声合成
Web Speech API の SpeechSynthesis
を使いました。
こちらの記事が参考になりました。
https://qiita.com/kyota/items/da530ad22733b644518a
今回は利用していませんが、出力する声の種類なども選べるそうです。
翻訳APIを使って翻訳したテキストを、上記のAPIを使って音声合成して読み上げています。
その他
- Mute Remote Voice のチェックを外すと通常のWeb会議のように元の音声が再生されます
- ソースコードはこちらです https://github.com/yorifuji/webrtc-realtime-translation
実装して気づいたこと
- Chromeの音声認識
webkitSpeechRecognition
は音声認識の際に利用するマイクデバイスが選べないようです、常に規定の(デフォルトの)マイクの音を認識するようです - 1台の端末で複数のタブを開いて音声認識を同時に使うとうまく動きませんでした、私の使い方の問題かもしれません
- 音声合成した音を音声認識が拾ってしまうことがあるので、音声合成する直前に音声認識を停止するようにしました
まとめ
Web会議システムにリアルタイム会話翻訳機能(日英翻訳)を追加してみました。意外と簡単に作ることができました。
Chromeの音声認識と音声合成は日英以外の言語にも対応しているので、翻訳する言語を増やすこともできそうです。
また、今回は日英翻訳に GoogleAppsScript
を使いまいしたが、クラウドサービス(AWS,Azure,Watsonなど)が提供しているAPIを使うことでより自然な翻訳が実現できるかもしれません。