[C#] Cognitive Services日本語音声認識API『Bing Speech Recognition API』の更新

Cloud Application Engineerの内海です。

Microsoft Azure Cognitive Servicesの音声合成APIである『Speech API』に更新があったようです。
前回はトークン取得と音声合成API『Bing Text To Speech API』について触れたので、
今回は音声認識API『Bing Speech Recognition API』に触れたいと思います。
(といってもC#コーディングで試すだけですが…)

まずは公式ドキュメントをどうぞ ^^) _旦~~
https://www.microsoft.com/cognitive-services/en-us/Speech-api/documentation/API-Reference-REST/BingVoiceRecognition

音声合成はリクエスト情報をheaderに入れてましたが、
音声認識ではURLのクエリに追加します。

Post 時にBodyにファイルをバイト配列にして送ります。

Google Cloud PlatformのSpeech APIなんかは
Body部分にJsonのパラメータとしてbase64形式にファイルを変換して送る必要があるので面倒でしたね。
(いつか記事は書きます)

Tokenと送るファイルパスを引数にレスポンス内容を表示する関数になっています。

Token取得は前回書いたので割愛

        static async Task SpeechRecognition(string token, string filename)
        {
            var client = new HttpClient();
            var query = HttpUtility.ParseQueryString(string.Empty);
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            query["version"] = "3.0";
            query["requestid"] = Guid.NewGuid().ToString(); //リクエスト識別GUID
            query["appID"] = "D4D52672-91D7-4C74-8AD8-42B1D98141A5"; //固定
            query["format"] = "json";
            query["locale"] = "ja-JP"; //使用言語
            query["device.os"] = "Windows OS"; //使用OS
            query["scenarios"] = "ulm"; //uml or web Search
            query["instanceid"] = ""; //デバイス識別GUID
            var uri = @"https://speech.platform.bing.com/recognize?" + query;
            try
            {
                using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
                {
                    var byteData = new byte[fileStream.Length];
                    var readBytes = fileStream.Read(byteData, 0, (int)fileStream.Length);
                    using (var content = new ByteArrayContent(byteData))
                    {
                        content.Headers.ContentType = new MediaTypeHeaderValue("audio/wav");
                        var response = await client.PostAsync(uri, content);
                        var responseString = response.Content.ReadAsStringAsync().Result;
                        //きれいに結果だけ欲しいならデシリアライズしてあげてください
                        Console.WriteLine(responseString);
                    }
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

書いた後に気づきました。
Tokenの取得が変わっただけですね、これ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中