Главная » Учим свое приложение слышать голоса | |
В этом уроке мы научим свою программу слушать хозяина. Мы научимся использовать в 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. | |
|
Всего комментариев: 0 | |