Сравнение использования распознавания речи в Android: по Intent или on-thread?

Введение

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

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

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

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

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

Используя Intent:

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

но

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

Используя SpeechRecognizer:

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

но

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

Ответы

Ответ 1

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

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

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

SpeechRecognizer

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

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

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

  • Лучше справиться с ошибками

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

Намерение

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

Вот ссылка https://audext.com/speech-to-text/ с речью на текстовый конвертер онлайн. Я думаю, что это самый простой способ передачи речи в настоящее время. Вы можете преобразовать 1-часовую речь в текст всего за 10-15 минут.