初めてのHoloLensとAzureの連携!Microsoft Speech APIを利用してみました。Azure完全に食わず嫌いだったけど最近楽しくなってきた。#HoloLens #HoloLensJP pic.twitter.com/C4ymb4yQy2
— 広務(Hiromu) (@hi_rom_) 2018年4月7日
以前ツイートしただけになっていた、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もご参照ください。