Androidの音声認識APIで凡ミスしてハマる
|
メインで作業しているほうが煮詰まってしまったので、別のプログラムを書いてストレスを発散することにしました。 で、ちょっと前にやってみよう、と思ったっきりになっていた、日本語音声認識APIを触ってみることにします。 先のGoogleのブログにも有るように、RecognizerIntentを使えば一発なのです。ググればサンプルは一杯出てきますしね。と言う事でさくさく実装してサクサクテストしてみたのです。いざ電話機を顔の前に掲げて「てすと」 で、音声解析され出力されたワードを確認してみると、pistol, facebook, crystal, difficult, this talk, text talk…ハハハ「てすと」は英語だもんナーじゃあ「あー」で。ah、ooh、…おーう。 俺そんなにカツゼツ悪いですかね?と、他の音声認識アプリを使ってみたところ、きちんと「てすと」といえば「テスト」と出力されます。「わたしきになります」は「私気になります」と出力されます。「あめんぼあかいなあいうえお」は「あめんぼあかいなあいうえお」…ばっちりじゃん俺。 -☆- 結論。 【凡ミス】EXTRA_LANGUAGE_MODEL の所をEXTRA_LANGUAGE にしていた つまりこう。 Intent intent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH ); intent.putExtra( RecognizerIntent.EXTRA_LANGUAGE,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM );これでも全く問題なく素通りされます。しかしランゲージモデルを指定していないことになるのでずっとデフォルトのまま。多分英語。 【副産物】 アレコレ調べていたのですが、実は本家APIdemosに音声認識のソース入ってました。これをみると後ろの方で // Specify the recognition language. This parameter has to be specified only if the
// recognition has to be done in a specific language and not the default one (i.e., the
// system locale). Most of the applications do not have to set this parameter.
if (!mSupportedLanguageView.getSelectedItem().toString().equals("Default")) {
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
mSupportedLanguageView.getSelectedItem().toString());
}
多様性に富むAndroid端末では、上記のようなコードをきちんと書いておいたほうが良いようです。もしくは、もう日本語決めうち!として、LANGUAGE_MODEL_FREE_FORM の箇所を、「Locale.JAPAN」としてしまうか、ですね。 いやー凡ミスで二日も消費するとは…。
|


