Сравнение использования распознавания речи в Android: по намерению или по потоку?

введение

Android предоставляет мне два способа использовать распознавание речи.

на первый путь в Intent, как в этот вопрос: пример намерениях. Новый Activity нажимается на верхнюю часть стека, который слушает пользователя, слышит некоторую речь, пытается ее транскрибировать (обычно через облако), а затем возвращает результат в мое приложение через onActivityResult звонок.

на второй на получение SpeechRecognizer, как код здесь: пример SpeechRecognizer. Здесь, похоже, речь записывается и транскрибируется в какой-то другой поток, затем обратные вызовы приносят мне результаты. И это сделано не выходя из моей Activity.

Я хотел бы понять плюсы и минусы этих двух способов распознавания речи.

что у меня есть до сих пор

С помощью Intent:

  • прост код
  • избегает изобретать колесо
  • дает последовательный пользовательский опыт распознавания речи через устройство

но

  • может быть медленным для создания нового действия с собственным окном

С помощью SpeechRecognizer:

  • позволяет мне сохранять контроль над UI в мое приложение
  • дает мне дополнительные возможности для реагирования на (документация)

но

  • ограничено для вызова из основного потока
  • больше контроля требует дополнительной проверки.

3 ответов


В дополнение ко всему этому, я бы добавил хотя бы этот момент:

SpeechRecognizer лучше для hands-free пользовательских интерфейсов, так как ваше приложение фактически реагирует на условия ошибки, такие как "нет совпадений", и, возможно, перезапускается. Когда вы используете Intent, приложение подает звуковой сигнал и показывает диалоговое окно, в котором пользователь должен нажать Продолжить.

мое резюме выглядит следующим образом:

SpeechRecognizer

  • показать различный пользовательский интерфейс или нет пользовательский интерфейс. Ты правда ... хотите, чтобы пользовательский интерфейс вашего приложения издавал звуковой сигнал? Вы действительно хотите, чтобы ваш пользовательский интерфейс показывал диалог, когда есть ошибка, и ждал, пока пользователь нажмет?

  • приложение может сделать что-то еще, пока происходит распознавание речи

  • можно распознавать речь во время работы в фоновом режиме или сервис

  • может обрабатывать ошибки лучше

  • может получить доступ к низкоуровневым речевым материалам, таким как raw audio или RMS. Проанализируйте это аудио или использовать громкость, чтобы сделать какой-то мигающий свет, чтобы указать приложение слушает

намерение

  • последовательный и простой в использовании пользовательский интерфейс для пользователей
  • легко программы

основное отличие-пользовательский интерфейс. SpeechRecognizer не имеет, поэтому вы несете ответственность за его создание.
Я использовал, чтобы написать прототип, где у меня есть приемник для прослушивания гарнитуры, а затем активировать распознавание речи для прослушивания некоторых команд. Экран не был активирован, поэтому мне пришлось использовать SpeechRecognizer (мой пользовательский интерфейс был некоторые предварительно записанные звуки и текст в речь).

вторая разница в том, что SpeechRecognizer есть возможность для постоянного прослушивания. Intent version всегда завершает действие после определенный период. Например SpeechRecognizer используется распознаванием речи "клавиатура", так что вы можете диктовать SMS.
В таком случае вы получите только частичные результаты (в обычном режиме SpeechRecognizer дает только конечные результаты).


одна вещь, которую другие ответы не упоминали: если на устройстве установлено несколько распознавателей речи, то переключение между ними пользователя отличается в зависимости от того, "намерение" или Это.

  • в случае "намерения" появляется диалоговое окно выбора стандартной активности. Пользователь может выбрать распознаватель для использования и при необходимости установить его глобально в качестве распознавателя по умолчанию, чтобы избежать диалога в будущем.
  • в случае SpeechRecognizer в пользователь может установить и настроить распознаватель по умолчанию в глобальных настройках (Language and input -> Voice recognizer на ICS).

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