LoginSignup
8
11

More than 5 years have passed since last update.

Azureの音声認識をやってみた

Posted at

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ではなさそう。
ということで一旦終了。

8
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11