Azureの音声認識をやってみた
AzureのBing Speech APIがあるので試したみたのでそれを記述する
事前準備
まずは事前準備として、Azureno契約が済んでいることとする。
Azure Portalにアクセスし、左側のメニューから「Cognitive Services」から追加で「Bing Speech API」を選択します。
適当に名前を入れて作成が完了するとキーを確認します。
- Keys
xxxxxxxxx
テストデータの接続
まずは接続できるか試してみる。
アクセストークンの取得
まずはアクセス可能なトークンを生成する
先ほどのkeyを元に実行する。
ubuntu@test1:~/azure/stt$ curl -X POST "https://api.cognitive.microsoft.com/sts/v1.0/issueToken" -H "Content-type: application/x-www-form-urlencoded" -H "Content-Length: 0" -H
"Ocp-Apim-Subscription-Key: {KEY}" >token
すると戻り値が返ってくるので、その値をアクセストークンとして利用します。
使用するデータはここから落としてきました。
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=en-US&local=en-US" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100
' --data-binary @brian.wav
{"RecognitionStatus":"Success","DisplayText":"Hi I'm Brian one of the available high quality text to speech voices select download not to install my voice.","Offset":3600000,"Duration":89800000}ubuntu@test1:~/azure/stt$
OK。うまく繋がりました。
実際のデータの投入
次に実際のデータを投入するが、使用するデータはいつものデータを使う
音声データの変換
音声データを認識できる形式のwavに変換する。
ubuntu@test1:~$ ffmpeg -i rd319.mp3 -vn -ac 2 -ar 44100 -acodec pcm_s16le -f wav output.wav
次にこの音声ファイルを日本語の認識に設定し投げる。
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; codec="audio/pcm"; samplerate=44100' --data-binary @output.wav
{"RecognitionStatus":"Success","DisplayText":"小川未明作海外太陽","Offset":29900000,"Duration":45500000}
あれ?切れています・・・。
調べてみると、どうやら仕様でMAX15秒までしか通常のRESTでは無理!?
ここ
- Utterances are limited to a maximum of 15 seconds
ということで、当初のデータを15秒ごとに分割して投げてみる。もし途中で切れてしまったときには仕方ないとあきらめる。
ffmpeg -i output.wav -t 15 -ss 60 cut5.wav
のように区切り、ファイルを分割して認識させると
ubuntu@test1:~/azure/stt$ curl -X POST "https://api.cognitive.microsoft.com/sts/v1.0/issueToken" -H "Content-type: application/x-www-form-urlencoded" -H "Content-Length: 0" -H "Ocp-Apim-Subscription-Key: 91928c0892e44ebcb15b3d6e7c8def1c" >token
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 656 100 656 0 0 1035 0 --:--:-- --:--:-- --:--:-- 1034
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100' --data-binary @cut1.wav | jq '.DisplayText' -r
小川未明作海外太陽
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100' --data-binary @cut2.wav | jq '.DisplayText' -r
五億をいびきをかいて寝る
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100' --data-binary @cut3.wav | jq '.DisplayText' -r
口開けて笑ったときに
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100' --data-binary @cut4.wav | jq '.DisplayText' -r
が飲んでしまおうと
ubuntu@test1:~/azure/stt$ curl -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=ja-JP&local=ja-JP" -H "Transfer-Encoding: chunked" -H "Authorization: `cat token`" -H 'Content-type: audio/wav; samplerate=44100' --data-binary @cut5.wav | jq '.DisplayText' -r
恵庭昼寝る夜も寝る
見にくいので抜き出します。
小川未明作海外太陽
五億をいびきをかいて寝る
口開けて笑ったときに
が飲んでしまおうと
恵庭昼寝る夜も寝る
本来認識して欲しいもの
小川 未明 作
海と太陽
海は昼眠る、夜も眠る、
ごうごう、いびきをかいて眠る。
昔、昔、おお昔
海がはじめて、口開けて、
笑ったときに、太陽は、
目をまわして驚いた。
かわいい花や、人たちを、
海がのんでしまおうと、
やさしく光る太陽は、
魔術で、海を眠らした。
海は昼眠る、夜も眠る。
ごうごう、いびきをかいて眠る。
欠けています。試しに他のファイルでもやってみましたが、時間が15秒よりも長くても正常に終わる場合とセンテンスで終わるものとがありました。
う~ん。これはちょっと別の方法でやったほうがいいかもしれません。
たぶん、センテンスが長い時間だったら終了したりしてそう。
プログラムからの実行
いつもはPythonでやっていたので、pythonで・・・と思ったが、Pythonのライブラリが出ていない。
C#、AndroidやJavascriptのWebSocketはあるけど。バッチ用のSDKのI/FがLinuxではなさそう。
ということで一旦終了。