Recognition voice android что это

Распознавание и генерация речи в Android

Последнее время большой интерес у пользователей вызывает возможность распознавания речи в телефонах. Огромная заслуга в популяризации этого направления принадлежит компании Aple, однако Google также располагает подобными технологиями. Собственно этой теме и будет посвящена данная статья. Мы разработаем приложение, которое будет распознавать речь пользователя и воспроизводить результат с помощью голосового движка «Text To Speech» (TTS). Отметим, что распознавание происходит на серверах Google, поэтому для работы приложению необходимо разрешить использовать коммуникационные возможности. Кроме того, распознавание речи не работает на эмуляторе. Тестировать программу необходимо на реальном устройстве.

На самом деле работать с распознаванием и синтезом речи в Android очень просто. Все сложные вычисления скрыты от нас в довольно элегантную библиотеку с простым API. Вы сможете осилить этот урок, даже если имеете весьма поверхностные знания о программировании для Android.

Давайте создадим новый проект в Eclipse. Для наших нужд понадобится версия SDK не меньше 8. Опишем в общих чертах создаваемую программу. При запуске приложения пользователю будет показана кнопка, после нажатия на которую пользователю будет предложено надиктовать фразу. Затем будет осуществлено распознавание и будет показан список возможных вариантов. Поскольку технологии распознавания речи далеки от совершенства, программа не может ручаться за точность результата, именно поэтому будет предложено несколько вариантов. После того, как пользователь выберет один из них, будет запущен генератор голоса, который воспроизведет выбранную фразу.

Нам понадобится несколько текстовых строк, объявим их в фале «res/values/strings.xml»

Откроем файл «res/layout/main.xml» и зададим шаблон дизайна приложения. Для этого переключимся из графического в XML редактор и изменим содержимое файла

Добавим в Linear Layout элемент Text View

обратите внимание, TextView ссылается на строку intro, которую мы задали в файле strings.xml.

После Text View добавим кнопку

Пользователь будет нажимать эту кнопку, чтобы начать говорить. Кнопка имеет параметр id, через который ее можно вызвать из Java кода. После нажатия на кнопку пользователю показывается сообщение. Нам также понадобится TextView для вывода слов с предложениями

TextView будет использовать строковый ресурс. Нам также понадобится список для вариантов слов

ListView будет заполняться данными в процессе работы программы, поэтому для доступа к этому компоненту также требуется ID. Обратите также внимание на наличие ресурса drawable. Вы должны сохранить файл words_bg.xml в папке res

Ничего особенного. Вы можете настроить дизайн ListView по своему усмотрению. Нам осталось задать еще один элемент пользовательского интерфейса — шаблон для элемента ListView. Создайте новый файл res/layout/word.xml со следующим содержанием

Таким образом, каждый элемент списка представляет собой просто Text View.

Если Вы все сделали правильно, то при запуске должно получиться следующее

Программируем распознавание речи в Android

После того, как шаблон будущего приложения создан, можно перейти к кодированию. Откройте java файл главной Activity и добавьте в начало файла

Изменим немного декларацию главного класса

OnInitListener необходим для работы TTS движка. Внутри класса добавим объявления переменных перед методом onCreate

Внутри метода onCreate автоматически сгенерирован код, вызывающий метод родительского класса и устанавливающий главный контекст вывода.

Cоздадим переменные для работы с кнопкой и списком распознанных слов

Далее необходимо проверить поддерживается ли возможность распознавания голоса телефоном

Мы запрашиваем среду, поддерживается ли Recognizer Intent. Если поддерживается, мы говорим приложению, что нужно отслеживать щелчок пользователя по кнопке. Если интент не поддерживается, мы блокируем кнопку и выводим соответствующее сообщение пользователю.

Напишем код, обрабатывающий нажатие на кнопку. Внутри класса после метода OnCreate добавим метод OnClick.

Как видите, при нажатии на кнопку мы вызываем метод listenToSpeech().

Большая часть приведенного кода стандартна для программ, использующих распознавание голоса. Обратите внимание на параметр EXTRA_PROMPT. Он задает строку-приглашение для пользователя. Параметр EXTRA_MAX_RESULTS определяет максимальное число вариантов распознавания. В конце концов, мы вызываем startActivityForResult. Результат его работы будет передан в метод onActivityResult.

На следующем скриншоте показан экран в момент распознавания речи.

Определим метод onActivityResult

Читайте также:  Детские часы для андроида наручные

Обратите внимание, при проверке результата мы сравниваем переменную requestCode с константой VR_REQUEST, которую использовали ранее при вызове метода startActivityForResult. Таким образом, мы рассматриваем только результаты от нашего запроса. В метод возвращается 10 вариантов распознанных слов, которые мы записываем в список ArrayList. Этот список мы используем в ArrayAdapter компонента List View.

Если приложение справилось с задачей и смогло что-то распознать, вы увидите похожий н показанный на левом скриншоте результат. Если приложению не удалось распознать фразу, будет показано сообщение, как на правом скриншоте

Вот, собственно и все. Распознавание голоса в Android — довольно простая задача. Мы вызываем интент RecognizerIntent с требуемыми нами параметрами. Результат возвращается в onActivityResult.

Генерация речи в Android

Перейдем ко второй части нашего приложения, связанного с генерацией речи. Мы хотим, чтобы телефон проговаривал фразу из списка результатов. Мы должны определить строку, на которую щелкнул пользователь. Вернемся к методу onCreate и добавим в конец этого метода код

Мы используем метод setOnItemClickListener чтобы установить отслеживание щелчков для каждой строки. Внутри нового объекта OnItemClickListener мы описали метод onItemClick, который вызывается в ответ на щелчок по строке списка. Выбранная строка передается, как View в этот метод. Поскольку при проектировании шаблона приложения мы указали, что наш список состоит из TextView, мы преобразуем полученное значение в объект TextView и достаем из него строковое значение. Мы записываем это слово в лог и показываем пользователю Toast сообщение.

Если Вас не интересует процесс генерации речи, Вы можете остановиться и протестировать приложение.

Для генерации речи необходимо настроить движок TTS. Добавим код в конец метода onCreate

Как и в случае распознавания, результат интента возвращается в метод onActivityResult. В этом методе перед строкой super.onActivityResult(requestCode, resultCode, data); добавьте

Таким образом, мы проверяем наличие TTS движка, и если он не установлен — предлагаем пользователю установить соответствующую программу.

Чтобы завершить настройку TTS, добавим метод onInit, который вызывается при успешной инициализации TTS.

Здесь мы устанавливаем язык генератора речи.

Для того, чтобы заставить движок проговорить строку, нужно вызвать метод repeatTTS.speak. Вернемся к методу onCreate. Внутри метода onItemClick после строки Toast.makeText(SpeechRepeatActivity.this, «You said: «+wordChosen, Toast.LENGTH_SHORT).show(); добавьте следующий код

Таким образом, одновременно с Toast сообщением пользователь услышит сгенерированную речь. Отметим еще раз, что эмулятор не поддерживает распознавание речи, поэтому тестировать программу необходимо на телефоне.

Источник

Управление голосом в приложениях на Android

Началось все с того, что я посмотрел неплохой обзор (сравнение) Siri и Google Now. Кто из них лучше, спорить не буду, однако у меня лично планшет на Андроиде. Я подумал, а что если написать калькулятор полностью на голосовом управлении (удобно ли будет?). Но для начала пришлось немного разобраться с самим голосовым управление, точнее говоря с голосовым вводом (управления еще добиться надо). Кроме того, я только что скачал Android Studio, и мне не терпелось скорей опробовать ее на практике (ну на минипроекте). Что ж, начнем.

Кидаем на активность ListView и Button. В ЛистВью будем сохранять сами команды, точнее варианты одной команды, а кнопка будет вежливо спрашивать, чего мы желаем. Да, программа логикой не будет обладать, с ее помощью просто посмотрим саму реализацию.

Добавим так же в Манифест одно разрешение

И все, теперь можно переходить непосредственно к программированию. «Находим необходимые компоненты»:

Прописываем обработчик нажатия для кнопки, который вызовет метод startSpeak(), о котором мы поговорим далее:

Ну наконец закончилась «вода». Начинаем «говорить»:

Пришло время дать волю фантазии и решить какие команды использовать. Сам я сначала хотел показать на примере тетрисного танчика: диктовали бы ему «up», «down», «left», «fire» и так далее, но это сложно оставляю вам. Я же отдавал команды по смене цвета кнопки, выходу из приложения, открытию страниц в браузере, запуску карт и перезагрузке устройства. Что касается последнего, reboot, это команда будет работать, как я понял, только на рутованных устройствах. На телефоне у меня есть права СП и все хорошо работает, а вот на планшете, он просто игнорирует эту команду. В записи команд нет ничего сложного, думаю комментариев будет достаточно:

Читайте также:  Настройка устройства андроид висит уведомление что это

Так выглядит окно записи команд:

Скажем с красивым английским акцентом «maps». Вызвали Google Maps:

Как видите, в списке выводятся все возможные (похожие) слова и из них уже выбирается необходимое нам.

Ну и на «finish», я закончил беседу с бездушной (или нет?) машиной.

Надеюсь моя небольшая статья побудит кого-нибудь на создание (не, не терминатора) какого-либо перспективного проекта, который упростит повседневную жизнь людям, а вам принесет миллионы, ну или хотя бы окажется полезной. Дерзайте!

Источник

Android-приложение для распознавания голоса

Информация о проекте: метаданные о проекте.

Версия платформы: Android API Level 15.
IDE: Eclipse Helios Service Release 2
Эмулятор: Android 4.1 (API 16)

Предварительное условие: предварительное знание инфраструктуры приложений Android и Intent.

Функция распознавания голоса может быть достигнута RecognizerIntent. Создайте Intent типа RecognizerIntent, передайте дополнительные параметры и запустите действие для результата. Он в основном запускает запрос распознавателя, настроенный вашими дополнительными параметрами Внутреннее распознавание голоса связывается с сервером и получает результаты. Таким образом, вы должны предоставить разрешение на доступ в Интернет для приложения. Android Jelly Bean (уровень API 16) не требует подключения к Интернету для распознавания голоса. Как только распознавание голоса выполнено, распознаватель возвращает значение в параметрах метода onActivityResult ().

Сначала создайте проект с помощью Eclipse> Файл> Новый проект> Проект приложения Android . Появится следующее диалоговое окно. Заполните обязательные поля, т.е. Имя приложения, Имя проекта и Пакет. Теперь нажмите следующую кнопку.

Когда появится диалоговое окно, выберите BlankActivity и нажмите кнопку « Далее» .

Источник

Автономное Распознавание Речи В Android (JellyBean)

похоже, что Google сделал автономное распознавание речи доступным из Google Now для сторонних приложений. Он используется приложение с именем Utter.

кто-нибудь видел какие-либо реализации того, как делать простые голосовые команды с этой автономной речью rec? Вы просто используете обычный SpeechRecognizer API, и он работает автоматически?

8 ответов:

Google спокойно включил автономное распознавание в этом обновлении поиска, но пока нет API или дополнительных параметров, доступных в SpeechRecognizer-класс. функциональность доступна без дополнительного кодирования, однако устройство пользователя должно быть настроено правильно, чтобы оно начало работать, и именно в этом заключается проблема, и я бы предположил, почему многие разработчики предполагают, что они » отсутствуют нечто.’

кроме того, Google ограничил некоторые устройства Jelly Bean от использования автономного распознавания из-за аппаратных ограничений. К каким устройствам это относится, не задокументировано, на самом деле ничего не задокументировано, поэтому настройка возможностей для пользователя оказалась вопросом проб и ошибок (для них). Это работает для некоторых сразу – для тех, кто этого не делает, это «руководство», которое я им предоставляю.

  1. убедитесь, что голос Android по умолчанию Поезд находится в Google не Samsung / Vlingo
  2. удалите все автономные файлы распознавания, которые вы уже установили из настроек голосового поиска Google
  3. перейдите в Настройки Приложения для Android и посмотрите, можете ли вы удалить обновления для поиска Google и голосового поиска Google приложения.
  4. если вы не можете сделать выше, перейдите в Play Store, чтобы узнать, есть ли у вас вариант есть.
  5. перезагрузка (Если вы достигли 2, 3 или 4)
  6. обновление Google Search и Google Voice Search из Play Store (если вы достигли 3 или 4 или если обновление доступно в любом случае).
  7. перезагрузка (Если вы достигли 6)
  8. установить английский язык в Великобритании автономные языковые файлы
  9. перезагрузка
  10. использовать несусветная! подключение
  11. переключитесь в режим самолета и попробуйте
  12. как только он работает, автономное распознавание других языков, как английский язык Мы тоже должны начать работать.

EDIT: временное изменение локали устройства на английский UK также, похоже, запускает это для некоторых.

некоторые пользователи сообщили, что им все еще приходилось перезагружаться несколько раз, прежде чем он начнет работать, но все они в конечном итоге попадают туда, часто необъяснимо к тому, что было триггером, ключ к которому находится внутри поиск в Google APK, Так что не в общественном достоянии или части AOSP.

из того, что я могу установить, Google проверяет доступность соединения до принятия решения о том, следует ли использовать автономное или Онлайн-распознавание. Если соединение доступно изначально, но потеряно до ответа, Google предоставит ошибку подключения, она не вернется в автономный режим. В качестве побочного Примечания, если запрос на синтезированный голос сети был сделан, нет ошибки, предоставленной ему, если не удается – вы получаете тишину.

обновление поиска Google включить новые функции в Google теперь и в самом деле, если вы попытаетесь использовать его без подключения к интернету, это будет ошибка. Я упоминаю об этом, поскольку я задавался вопросом, будет ли способность отозвана так же тихо, как она появилась, и поэтому не следует полагаться на производство.

Если вы собираетесь начать использовать класс SpeechRecognizer, будьте осторожны, есть довольно главная ошибка связанные с ним, которые требуют своей реализации в обращении.

не будучи в состоянии конкретно запросить offline = true, делает управление этой функцией невозможным без манипулирования подключением к данным. Мусор. Вы получите сотни пользовательских писем с вопросом, почему вы не включили что-то настолько простое!

EDIT: С уровня API 23 был добавлен новый параметр EXTRA_PREFER_OFFLINE которого служба распознавания Google, похоже, придерживается.

надеюсь, что выше не помогает.

Я хотел бы улучшить руководство, что ответ https://stackoverflow.com/a/17674655/2987828 отправляет своим пользователям, с изображениями. Это предложение «для тех, кто этого не делает, это «руководство», которое я им предоставляю.»что я хочу улучшить.

пользователь должен нажать на четыре кнопки, выделенные синим цветом на этих изображениях:

затем пользователь может выбрать любой нужный язык. Когда загрузка будет сделав это, он должен отключиться от сети, а затем нажать на кнопку «микрофон» клавиатуры.

Он работал для меня (android 4.1.2), затем распознавание языка работало из коробки, без перезагрузки. Теперь я могу диктовать инструкции оболочке эмулятора терминала ! И это в два раза быстрее в автономном режиме, чем в интернете, на padfone 2 от ASUS.

эти изображения лицензированы под cc by-sa 3.0 с атрибуцией, необходимой для stackoverflow.com/a/21329845/2987828 ; вы можете поэтому добавьте эти изображения в любом месте вместе с этой атрибуцией.

(Это стандартная политика всех изображений и текстов на stackoverflow.com)

простое и гибкое автономное распознавание на Android реализовано CMUSphinx, инструментарием распознавания речи с открытым исходным кодом. Он работает чисто в автономном режиме, быстро и настраивается он может слушать непрерывно для ключевых слов, например.

вы можете найти последний код и обучение.

короче, у меня нет реализации, но объяснение.

Google не сделал автономное распознавание речи доступным для сторонних приложений. Автономное распознавание доступно только с помощью клавиатуры. Бен Рэнделл (разработчик несусветная!) объясняет его обходной путь в статье на Android полиции:

я реализовал свою собственную клавиатуру и переключался между Google Голосовой ввод и клавиатура по умолчанию для пользователей с невидимым редактированием текстовое поле и прозрачная деятельность, чтобы получить вход. Грязный хак!

это был единственный способ сделать это, так как автономный голосовой ввод мог быть только запускается IME или системным приложением (это был мой корень рубить) . Другой тип API распознавания . не вызвал его и просто потерпел неудачу с ошибкой сервера. . Много работы потрачено впустую для меня на обходной путь! Но по крайней мере я был готов к реализации.

Я успешно реализовал свою речевую службу с автономными возможностями, используя onPartialResults в автономном режиме и onResults в режиме онлайн.

Я имел дело с этим, и я заметил, что вам нужно установить автономный пакет для вашего языка. Моя языковая настройка была » Español (Estados Unidos)», но для этого языка нет автономного пакета, поэтому, когда я отключил все сетевые подключения, я получил предупреждение от RecognizerIntent, сказав, что не могу добраться до Google, затем я меняю язык на » английский (США)» (потому что у меня уже есть автономный пакет) и запустил RecognizerIntent, он просто работал из.

ключи: языковая настройка = = автономный пакет распознавания голоса

по-видимому, можно вручную установить автономное распознавание голоса, загрузив файлы напрямую и установив их в нужных местах вручную. Я думаю, это просто способ обойти требования к оборудованию компании Google. Однако лично мне не пришлось перезагружаться или что-то еще, просто перейдя в Великобританию и обратно, сделал это.

MyService.класс

для более подробной информации,

надеюсь, что это поможет кому-то в будущем.

Источник

Оцените статью