Создание приложения для распознавания речи в ОС Android
Распознавание речи будоражит многие светлые умы, ведь это достаточно быстрый и в то же время эффективный метод создания каких-либо заметок или записей.
В данном материале мы попытаемся создать несложное приложение для распознавания записываемой речи с получением печатного текста.
Допустим, у нас имеется поле для ввода (или, соответственно, извлечения) текста и кнопка, по нажатии на которую это самое поле будет наполняться печатным текстом в зависимости от произнесенных слов. То есть выглядит всё это чудо следующим образом:
Для начала создаем проект. Добавляем TextEdit на несколько строк и кнопку в layout. Не забываем выставить для приложения соответствующие права – а потребуется доступ к возможности записывать звук и соединение с интернетом.
Теперь редактируем непосредственно создаваемый .java-файл. Сразу оговоримся, что большая часть представленного кода взята из официальной документации Google. Итак, в первую очередь проверяем, может ли устройство записывать звук в принципе. Выполняем вот такой код:
PackageManager pm = getPackageManager(); List activities = pm.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() != 0) { speakButton.setOnClickListener(this); } else { speakButton.setEnabled(false); speakButton.setText("Recognizer not present"); }
Таким образом, если возможности звукозаписи нет, то кнопка будет неактивной, в противном же случае, после её нажатия будет вызвана звукозапись:
Теперь полученный результат нужно преобразовать из массива в строку, так как напрямую данные вывести в строку нельзя, после чего выводим текст в поле TextEdit:
/** * Handle the click on the start recognition button. */ public void onClick(View v) { if (v.getId() == R.id.speak_button) { startVoiceRecognitionActivity(); } } /** * Fire an intent to start the speech recognition activity. */ private void startVoiceRecognitionActivity() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); } /** * Handle the results from the recognition activity. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { // Fill the list view with the strings the recognizer thought it could have heard ArrayList matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); String resString = ""; for (String s : matches) { resString += s + " "; } rtext.setText(resString); } super.onActivityResult(requestCode, resultCode, data); }
В результате, после записи речи и вывода её на экран девайса получаем вот такую вот картину:
Отметим, что компания Google предусмотрела для сервиса распознавания речи два различных между собой словаря. Первый, основной, больше ориентирован на использование в повседневной жизни, то есть это написание SMS-сообщений, электронных писем и так далее, в то время как второй предназначен для поисковых запросов. Так что если заранее известна область применения функции распознавания речи, лучше использовать более подходящий для этого словарь. Определяется он вот как. LANGUAGE_MODEL может быть FREE_FORM (для надиктовки, как основной язык используется английский) и WEB_SEARCH (для поисковых запросов и коротких фраз). Поэтому прописать нужно параметр либо как LANGUAGE_MODEL_FREE_FORM, либо же как LANGUAGE_MODEL_WEB_FORM. Вот в принципе и все аспекты создания несложного приложения для распознавания записанной на микрофон речи в печатный текст.
Огромная просьба или подробнее расписывайте,или дайте ссылку на исходный код