[C#] Cognitive Servicesで日本語の音声認識(Bing Speech Recognition API・その1)

Cloud Application Engineerの内海です。

今回はMicrosoft AzureのCognitive Servicesの中から音声認識が可能なBing Speech Recognition APIを使ってみたいと思います。
2016/10/14 一部、内容を修正

“[C#] Cognitive Servicesで日本語の音声認識(その1)”では認証トークンの取得まで、

“[C#] Cognitive Servicesで日本語の音声認識(その2)”では取得したトークンを使用してAPIにアクセス、固定ファイルを送って実際に認識結果を確認したいと思います。


APIへアクセスするためのトークン取得に必要なもの

  • AzureAcount (トークン取得に使用するKeyの発行に必要です。)

トークン取得手順

トークン取得に必要なKeyの取得方法

1.Azure旧portalへアクセス

SR_1


2.左下”新規”ボタンを押下

SR-2


3.”MARKETPLACE”を選択

SR-3


4.”開発者サービスの選択”画面が出るのでその中の”Speech APIs”を選択

SR-4


5.プランはFREEしかないので適当な名前を付け”→”を押下

SR-5


6.そのまま”作成”を押下

SR-6


7.”すべての項目”内、先ほど作成したSpeech APIsを選択

SR-7


8.ダッシュボード下の”管理”ボタンを押下

SR-8


9.画面遷移しアクセストークン取得に必要なKeyが2つ(Primary keyとSecondary key)取得可能

図1


認証Keyを用いたトークンの取得方法

前手順で取得した認証KeyをHTTPリクエストでPOSTしましょう。

10分間有効な認証トークンを取得できます。

POST先アドレスは以下のものになります。

https://oxford-speech.cloudapp.net/token/issueToken

リクエストヘッダは以下の物が必要です。

Key Value
Content-Type “application/x-www-form-urlencoded”

また、リクエストボディには以下のパラメーターを書き込みましょう。

Key Value
grant_type ”client_credentials”
client_id 先ほど取得したPrimary key
クライアントのIDなので適当に決め打って設定しておきましょう!
client_secret 先ほど取得したSecondary key
先ほど取得したPrimary keyまたはSecondary key
scope https://speech.platform.bing.com

レスポンス

リクエストヘッダとボディに間違いがなければ以下のようなjsonが返ってくるはずです!

{
    "access_token":<Base64-access_token>,
    "token_type":"jwt",
    "expires_in":"600",
    "scope":"https://speech.platform.bing.com";
}

サンプルコード

サンプルコードを載せておきます。
POSTして取得出来たトークンを返すメソッドです。

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Text;

namespace BingSpeechRecognition
{
    class Program
    {
        public class AccessTokenInfo
        {
            public string access_token { get; set; }
            public string token_type { get; set; }
            public string expires_in { get; set; }
            public string scope { get; set; }
        }

        static string GetAccessToken()
        {
            //適当に設定しましょう 例 : Guid.NewGuid().ToString("N")
            const string clientId = "";
            //取得したアクセスKeyを入力しましょう!
            const string clientSecret = "";
            var request = (HttpWebRequest)WebRequest.Create(@"https://oxford-speech.cloudapp.net/token/issueToken");
            //リクエストメソッド設定
            request.Method = "POST";
            //リクエストヘッダ設定
            request.ContentType = "application/x-www-form-urlencoded";
            //リクエストボディ設定
            var str = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope={2}",
                clientId,
                clientSecret,
                "https://speech.platform.bing.com");
            using (var outputStream = new StreamWriter(request.GetRequestStream()))
            {
                outputStream.Write(str);
            }
            //受け取ったJsonをデシリアライズし、トークンのみ返す
            var response = request.GetResponse();
            var responseStream = response.GetResponseStream();
            if (responseStream == null)
            {
                throw new Exception();
            }
            //受け取ったJsonをデシリアライズし、トークンのみ返す
            using (var sr = new StreamReader(responseStream))
            {
                return JsonConvert.DeserializeObject<AccessTokenInfo>(sr.ReadToEnd()).access_token;
            }
        }

        static void Main(string[] args)
        {
            //トークンが取得出来たらその文字列を表示
            var token = GetAccessToken();
            Console.WriteLine(token);
            Console.ReadLine();
        }
    }
}

One thought on “[C#] Cognitive Servicesで日本語の音声認識(Bing Speech Recognition API・その1)

現在コメントは受け付けていません。