はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Microsoft Cognitive Service - Bing Speech API関連まとめ

Microsoft Cognitive Service - Bing Speech APIを使う方法はいろいろサンプルあり充実しています。

しかし、Translator Speech APIC#サンプルにはWebSocket使ったサンプルがあるのですが、Bing Speech APIにはサンプルがないという状況になっています。同じようにBing Speech APIにもWebSocketのC#サンプルがほしいです。

WebSocket-JavaScriptSDKを使う方法

github.com

[良いところ]

  1. Bing Speech APIのWebSocket APIを使っているので、希望の処理ができる

[残念なところ]

  1. Java Script (Type Script)なので、C#の知識だけではコードを理解できない

SpeechSDK(Microsoft ProjectOxford SpeechRecognition)を使う方法

docs.microsoft.com

[良いところ]

  1. .NET / Android / iOSSDKがある
  2. マイクからの入力で音声に認識してくれる
  3. 内部的にWebSocketを使っている感じ

[残念なところ]

  1. Androidはarmeabi用とx86用でarm64-v8a用とかarmeabi-v7a用がない
  2. SpeechSDK自体のソースが公開されていないため、C#でWebSocket使うときのコードの参考にできない
  3. .NET StandardやWindows Runtimeには対応していないのでHoloLensから使えない
  4. Xamarinに対応していないのでBinding Libraryの作成が必要(作成済)

REST APIを使う方法

docs.microsoft.com

[良いところ]

  1. REST APIなので環境や言語依存なくBing Speech APIの使い方サンプルとなる

[残念なところ]

  1. 音声発話が完了してから初めてAPIをたたくことができる
  2. 当然、WebSocketではない

ServiceLibrary(Microsoft.Bing.Speech)を使う方法

github.com

[良いところ]

  1. WebSocketを使ったC#アプリがつくれるSDKを使っている

[残念なところ]

  1. SDKのインターフェースが音声ファイルからのストリーム入力しかない
  2. .NET用しかない

まとめ

ということで、現時点でC#を使ってWebSocketで動作させようとするとTypeScriptのサンプルコードを読み解きながら、WebSocketのSpeech Protocolドキュメントを読み解かないといけない。

https://docs.microsoft.com/en-us/azure/cognitive-services/Speech/api-reference-rest/websocketprotocol

しかしながら、Translator Speech APIに比べるとなんかプロトコル難しくないですか?

さらに、このドキュメントですが、本当にプロトコルのことしか書いていないため、System.Net.WebSocketsクラスを使ってC#でどう書けばいいかという点についての言及がないのです。

また、Connection Protocolでは丁寧にもhttps GETからWebSocketへのUpgradeというWebSocketのお約束レベルの記載まであり、そのあたりを知らないとSystem.Net.WebSocketsクラスでどうするの?といきなり躓いてしまう。

 

マイクロソフトに期待したいこと:

  1. SpeechSDKをオープンソースにしてくれる。しかし、Githubのissue経由でリクエスト(私以外にも何人かが依頼)した結果がプロトコルドキュメントの公開だった
  2. System.Net.WebSocketsクラスを使ったTranslator Speech APIサンプルのようなサンプルの公開
  3. もちろん、プロトコルを整理してTranslator Speech APIくらい簡単にWebSokcetで使えるようにしてくれるのでもいい。