Потоковый режим распознавания речи
Потоковый режим позволяет одновременно отправлять аудио на распознавание и получать результаты распознавания в рамках одного соединения. Кроме того, в потоковом режиме вы можете получать промежуточные результаты распознавания, когда говорящий еще не закончил фразу. После паузы SpeechKit вернет финальные результаты и начнет распознавание новой фразы.
В таком режиме распознавания работают голосовые помощники и умные колонки. Когда вы активируете помощника, он начинает передавать речь на сервер для распознавания. Сервер обрабатывает данные и возвращает промежуточные и финальные результаты распознавания каждой фразы. Промежуточные результаты используются, чтобы показать ход распознавания, а после финальных результатов помощник выполняет действие, например включает музыку или звонит другому человеку.
Важно
Потоковый режим предназначен для распознавания аудио в режиме реального времени. Для распознавания уже записанного аудиофайла используйте синхронный или асинхронный режим распознавания аудиозаписей.
Ограничения потокового распознавания
Потоковое распознавание SpeechKit имеет ряд ограничений, которые нужно учитывать при создании приложения. Полный список действующих в SpeechKit ограничений см. в разделе Квоты и лимиты в SpeechKit.
Потоковое распознавание | |
---|---|
Сценарии использования | Телефонные ассистенты и роботы Виртуальные ассистенты |
Входные данные | Голос в режиме реального времени |
Принцип работы | Обмен сообщениями с сервером в рамках одного соединения |
Поддерживаемые API | gRPC v2 gRPC v3 |
Максимальная длительность аудиоданных | 5 минут |
Максимальный объем переданных данных | 10 МБ |
Количество распознаваемых каналов | 1 |
Использование сервиса
Чтобы использовать сервис, создайте приложение, которое будет отправлять фрагменты аудио и обрабатывать ответ с результатами распознавания.
Код интерфейса клиентского приложения
SpeechKit имеет две версии API потокового распознавания: API v3 и API v2. Для новых проектов мы рекомендуем использовать API v3.
Чтобы приложение могло обращаться к сервису, склонируйте репозиторий Yandex Cloud API
Примеры клиентского приложения:
- Потоковое распознавание аудиофайла с помощью API v3.
- Потоковое распознавание речи с микрофона с помощью API v3.
- Пример использования API v2 потокового распознавания.
Помимо этого в документации gRPC
Важно
При запросе результатов операции gRPC-клиенты по умолчанию ограничивают максимальный размер сообщения, который они могут принять в качестве ответа, — не более 4 МБ. Если ответ с результатами распознавания будет больше этого размера, то вы получите ошибку.
Чтобы получить ответ целиком, повысьте ограничение на максимальный размер сообщения:
- для Go используйте функцию MaxCallRecvMsgSize
; - для C++ в методе call
задайте значениеmax_receive_message_size
.
Аутентификация в сервисе
В каждом запросе приложение должно передавать IAM-токен или API-ключ для аутентификации в сервисе, а также идентификатор каталога, на который у аккаунта есть роль ai.speechkit-stt.user
или выше. Подробнее о необходимых разрешениях см. в разделе Управление доступом.
Для аутентификации приложения удобнее всего использовать сервисный аккаунт. При аутентификации с сервисным аккаунтом не передавайте идентификатор каталога в запросах — SpeechKit использует каталог, в котором был создан сервисный аккаунт.
Подробнее об аутентификации в SpeechKit.
Запрос распознавания
Для распознавания речи приложение сначала должно отправить сообщение с настройками распознавания:
- для API v3 — сообщение RecognizeStreaming с типом
session_options
. - для API v2 — сообщение
StreamingRecognitionRequest
с типом RecognitionConfig.
После настройки сессии сервер будет ожидать сообщений с аудиофрагментами (chunks) — отправляйте сообщение RecognizeStreaming
с типом session_options или сообщение StreamingRecognitionRequest
с типом audio_content в API v2. При отправке сообщений учитывайте следующие рекомендации:
- Не отправляйте аудиофрагменты слишком часто или редко. Время между отправкой сообщений в сервис должно примерно совпадать с длительностью отправляемых аудиофрагментов, но не должно превышать 5 секунд. Например, каждые 400 мс отправляйте на распознавание 400 мс аудио.
- Максимальная длительность переданного аудио за всю сессию — 5 минут.
- Максимальный размер переданных аудиоданных — 10 МБ.
Если в течение 5 секунд в сервис не отправлялись сообщения или достигнут лимит по длительности или размеру данных, сессия обрывается. Чтобы продолжить распознавание речи, надо заново установить соединение и отправить новое сообщение с настройками распознавания.
Не дожидаясь окончания потока сообщений с аудиофрагментами, SpeechKit будет возвращать промежуточные результаты распознавания.
Результат распознавания
В каждом сообщении с результатами распознавания (StreamingResponse или StreamingRecognitionResponse) сервер SpeechKit возвращает один или несколько фрагментов речи, которые он успел распознать за этот промежуток (chunks
). Для каждого фрагмента речи указывается список вариантов распознанного текста (alternatives
).
Сервер SpeechKit возвращает результаты распознавания с указанием их типа:
-
partial
— для промежуточных результатов; -
final
— для окончательных результатов; -
final_refinement
— для нормализованных окончательных результатов.При включенной нормализации приходят результаты
final
иfinal_refinement
.
В API v2, если распознавание еще не завершилось, результаты содержат параметр final
со значением False
.
Распознавание речи завершается, и приходят окончательные результаты, когда наступает EOU (End-of-Utterance). Он является признаком конца фразы. EOU происходит в следующих случаях:
-
Завершилась gRPC-сессия.
-
Была распознана тишина в последнем фрагменте речи. Тишину можно передать с помощью одного из двух параметров:
chunk
— звук, который распознается как тишина.silence_chunk
— длительность тишины в миллисекундах. Параметр позволяет уменьшить размер пакета с аудио и не передавать в нем тишину, которую не нужно распознавать.