API асинхронного распознавания речи (gRPC)
Асинхронное распознавание по протоколу gRPC проходит в несколько шагов:
- Создание клиентского приложения.
- Загрузка файла для распознавания.
- Создание задачи на асинхронное распознавание.
- Проверка статуса задачи.
- Скачивание результата.
Запросы к API передаются на адрес:
smartspeech.sber.ru
Заголовки запросов и ответов для всех шагов одинаковы:
Заголовки запроса
Заголовки ответа
Создание приложения
Для работы с сервисом распознавания речи SaluteSpeech создайте клиентское приложение. Вы можете использовать любой язык программирования, который есть в библиотеке для работы с gRPC.
При написании приложения используйте proto-файл.
Подробную инструкцию по написанию клиентских приложений для gRPC с примерами вы найдете в официальной документации gRPC (на английском языке).
Загрузка файла
При обращении по gRPC-протоколу клиентское приложение отправляет аудиофайл с помощью метода Upload
. Аудиофайл отправляется в виде чанков в сообщении UploadRequest.file_chunk
типа bytes
.
Сервис вернет сообщение UploadResponse
с идентификатором загруженного файла в параметре request_file_id
.
Протокол взаимодействия смотрите по ссылке.
Создание задачи
С помощью метода AsyncRecognize
клиентское приложение передает идентификатор загруженного файла и параметры распознавания. В ответе сервис вернет уникальный идентификатор задачи на распознавание.
При написании приложения используйте proto-файл.
Получение статуса задачи
Клиентское приложение передает идентификатор задачи на распознавание с помощью метода Task
. Если задача готова, в ответе придет объект Task
со статусом DONE
и идентификатор файла с результатом распознавания в параметре response_file_id
. При статусе ERROR
описание ошибки будет отображаться в параметре error
.
Пример структуры Task для gRPC можно посмотреть по ссылке.
Отмена задачи
Если при проверке статуса сервис вернул объект Task
со статусом NEW
, задачу можно отменить. Клиентское приложение передает идентификатор задачи с помощью метода CancelTask
. В ответе сервис вернет объект Task
со статусом CANCELED
.
Пример структуры Task
для gRPC можно посмотреть по ссылке.
Скачивание результата
Клиентское приложение передает идентификатор файла с результатом распознавания с помощью метода Download
. Значение передается в параметре response_file_id
сообщения DownloadRequest
. Сервис вернет результат распознавания в виде чанков в сообщении DownloadResponse
.
Параметры ответа
Примеры ответа
- Стандартный ответ
- Разделение спикеров
- Insight-модели
[
{
"results": [
{
"text": "раз два три",
"normalized_text": "1 2 3",
"start": "0.760s",
"end": "2s",
"word_alignments": [
{
"word": "раз",
"start": "0.760s",
"end": "0.880s"
},
{
"word": "два",
"start": "1.340s",
"end": "1.460s"
},
{
"word": "три",
"start": "1.880s",
"end": "2s"
}
]
}
],
"eou": true,
"emotions_result": {
"positive": 0.017408885,
"neutral": 0.7625851,
"negative": 0.22000594
},
"processed_audio_start": "0s",
"processed_audio_end": "2.447375104s",
"backend_info": {
"model_name": "general",
"model_version": "M-01.018.00-general-01",
"server_version": "01.017.00-04"
},
"channel": 0
},
{
"results": [
{
"text": "раз два три",
"normalized_text": "1 2 3",
"start": "0.760s",
"end": "2s",
"word_alignments": [
{
"word": "раз",
"start": "0.760s",
"end": "0.880s"
},
{
"word": "два",
"start": "1.340s",
"end": "1.460s"
},
{
"word": "три",
"start": "1.880s",
"end": "2s"
}
]
}
],
"eou": true,
"emotions_result": {
"positive": 0.018223174,
"neutral": 0.76795995,
"negative": 0.2138168
},
"processed_audio_start": "0s",
"processed_audio_end": "2.447375104s",
"backend_info": {
"model_name": "general",
"model_version": "M-01.018.00-general-01",
"server_version": "01.017.00-04"
},
"channel": 1
}
]
[
{
"results": [
{
"text": "один два",
"normalized_text": "1 2",
"start": "0.320s",
"end": "0.960s",
"word_alignments": [
{
"word": "один",
"start": "0.320s",
"end": "0.519999968s"
},
{
"word": "два",
"start": "0.640s",
"end": "0.960s"
}
]
}
],
"eou": false,
"emotions_result": {
"positive": 0.22309092,
"neutral": 0.39286476,
"negative": 0.38404432
},
"processed_audio_start": "0s",
"processed_audio_end": "2.444875008s",
"backend_info": {
"model_name": "general",
"model_version": "M-02.002.00-general-01",
"server_version": "02.004.00-rh8-trt-02"
},
"channel": 0,
"speaker_info": {
"speaker_id": 2,
"main_speaker_confidence": 0.31004992
}
},
{
"results": [
{
"text": "один два четыре пять шесть",
"normalized_text": "1, 3, 4, 5 6.",
"start": "0.320s",
"end": "1.880s",
"word_alignments": [
{
"word": "один",
"start": "0.320s",
"end": "0.500s"
},
{
"word": "два",
"start": "0.780s",
"end": "0.880s"
},
{
"word": "четыре",
"start": "1.160s",
"end": "1.380s"
},
{
"word": "пять",
"start": "1.480s",
"end": "1.620s"
},
{
"word": "шесть",
"start": "1.700s",
"end": "1.880s"
}
]
}
],
"eou": false,
"emotions_result": {
"positive": 0.0006413624,
"neutral": 0.9987526,
"negative": 0.000606051
},
"processed_audio_start": "0s",
"processed_audio_end": "2.444875008s",
"backend_info": {
"model_name": "general",
"model_version": "M-02.002.00-general-01",
"server_version": "02.004.00-rh8-trt-02"
},
"channel": 0,
"speaker_info": {
"speaker_id": -1,
"main_speaker_confidence": 0.31374687
}
},
{
"results": [
{
"text": "четыре пять шесть",
"normalized_text": "4, 5 6.",
"start": "1.140s",
"end": "1.900s",
"word_alignments": [
{
"word": "четыре",
"start": "1.140s",
"end": "1.400s"
},
{
"word": "пять",
"start": "1.480s",
"end": "1.620s"
},
{
"word": "шесть",
"start": "1.680s",
"end": "1.900s"
}
]
}
],
"eou": true,
"emotions_result": {
"positive": 0.11293165,
"neutral": 0.6017238,
"negative": 0.28534454
},
"processed_audio_start": "0s",
"processed_audio_end": "2.444875008s",
"backend_info": {
"model_name": "general",
"model_version": "M-02.002.00-general-01",
"server_version": "02.004.00-rh8-trt-02"
},
"channel": 0,
"speaker_info": {
"speaker_id": 1,
"main_speaker_confidence": 0.3762032
}
}
]
{
"insight_result": {
"csi": {
"positive": 0.6,
"negative": 0.4,
"prediction": 1
}
},
"result": [см. в примере результата без оценки CSI]
}
Коды ошибок
Сервис SaluteSpeech сообщает об ошибках стандартными gRPC-статусами.
Некоторые коды и описание ошибок:
Код | Описание |
---|---|
|
Клиент неправильно заполнил параметры запроса |
|
Не определена модель из запроса |
|
Клиенту недоступно API |
|
Клиент превысил квоту |
|
Слишком много запросов |
|
Ошибка в работе сервиса |
|
Клиент не предоставил или предоставил истекший/невалидный токен в заголовке Authorization |