こんにちは。
Watson使ってみようシリーズ第4弾です。
第2弾でText to Speech機能を使いましたが、その逆であるSpeech to Text機能を試したので書いていきたいと思います。
Speech to Text
まずは概要を引用します。
Watson Speech to Textサービスは、会話から文字を書き起こします。人工知能により、文法や言語構造に関する情報と音声信号の組成に関する知識を組み合わせて、正確に文字を書き起こします。複数の言語の音声が IBMの音声認識機能によってテキストに変換されます。音声は僅かな遅延で書き起こされます。また、より多くの音声を聞き取ることで学習して修正が加えられていきます。一連の音声からキーワードを1つ以上検出できます。サービスには、WebSocket接続またはREST API経由でアクセスします。
(引用元: https://www.ibm.com/smarterplanet/jp/ja/ibmwatson/developercloud/speech-to-text.html)
学習と修正が加えられて精度が上がっていくという認識でいいのでしょうか。
文字に起こしてからキーワードマッチングを行なう機能も他とは異なる点かもしれないです。
簡単なプログラムを組みレスポンスを確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$wav_path = 'sample.wav' //第2弾の記事で生成したファイルを使用 $api_response = watson_speech_to_text($wav_path); function watson_speech_to_text($wav_path) { $user_name = '**********'; //IBM Bluemixで取得 $password = '**********'; //IBM Bluemixで取得 $api_url = 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true&word_alternatives_threshold=0.9&continuous=true&model=ja-JP_BroadbandModel'; $postdata = file_get_contents($wav_path); $ch = curl_init($api_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, $user_name . ":" . $password); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/wav')); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $result = json_decode(curl_exec($ch), true); curl_close($ch); if(isset($result['error'])){ return false; //return $result['error']; } return $result; } |
実行して得られるJSONがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
{ status: 1, results: [ { word_alternatives: [ { start_time: 0.03, alternatives: [ { confidence: 0.9186, word: "Watson" } ], end_time: 0.57 }, { start_time: 0.57, alternatives: [ { confidence: 0.9186, word: "で" } ], end_time: 0.71 } ], alternatives: [ { timestamps: [ [ "Watson", 0.03, 0.57 ], [ "で", 0.57, 0.71 ], [ "作られた", 0.71, 1.28 ], [ "音声", 1.28, 1.74 ], [ "です", 1.74, 2.15 ] ], confidence: 0.81, transcript: "Watson で 作られた 音声 です " } ], final: true } ] } |
Watsonが作った音声なのでWatsonが認識するのは正しいですね。
33行目や37行目を見るとわかりますが、その単語が発せられた時間も取得できるようです。
ストリーミングにも対応している(続要調査)ようなのでリアルタイム音声認識コンテンツの実装にも使えるかもしれないですね。
引き続き調査します(゜-゜)