Android アプリ開発 「MATRIX」

Androidアプリの開発に役立つサンプル集



音声を認識して結果をテキスト表示する方法(音声認識アプリ)

簡単な音声認識アプリを作る

今回は、グーグルが提供している音声認識システムを使用した簡単な音声認識アプリを作ってみたいと思います。 詳細についてはコード内にコメントで記載してありますので、そちらをご覧ください

サンプルコード①(MainActivity.java) 

ポイントは、音声認識が完了した後の処理をする「onActivityResult」をオーバーライドするところです。これがないと音声認識の結果を受け取ることができませんので、必ず追加してください。 

import android.content.Intent;
import android.speech.RecognizerIntent;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

private TextView textView, textView2;
private Button button;
//任意の識別番号
private static final int REQUEST_CODE = 12345;

//アプリが開始されると最初に処理されるメソッド
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//このアプリで使用するレイアウトファイルをセット
setContentView(R.layout.activity_main);

//画面の上にあるアクションバーを隠す(隠さなくても良い)
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

//レイアウトにある2つのテキストビューを取得
textView = (TextView)findViewById(R.id.textView);
textView2 = (TextView)findViewById(R.id.textView2);

//レイアウトにあるボタンを取得
button = (Button)findViewById(R.id.button);

//上で取得したボタンにクリックイベントを実装
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//音声認識用のインテントを作成
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//認識する言語を指定(この場合は日本語)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.JAPANESE.toString());
//認識する候補数の指定
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);
//音声認識時に表示する案内を設定
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "話してください");
//音声認識を開始
startActivityForResult(intent, REQUEST_CODE);
}
});
}

//音声認識が終わると自動で呼び出されるメソッド
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == REQUEST_CODE && resultCode == RESULT_OK) {

//data から音声認識の結果を取り出す(リスト形式で)
ArrayList<String> kekka = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

//認識結果が一つ以上ある場合はテキストビューに結果を表示する
if (kekka.size() > 0) {
//一番最初にある認識結果を表示する
textView2.setText(kekka.get(0));
} else {
//何らかの原因で音声認識に失敗した場合はエラーメッセージを表示
textView2.setText("音声の認識に失敗しました…");
}
}
}
}

 

サンプルコード②(activity_main.xml) 

テキストビュー2つとボタンが1つあるだけのレイアウトで、特に注意する点はありません。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
tools:context="test.MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="認識結果"
android:textSize="18sp" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView"
android:text="結果"
android:textSize="18sp" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="音声認識スタート" />
</RelativeLayout

実行結果 

① 起動直後の画面です。

f:id:vw-dsg:20180327114021p:plain

② 「音声認識スタート」ボタンを押すと音声認識が開始されます。音声認識の小画面にはプログラムコード内で設定した「話してください」という案内が表示されます。

f:id:vw-dsg:20180327114111p:plain

③ 適当な言葉を話しかけると「認識結果」のすぐ下に話しかけた内容が表示されます。

f:id:vw-dsg:20180327114414p:plain

まとめ

音声認識機能はポイントさえ押さえてしまえば意外と簡単に実装できますので、これから音声認識機能を使ったアプリを作ろうと考えている方は、ぜひ今回のサンプルを参考にしてください。 

END