Hiromuブログ(夏)

どこにでもいるただのホロレンジャーです

Azureを利用したHoloLensでの日本語音声入力

以前ツイートしただけになっていた、HoloLensでの日本語音声入力に関するサンプルについて実装方法をまとめました。 AzureのSubscriptionキーを取得すれば動作します。

Azure Bing Speech API

日本語の音声をテキストに変換するためにAzureのBing Speech APIを利用しました。 Bing Speech APIとはMicrosoft Cognitive Servicesの一部です。 azure.microsoft.com

Bing Speech APIを利用すると音声をテキストへ、またテキストを音声へ変換することができます。 docs.microsoft.com

今回は音声をテキスト化するSpeech to text (speech recognition)の説明になります。Speech to textはREST APIを使う方法とWebsocketを利用した方法がありますが実装が簡単なREST APIを用いました。REST APIの場合15秒以内の音声でなければいけないといった制限があるため注意が必要です。

Subscriptionキーの取得

Cognitive Servicesを利用するためにはSubscriptionキーを取得する必要があり、取得方法は以下2つあります。

  • Webから申し込む(30日間無料)
  • Azure Portalからリソースを作成する

Bing Speech APIのWeb申し込みは以下になります。 azure.microsoft.com

Azure Portalからのリソース作成は以下手順になります。

  • リソースの作成からBing Speech APIで検索

  • [作成]選択後以下任意の値を設定する(リソース作成の詳細は検索すれば多く出てくると思いますので省略します)価格については2018/5/2時点のものになりますがFreeプランがあります

  • 作成したリソースのKeysを選択することでSubscriptionキーが表示される

以上のどちらかからSubscriptionキーを取得します。

Unityプロジェクト

UnityプロジェクトについてはGitHubに置きました。 github.com

SpeechToText.unityを開き、SpeechToTextViewのInspectorに取得したAzureのキー情報を入力することで動作します。

以下にはポイントとなるREST API部分についてのみ記載します。

エンドポイントの指定

リクエスト送信先のエンドポイントは以下を指定します。 https://speech.platform.bing.com/speech/recognition/

パラメータの設定

REST APIの詳細については以下に記載されており、パラメータとして3つあります docs.microsoft.com

  • Recognition mode
  • Language
  • Output format

上記3つはそれぞれUnityのInspectorで設定可能にしています。

Subscriptionキーの設定

HTTPリクエスト送信の際にsubscriptionKeyをRequestHeaderに付加します。

// HTTPリクエストを送る
UnityWebRequest request = UnityWebRequest.Post(requestUrl, form);
request.chunkedTransfer = true;
request.SetRequestHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
yield return request.SendWebRequest();

音声データの送信

Unityのマイク機能を利用した場合、音声データはAudioClipとして取得されます。 REST APIの仕様としてwavとして送信する必要があるため、

Currently, only WAV file and PCM Mono 16000 encoding is supported

Wav Utility for Unityというツールを利用しました。

github.com

ポイントについては以上です、詳細についてはGitHubもご参照ください。