×

Потоковое распознавание

 
Потоковый режим позволяет одновременно отправлять аудио на распознавание и получать результаты распознавания в рамках одного соединения. Кроме того, в потоковом режиме вы можете получать промежуточные результаты распознавания, когда говорящий еще не закончил фразу. После паузы SpeechKit вернет финальные результаты и начнет распознавание новой фразы.
 
    В таком режиме распознавания работают голосовые помощники и умные колонки. Когда вы активируете помощника, он начинает передавать речь на сервер для распознавания. Сервер обрабатывает данные и возвращает промежуточные и финальные результаты распознавания каждой фразы. Промежуточные результаты используются, чтобы показать ход распознавания, а после финальных результатов помощник выполняет действие, например включает музыку или звонит другому человеку.
Потоковый режим предназначен для распознавания аудио в режиме реального времени. Для распознавания уже записанного аудиофайла используйте синхронный или асинхронный режим распознавания аудиозаписей.
 
ОГРАНИЧЕНИЯ ПОТОКОВОГО РАСПОЗНАВАНИЯ
 
Потоковое распознавание SpeechKit имеет ряд ограничений, которые нужно учитывать при создании приложения. Полный список действующих в SpeechKit ограничений можно посмотреть в разделе Квоты и лимиты.
 
Потоковое распознавание
 Сценарии использования
Телефонные ассистенты и роботы
Виртуальные ассистенты
 Входные данные
Голос в режиме реального времени
 Принцип работы
Обмен сообщениями с сервером в рамках одного соединения
 Поддерживаемые API
 Максимальная длительность аудиоданных
5 минут
 Максимальный объем переданных данных
10 МБ
 Количество распознаваемых каналов
1
 
ИСПОЛЬЗОВАНИЕ СЕРВИСА
 
Чтобы использовать сервис, создайте приложение, которое будет отправлять фрагменты аудио и обрабатывать ответ с результатами распознавания.
 
КОД ИНТЕРФЕЙСА КЛИЕНТСКОГО ПРИЛОЖЕНИЯ
 
SpeechKit имеет две версии API потокового распознавания: API v3 и API v2. Для новых проектов мы рекомендуем использовать API v3.
Чтобы приложение могло обращаться к сервису, склонируйте репозиторий API.
и сгенерируйте код интерфейса клиента для используемого языка программирования из файла спецификации API v2 или APIv3.
 
Примеры клиентского приложения:
 
Помимо этого в документации gRPC вы можете найти подробные инструкции по генерации интерфейсов и реализации клиентских приложений для различных языков программирования.
При запросе результатов операции gRPC-клиенты по умолчанию ограничивают максимальный размер сообщения, который они могут принять в качестве ответа, — не более 4 МБ. Если ответ с результатами распознавания будет больше этого размера, то вы получите ошибку.
 
Чтобы получить ответ целиком, повысьте ограничение на максимальный размер сообщения:
- для Go используйте функцию MaxCallRecvMsgSize;
- для C++ в методе call задайте значение max_receive_message_size.
 
АУТЕНТИФИКАЦИЯ В СЕРВИСЕ
Если не зарегистрированы в сервисе Yandex Speech в Узбекистане Cloupard, вы можете запросить тестирование для своей организации здесь.
 
 
ЗАПРОС РАСПОЗНАВАНИЯ
 
Для распознавания речи приложение сначала должно отправить сообщение с настройками распознавания:
    для 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 — длительность тишины в миллисекундах. Параметр позволяет уменьшить размер пакета с аудио и не передавать в нем тишину, которую не нужно распознавать.