Учим свое приложение слышать голоса
Главная » Учим свое приложение слышать голоса

В этом уроке мы научим свою программу слушать хозяина. Мы научимся использовать в Android приложении функцию speech to text, то есть преобразование голоса в текст, что будет происходить с использованием стандартных возможностей Android и Google через RecognizerIntent. Для успешной работы приложения нужно подключение к Интернет. Распознаватель речи будет запускаться при нажатии пользователя на кнопку, а произнесенные слова будут отображаться в отведенном для этого элементе TextView.

Создадим новый проект и начнем. Для начала оформим интерфейс приложения. Как уже только что упоминалось, оно будет иметь всего 2 элемента: кнопку Button и элемент TextView. Открываем файл activity_main.xml и добавляем туда эти элементы:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 tools:context=".ImagePickerActivity" >
 <Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/button"
 android:layout_gravity="center"
 android:text="Сказать слово"/>
 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/tv"
 android:layout_gravity="center"
 android:text="Здесь отобразиться произнесенный текст"/>
</LinearLayout>

При нажатии на кнопку будет вызываться RecognizerIntent activity, которая будет производить распознавание голоса, входящего в устройство из микрофона, и преобразовывать его в текст. Для обработки полученных данных будет использоваться функция onActivityResult (), она используется всегда, если мы запускаем какое то другое activity и желаем получить из него назад (как ответ) некоторые данные.

По сути, вся работа в этом случае (и в подобных ему) выполняется в 2 основных шага:

- первый шаг - это выполнение activity на результат startActivityForResult, где мы задаем, какую activity хотим запустить и определяем подробности своего запроса;

- второй шаг - обработка функции onActivityResult (), которая проверяет оценку успешности результата запроса и обрабатывает полученные данные.

В результате своего запроса мы будем получать массив из слов и фраз, которые программе покажутся похожими на то, что пользователь промямлит при вызове действия ACTION_RECOGNIZE_SPEECH (говорить для распознавания и преобразования в текст), а далее эти слова мы отображаем в элементе TextView. Чтобы реализовать это все, открываем файл MainActivity.java и добавляем следующее:

import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

 private TextView EnteredText;
 //Это значение мы используем для проверки успеха
 //получения обратной информации в onActivityResult ():
 private static final int Print_Words = 100;

 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 EnteredText = (TextView) findViewById(R.id.tv);

 Button mButton = (Button) findViewById(R.id.button);
 mButton.setOnClickListener(new View.OnClickListener() {
 public void onClick(View view) {

 //Вызываем RecognizerIntent для голосового ввода и преобразования голоса в текст:
 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
 intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Скажите слово для распознавания");
 startActivityForResult(intent, Print_Words);
 }
 });
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

 //Проверяем успешность получения обратного ответа:
 if (requestCode==Print_Words && resultCode==RESULT_OK) {
 //Как результат получаем строковый массив слов, похожих на произнесенное:
 ArrayList<String>result=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
 //и отображаем их в элементе TextView:
 EnteredText.setText(result.toString());
 }
 super.onActivityResult(requestCode, resultCode, data);
 }
}

Теперь запускаем приложение, нажимаем кнопку "Сказать слово" и рассказываем приложению обо всех своих бедах (простите за эти роскошные скриншоты):

Разговариваем с приложением по душам Говорящее приложение готово к разговорам

Как видите, оно нас понимает.

Напомню также о уроке по функции чтения текста вслух Text To Speech.

Категория: Уроки программирования | Просмотров: 1177 | Добавил: Oleg | Теги: Recognize speech, преобразуем голос в текст, распознавание голоса, Text To Speech, RecognizerIntent | Рейтинг: 5.0/1
Всего комментариев: 0
avatar