Androidアプリで行う音声認識
今回は音声を使って文章の入力を行うAndroidアプリを作成しました。
コード言語はKotlinです。
onCreate()ではActivityに設置したボタンのタップイベントに音声認識関数を設定しています。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Activityに設置しているボタンをタップすることで音声認識開始
button_start.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
// 音声認識を開始
listen()
}
})
}
音声認識を行う関数です。
各種設定を行ったのちに、
音声認識用Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH )を発行しています。
これだけで音声認識が可能です。
見ての通り短く、簡単なコードです。
Activity結果識別用の定数REQUEST_CODEには1000を設定しています。
private fun listen() {
// 音声認識Intent
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
// 音声の言語は日本語
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.JAPAN.toString())
// 認識結果の最大数
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10)
// プロンプトに表示する文字列の設定
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "音声聞き取り中")
try {
// インテントを発行
startActivityForResult(intent, REQUEST_CODE)
} catch (e: ActivityNotFoundException) {
e.printStackTrace()
text_view.text = (e.message)
}
}
結果を受け取るために
onActivityResult()をオーバーライドします。
音声認識Activityの結果で、リザルトコードがOKであれば
引数dataから結果を取得し、Activityに設置したTextViewへ表示しています。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
if(data != null)
{
// 認識結果を取得
val results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
// 内容があれば
if (results.size > 0) {
// インデックス0の結果を表示
text_view.text = results[0]
}
}
}
}
とても短いコードで音声認識を実現することができました。
ネットワーク接続が必須ですが、なかなかの高精度で認識してくれています。
認識結果を翻訳サービスAPIに通せばリアルタイム翻訳アプリも作れそうですね。
水曜担当:Tanaka
tanaka at 2019年09月25日 10:00:20