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



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム