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

Используется, если требуется распознавание речи в процессе ее записи: протоколы телефонии, запись аудио на мобильных устройствах и прочее. Возможно отображение промежуточных результатов и автоматическое определение конца фразы.

Максимальный размер аудио – 1 Гб. Для многоканального аудио распознается только первый канал.

Запросы на распознавание передаются на адрес:

smartspeech.sber.ru

Создание приложения

Для работы с сервисом распознавания речи SmartSpeech вам необходимо создать клиентское приложение. Вы можете использовать любой язык программирования, который есть в библиотеке для работы с gRPC.

При написании приложения используйте proto-файл с нашей страницы на GitHub.

Подробную инструкцию по написанию клиентских приложений для gRPC с примерами вы найдете в официальной документации gRPC.

Передача параметров распознавания

При обращении по gRPC-протоколу с запросом распознавания речи клиентское приложение использует метод Recognize. В первом сообщении клиент должен отправить опции распознавания в сообщении типа RecognitionOptions. Параметры этого сообщения описаны ниже в таблице.

Параметр Описание

audio_encoding

enum (AudioEncoding)

Аудиокодек

Возможные значения смотрите в разделе Доступные кодировки аудио

sample_rate

int32

Частота дискретизации

Зависит от значения audio_encoding, подробнее читайте в разделе Доступные кодировки аудио

language

string

Международный код языка для распознавания речи

На данный момент поддерживается только русский язык — ru-RU

enable_profanity_filter

boolean

Фильтр обсценной лексики

true/false, значение по умолчанию — false

enable_multi_utterance

boolean

Распознавание либо одного, либо нескольких предложений

true/false, значение по умолчанию — false

enable_partial_results

boolean

Отправка промежуточных гипотез распознавания речи

true/false, значение по умолчанию — false

hypotheses_count

int32

Количество сообщаемых альтернативных гипотез распознанной речи

Любое число больше нуля и до 10, по умолчанию 1

model

string

Имя языковой модели для распознавания речи

Подробнее читайте в разделе Языковые модели

no_speech_timeout

Duration

Интервал ожидания речи пользователя

Возможные значения от 2 до 20 секунд.

По умолчанию – 7 секунд

max_speech_timeout

Duration

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

Возможные значения – от 0,5 до 20 секунд.

По умолчанию – 20 секунд

channels_count

int32

Количество каналов в многоканальном аудио.

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

Hints

Hints — составной тип, описан ниже

Hints.words

repeated string

Список слов или фраз, распознавание которых мы хотим усилить. Здесь можно перечислить слова, которые с высокой вероятностью будет произносить пользователь

Hints.enable_letters

boolean

Модель коротких фраз, улучшающая распознавание отдельных букв и коротких слов

true/false, значение по умолчанию — false

Hints.eou_timeout

Duration

Настройка распознавания конца фразы (End of Utterance — eou). Такое распознавание будет ожидаться после конца фразы столько секунд, сколько установлено в этом параметре

Возможные значения от 0.5 до 5 секунд. По умолчанию распознавание конца фразы срабатывает после 1 секунды

Процесс распознавания речи

Клиент передает аудио в составе сообщений RecognitionRequest.audio_chunk типа bytes, которые заполняет чанками (кусочек потокового аудио) бинарного потока аудио, и закрывает со своей стороны соединение на запись, если знает, что поток аудио на этом чанке прерывается.

Размер одного сообщения — не более 4 Мб. Длительность одного чанка — не более 2 секунд.
Пауза между сообщениями не должна превышать 5 секунд. Оптимально, чтобы длина паузы совпадала с длиной следующего чанка. Если такое ограничение не подходит, используйте асинхронное распознавание.

Сервис в ответ асинхронно передает клиенту сообщения RecognitionResponse, содержимое которых описано ниже.

Поле Описание

eou

boolean

Признак окончания распознанного предложения. Если true, то данный результат распознавания можно считать финальным. Если false, то возможно уточнение распознавания в следующих сообщениях

true/false

results

Hypothesis (составной тип, см. ниже)

Список гипотез распознавания речи

Гипотезы отсортированы по убыванию вероятности

Hypothesis.text

string

Не нормализованный результат распознавания (например, "сто двадцать три")

Hypothesis.normalized_text

string

Нормализованный результат распознавания (например, "123")

Hypothesis.start

google.protobuf.Duration

Время от начала аудио-записи до начала данной гипотезы в ней

Hypothesis.end

google.protobuf.Duration

Время от начала аудио-записи до конца данной гипотезы в ней

emotions_result

Emotions (составной тип, см. ниже)

Список эмоций ответа пользователя

Значения эмоционального окраса ответа пользователя приходят в виде коэффициентов в диапазоне от 0 до 1, где 1 — наиболее вероятная эмоция ответа, а 0 — наименее вероятная.

Значения заполняются только, если eou=true

Emotions.positive

float

Позитивный оттенок ответа пользователя

Emotions.neutral

float

Нейтральный оттенок ответа пользователя

Emotions.negative

float

Негативный оттенок ответа пользователя

backend_info

BackendInfo (составной тип, см. ниже)

Информация об использованных версиях модели и сервера

BackendInfo.model_name

string

Наименование модели, использованной для распознавания

BackendInfo.model_version

string

Версия модели, использованной для распознавания

BackendInfo.server_version

string

Версия сервера, использованного для распознавания

processed_audio_start

google.protobuf.Duration

Время начала обработанного фрагмента аудио

processed_audio_end

google.protobuf.Duration

Время окончания обработанного фрагмента аудио

В режиме enable_multi_utterance=false распознавание подаваемого клиентом потока звука продолжается до тех пор, пока сервис распознавания речи не определит конец предложения и не оповестит клиента об этом. Клиенту при этом передается финальный результат распознавания с проставленным флагом eou=true. Далее сервер закрывает соединение, все оставшиеся чанки звука будут проигнорированы.

В режиме enable_multi_utterance=true распознавание речи не останавливается с окончанием очередного предложения, которое будет отмечено в потоке ответов финальной гипотезой с флагом eou=true. После распознавания финальной фразы сервер закрывает соединение со статусом 0.

Сообщения об ошибках

Сервис SmartSpeech сообщает об ошибках стандартными gRPC-статусами, про которые можно подробно прочесть в официальной документации. Ниже в таблице приведены некоторые коды и описание ошибок.

Код Описание

3

INVALID_ARGUMENT

Клиент неправильно заполнил параметры распознавания речи

7

PERMISSION_DENIED

Клиенту недоступно API распознавания речи

9

RESOURCE_EXHAUSTED

Клиент превысил квоту на распознавание речи

13

INTERNAL

Ошибка в работе сервиса распознавания речи

16

UNAUTHENTICATED

Клиент не предоставил, либо предоставил истекший/невалидный Access Token в заголовке Authorization

Для каждого из сообщений подробное описание произошедшей ошибки указывается в поле message.