「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;
リクエストを送信する
作成したHttpRequestMessage
をHttpClient
で送信することで、変換結果を取得することができます。
送信後に取得できる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"
}
まとめ
以前記述した以下のサービスと繋げると、名探偵コナンのように喋った声を別の人の声に変えることができて楽しいですよ。