Сравнение использования распознавания речи в 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 минут.