Speech to Text REST API を使ってみる


Speech to Text REST API」を使う機会があったので軽くまとめます。

Speech to Text REST APIとは?

Auzreの音声サービスで提供されている機能の一つで、音声情報をテキストに変換してくれます。

Cognitive Servicesの音声サービスを作成する

Speech to Text REST APIを使うには、音声サービスを作成する必要があります。

まずは、Azure Portalから「音声サービス」を検索し、表示します。

音声サービス画面が表示されたら、サービスを作成します。
まずは、[+作成]をクリックします。

サービス名や、リージョンなどを設定します。
価格レベル、以下の画像ではStandard S0を設定していますが、フリーで使いたい場合は、F0を選択ください(すでに作成済みのため選べませんでした)
料金はこちら
5音声時間は無料とありますので、たぶんトータル5時間分んの音声のテキスト化が無料かと思います。。

作成できたら、キーとエンドポイントを選択し、キー1をコピーしておきます。

Speech to Text REST APIを使ってみる

REST を介してオンライン文字起こしと通信する必要は、「REST API for short Audio」を使います。
Shortとある通り、最大60秒までの音声が対象となっていますのでご注意ください。

エンドポイント準備する

エンドポイント
https://<REGION_IDENTIFIER>.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1

リージョン名を設定する

<REGION_IDENTIFIER>は、サービスを作成したリージョン名が入ります。
今回作成した西日本だとjapanwestとなります。
他のリージョンの場合は、こちらの識別子を参照ください。

言語パラメータを付与する

エンドポイント最後に、言語パラメータを付与する必要があります。

言語パラメータ
language=<LANGUAGE>

<LANGUAGE>は、変換したい言語パラメータが入ります。このパラメータが付与されていない場合は、4xx HTTPエラーが返されます。
たとえば日本語の場合は、ja-JPとなります。
他の言語パラメータは、こちらを参照してください

今回のエンドポイント

西日本リージョンで、日本語の場合は、以下のURLがエンドポイントとなります

エンドポイント
https://japanwest.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=ja-JP

その他のパラメータ

不適切表現をどうするか?を設定するprofanityパラメータなどもあります。
詳しくは、クエリパラメータをご覧ください

 APIを呼び出してみる

リクエストメッセージの作成

リクエスト用のHttpRequestMessageを作成します。
<< エンドポイント >> には、先ほど作成したURL
<< キー1 >> には、Azureで登録した音声サービスからの情報を設定します。
そのほかのヘッダにつきましては要求ヘッダをご覧下さい

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, << エンドポイント >>);
request.Headers.Add("Ocp-Apim-Subscription-Key", << キー1 >>);
equest.Headers.Add("Accept", "application/json");

音声データを設定

次に変換を行う音声データを設定します。
<< 音声データ>> には、変換を行う音声のバイナリデータを設定します。

httpContent.Headers.ContentTypeに指定している内容は、音声データのフォーマットに依存します。
現在使用できるフォーマットは、WAVと、OGGです。詳しくは、オーディオの形式をご覧ください。
また、MediaTypeHeaderValueの設定内容は、要求ヘッダのContent-typeをご覧ください

var httpContent = new ByteArrayContent( << 音声データのバイナリデータ >> );

httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(@"audio/wav");
request.Content = httpContent;

リクエストを送信する

作成したHttpRequestMessageHttpClientで送信することで、変換結果を取得することができます。

送信後に取得できるHTTP 状態コードです。
400番が返ってくる場合は、言語コードの設定ミスや、無効な音声データの可能性がありますのでご確認ください。

using (var client = new HttpClient()){

    var response = await httpClient.SendAsync(request);
    if(response.IsSuccessStatusCode){
      //~受信後の処理~
    }
}

変換結果を確認する

変換結果は、クエリパラメータformatで2種類の変換結果を取得することができます。
変換後のテキストは、DisplayTextに登録されます。

simpleが指定されている場合(初期値)
{
  "RecognitionStatus": "Success",
  "DisplayText": "Remind me to buy 5 pencils.",
  "Offset": "1236645672289",
  "Duration": "1236645672289"
}

まとめ

以前記述した以下のサービスと繋げると、名探偵コナンのように喋った声を別の人の声に変えることができて楽しいですよ。