Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex SpeechKit
  • Обзор технологий SpeechKit
    • Распознавание речи с помощью Playground
    • Синтез речи с помощью Playground
      • Потоковое распознавание аудиофайла API v3
      • Потоковое распознавание речи с микрофона API v3
      • Автоматическое определение языка — API v3
      • Потоковое распознавание API v2
      • Синхронное распознавание API v1
      • Асинхронное распознавание аудиофайлов в формате WAV — API v3
      • Асинхронное распознавание формата LPCM — API v2
      • Асинхронное распознавание формата OggOpus — API v2
      • Регулярное асинхронное распознавание аудиофайлов — API v2
  • Поддерживаемые форматы аудио
  • Интеграция телефонии
  • Квоты и лимиты
  • Управление доступом
  • Правила тарификации

В этой статье:

  • Перед началом работы
  • Выполните распознавание с помощью API v3
  1. Пошаговые инструкции
  2. Распознавание
  3. Асинхронное распознавание аудиофайлов в формате WAV — API v3

Асинхронное распознавание аудиофайлов в формате WAV в API v3

Статья создана
Yandex Cloud
Улучшена
Владислав Ю.
Обновлена 28 апреля 2025 г.
  • Перед началом работы
  • Выполните распознавание с помощью API v3

Ниже рассмотрен пример асинхронного распознавания речи из аудиофайла в формате WAV с помощью API v3 SpeechKit. В примере заданы параметры:

  • формат аудиопотока — WAV;
  • модель распознавания речи — general;
  • остальные параметры оставлены по умолчанию.

Аутентификация происходит от имени сервисного аккаунта с помощью API-ключа или IAM-токена. Подробнее об аутентификации в API SpeechKit см. в справочнике API.

Перед началом работыПеред началом работы

  1. Создайте бакет и загрузите в него аудиофайл, который вы хотите распознать.

  2. Создайте сервисный аккаунт.

    Важно

    Асинхронно распознать аудиофайлы можно только от имени сервисного аккаунта. Не используйте для этого другие аккаунты в Yandex Cloud.

  3. Назначьте сервисному аккаунту роли storage.uploader и ai.speechkit-stt.user на каталог, в котором вы ранее создали бакет.

  4. Получите IAM-токен или API-ключ для созданного сервисного аккаунта.

Если у вас нет аудиофайла в формате WAV, вы можете использовать пример файла.

Выполните распознавание с помощью API v3Выполните распознавание с помощью API v3

cURL
Python 3
  1. Получите ссылку на аудиофайл в Object Storage.

  2. Создайте файл, например request.json, и добавьте в него код:

    {
      "uri": "https://storage.yandexcloud.net/<название_бакета>/<путь_к_WAV-файлу_в_бакете>",
      "recognition_model": {
        "model": "general",
        "audio_format": {
          "container_audio": {
            "container_audio_type": "WAV"
          }
        }
      }
    }
    

    Где:

    • uri — ссылка на аудиофайл в Object Storage. Пример ссылки: https://storage.yandexcloud.net/speechkit/speech.wav.

      Для бакета с ограниченным доступом в ссылке присутствуют дополнительные query-параметры (после знака ?). Эти параметры не нужно передавать в SpeechKit — они игнорируются.

    • model — модель распознавания речи.

    • container_audio_type — тип аудиоконтейнера.

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

    • С помощью IAM-токена:

      export IAM_TOKEN=<IAM-токен_сервисного_аккаунта> && \
      curl \
        --insecure \
        --header "Authorization: Bearer ${IAM_TOKEN}" \
        --data @request.json https://stt.api.cloud.yandex.net:443/stt/v3/recognizeFileAsync
      

      Где IAM_TOKEN — IAM-токен сервисного аккаунта.

    • С помощью API-ключа.

      Используйте API-ключи, если у вас нет возможности автоматически запрашивать IAM-токен.

      export API_KEY=<API-ключ_сервисного_аккаунта> && \
      curl \
        --insecure \
        --header "Authorization: Api-Key ${API_KEY}" \
        --data @request.json https://stt.api.cloud.yandex.net:443/stt/v3/recognizeFileAsync
      

    Пример результата:

    {
       "id":"f8ddr61b30fk********",
       "description":"STT v3 async recognition",
       "createdAt":"2024-07-15T07:39:36Z",
       "createdBy":"ajehumcuv38h********",
       "modifiedAt":"2024-07-15T07:39:36Z",
       "done":false,
       "metadata":null
    }
    

    Сохраните идентификатор (id) операции распознавания, полученный в ответе.

  4. Дождитесь, когда завершится распознавание. Одна минута аудио распознается примерно за 10 секунд.

  5. Запросите информацию об операции:

    • С аутентификацией с помощью IAM-токена:

      curl \
        --insecure \
        --request GET \
        --header "Authorization: Bearer ${IAM_TOKEN}" \
        https://operation.stt.api.cloud.yandex.net/operations/<идентификатор_операции_распознавания>
      
    • С аутентификацией с помощью API-ключа:

      curl \
        --insecure \
        --request GET \
        --header "Authorization: Api-key ${API_KEY}" \
        https://operation.stt.api.cloud.yandex.net/operations/<идентификатор_операции_распознавания>
      

    Пример результата:

    {
       "done": true,
       "id": "f8ddr61b30fk********",
       "description": "STT v3 async recognition",
       "createdAt": "2024-07-15T07:39:36Z",
       "createdBy": "ajehumcuv38h********",
       "modifiedAt": "2024-07-15T07:39:37Z"
    }
    
  6. Запросите результат операции:

    • С аутентификацией с помощью IAM-токена:

      curl \
        --insecure \
        --request GET \
        --header "Authorization: Bearer ${IAM_TOKEN}" \
        https://stt.api.cloud.yandex.net:443/stt/v3/getRecognition?operation_id=<идентификатор_операции_распознавания>
      
    • С аутентификацией с помощью API-ключа:

      curl \
        --insecure \
        --request GET \
        --header "Authorization: Api-key ${API_KEY}" \
        https://stt.api.cloud.yandex.net:443/stt/v3/getRecognition?operation_id=<идентификатор_операции_распознавания>
      
    Пример результата
    {
       "result": {
          "sessionUuid": {
             "uuid": "24935f24-2c1f62dc-8dd49006-********",
             "userRequestId": "f8d2h7m07t4i********"
          },
          "audioCursors": {
             "receivedDataMs": "7400",
             "resetTimeMs": "0",
             "partialTimeMs": "7400",
             "finalTimeMs": "7400",
             "finalIndex": "0",
             "eouTimeMs": "0"
          },
          "responseWallTimeMs": "189",
          "final": {
             "alternatives": [
                {
                   "words": [
                      {
                         "text": "я",
                         "startTimeMs": "459",
                         "endTimeMs": "520"
                      },
                      {
                         "text": "яндекс",
                         "startTimeMs": "640",
                         "endTimeMs": "1060"
                      },
                      {
                         "text": "спичкит",
                         "startTimeMs": "1120",
                         "endTimeMs": "1959"
                      },
                      {
                         "text": "я",
                         "startTimeMs": "2480",
                         "endTimeMs": "2520"
                      },
                      {
                         "text": "могу",
                         "startTimeMs": "2580",
                         "endTimeMs": "2800"
                      },
                      {
                         "text": "превратить",
                         "startTimeMs": "2860",
                         "endTimeMs": "3360"
                      },
                      {
                         "text": "любой",
                         "startTimeMs": "3439",
                         "endTimeMs": "3709"
                      },
                      {
                         "text": "текст",
                         "startTimeMs": "3800",
                         "endTimeMs": "4140"
                      },
                      {
                         "text": "в",
                         "startTimeMs": "4200",
                         "endTimeMs": "4220"
                      },
                      {
                         "text": "речь",
                         "startTimeMs": "4279",
                         "endTimeMs": "4740"
                      },
                      {
                         "text": "теперь",
                         "startTimeMs": "5140",
                         "endTimeMs": "5759"
                      },
                      {
                         "text": "и",
                         "startTimeMs": "5859",
                         "endTimeMs": "5900"
                      },
                      {
                         "text": "вы",
                         "startTimeMs": "5980",
                         "endTimeMs": "6399"
                      },
                      {
                         "text": "можете",
                         "startTimeMs": "6660",
                         "endTimeMs": "7180"
                      }
                   ],
                   "text": "я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете",
                   "startTimeMs": "0",
                   "endTimeMs": "7400",
                   "confidence": 0,
                   "languages": []
                }
             ],
             "channelTag": "0"
          },
          "channelTag": "0"
       }
    }
    {
       "result": {
          "sessionUuid": {
             "uuid": "24935f24-2c1f62dc-8dd49006-********",
             "userRequestId": "f8d2h7m07t4i********"
          },
          "audioCursors": {
             "receivedDataMs": "7400",
             "resetTimeMs": "0",
             "partialTimeMs": "7400",
             "finalTimeMs": "7400",
             "finalIndex": "0",
             "eouTimeMs": "0"
          },
          "responseWallTimeMs": "189",
          "finalRefinement": {
             "finalIndex": "0",
             "normalizedText": {
                "alternatives": [
                   {
                      "words": [
                         {
                            "text": "я",
                            "startTimeMs": "459",
                            "endTimeMs": "520"
                         },
                         {
                            "text": "яндекс",
                            "startTimeMs": "640",
                            "endTimeMs": "1060"
                         },
                         {
                            "text": "спичкит",
                            "startTimeMs": "1120",
                            "endTimeMs": "1959"
                         },
                         {
                            "text": "я",
                            "startTimeMs": "2480",
                            "endTimeMs": "2520"
                         },
                         {
                            "text": "могу",
                            "startTimeMs": "2580",
                            "endTimeMs": "2800"
                         },
                         {
                            "text": "превратить",
                            "startTimeMs": "2860",
                            "endTimeMs": "3360"
                         },
                         {
                            "text": "любой",
                            "startTimeMs": "3439",
                            "endTimeMs": "3709"
                         },
                         {
                            "text": "текст",
                            "startTimeMs": "3800",
                            "endTimeMs": "4140"
                         },
                         {
                            "text": "в",
                            "startTimeMs": "4200",
                            "endTimeMs": "4220"
                         },
                         {
                            "text": "речь",
                            "startTimeMs": "4279",
                            "endTimeMs": "4740"
                         },
                         {
                            "text": "теперь",
                            "startTimeMs": "5140",
                            "endTimeMs": "5759"
                         },
                         {
                            "text": "и",
                            "startTimeMs": "5859",
                            "endTimeMs": "5900"
                         },
                         {
                            "text": "вы",
                            "startTimeMs": "5980",
                            "endTimeMs": "6399"
                         },
                         {
                            "text": "можете",
                            "startTimeMs": "6660",
                            "endTimeMs": "7180"
                         }
                      ],
                      "text": "Я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете",
                      "startTimeMs": "0",
                      "endTimeMs": "7400",
                      "confidence": 0,
                      "languages": []
                   }
                ],
                "channelTag": "0"
             }
          },
          "channelTag": "0"
       }
    }
    {
       "result": {
          "sessionUuid": {
             "uuid": "24935f24-2c1f62dc-8dd49006-********",
             "userRequestId": "f8d2h7m07t4i********"
          },
          "audioCursors": {
             "receivedDataMs": "7400",
             "resetTimeMs": "0",
             "partialTimeMs": "7400",
             "finalTimeMs": "7400",
             "finalIndex": "0",
             "eouTimeMs": "7400"
          },
          "responseWallTimeMs": "190",
          "eouUpdate": {
             "timeMs": "7400"
          },
          "channelTag": "0"
       }
    }
    
  1. Склонируйте репозиторий Yandex Cloud API:

    git clone https://github.com/yandex-cloud/cloudapi
    
  2. Установите пакет grpcio-tools с помощью менеджера пакетов pip:

    pip install grpcio-tools
    
  3. Перейдите в папку со склонированным репозиторием Yandex Cloud API, создайте папку output и сгенерируйте в ней код интерфейса клиента:

    cd <путь_к_папке_cloudapi>
    mkdir output
    python3 -m grpc_tools.protoc -I . -I third_party/googleapis \
      --python_out=output \
      --grpc_python_out=output \
      google/api/http.proto \
      google/api/annotations.proto \
      yandex/cloud/api/operation.proto \
      google/rpc/status.proto \
      yandex/cloud/operation/operation.proto \
      yandex/cloud/validation.proto \
      yandex/cloud/ai/stt/v3/stt_service.proto \
      yandex/cloud/ai/stt/v3/stt.proto
    

    В папке output будут созданы файлы с интерфейсом клиента: stt_pb2.py, stt_pb2_grpc.py, stt_service_pb2.py, stt_service_pb2_grpc.py и файлы зависимостей.

  4. Создайте в корне папки output файл, например test.py, и добавьте в него код для выполнения запроса к API:

    import grpc
    from yandex.cloud.ai.stt.v3 import stt_pb2, stt_service_pb2_grpc
    
    request = stt_pb2.RecognizeFileRequest(
      uri='https://storage.yandexcloud.net/<название_бакета>/<путь_к_WAV-файлу_в_бакете>',
      recognition_model=stt_pb2.RecognitionModelOptions(
        model='general',
        audio_format=stt_pb2.AudioFormatOptions(
          container_audio=stt_pb2.ContainerAudio(
            container_audio_type=stt_pb2.ContainerAudio.WAV
          )
        )
      )
    )
    
    cred = grpc.ssl_channel_credentials()
    chan = grpc.secure_channel('stt.api.cloud.yandex.net:443', cred)
    stub = stt_service_pb2_grpc.AsyncRecognizerStub(chan)
    
    # Выберите один из способов аутентификации:
    
    # Аутентификация с IAM-токеном
    response = stub.RecognizeFile(request, metadata=[('authorization', 'Bearer <IAM-токен>')])
    
    # Аутентификация с API-ключом
    # response = stub.RecognizeFile(request, metadata=[('authorization', 'Api-Key <API-ключ>')])
    
    print(response)
    
  5. Выполните запрос:

    python3 test.py
    

    Результат:

    id: "f8dem628l2mq********"
    description: "STT v3 async recognition"
    created_at {
      seconds: 1721032219
    }
    created_by: "ajehumcuv38h********"
    modified_at {
      seconds: 1721032219
    }
    

    Сохраните идентификатор (id) операции распознавания, полученный в ответе.

  6. Создайте в корне папки output файл, например results.py, и добавьте в него код для получения результата операции:

    import grpc
    from yandex.cloud.ai.stt.v3 import stt_pb2, stt_service_pb2_grpc, stt_service_pb2
    
    request = stt_service_pb2.GetRecognitionRequest(
        operation_id="<идентификатор_операции>"
    )
    
    cred = grpc.ssl_channel_credentials()
    chan = grpc.secure_channel('stt.api.cloud.yandex.net:443', cred)
    stub = stt_service_pb2_grpc.AsyncRecognizerStub(chan)
    
    # Аутентификация с IAM-токеном
    response = stub.GetRecognition(request, metadata=[('authorization', 'Bearer <IAM-токен>')])
    
    # Аутентификация с API-ключом
    # response = stub.GetRecognition(request, metadata=[('authorization', 'Api-Key <API-ключ>')])
    
    print(list(response))
    
  7. Выполните запрос:

    python3 results.py
    
    Пример результата
    [session_uuid {
      uuid: "df49eaa2-25a55218-ae967fa1-********"
      user_request_id: "f8dkup42nmhk********"
    }
    audio_cursors {
      received_data_ms: 6600
      partial_time_ms: 6600
      final_time_ms: 6600
    }
    response_wall_time_ms: 204
    final {
      alternatives {
        words {
          text: "я"
          start_time_ms: 380
          end_time_ms: 420
        }
        words {
          text: "яндекс"
          start_time_ms: 539
          end_time_ms: 919
        }
        words {
          text: "спичкит"
          start_time_ms: 960
          end_time_ms: 1719
        }
        words {
          text: "я"
          start_time_ms: 2159
          end_time_ms: 2200
        }
        words {
          text: "могу"
          start_time_ms: 2260
          end_time_ms: 2440
        }
        words {
          text: "превратить"
          start_time_ms: 2520
          end_time_ms: 3000
        }
        words {
          text: "любой"
          start_time_ms: 3060
          end_time_ms: 3320
        }
        words {
          text: "текст"
          start_time_ms: 3419
          end_time_ms: 3740
        }
        words {
          text: "в"
          start_time_ms: 3780
          end_time_ms: 3800
        }
        words {
          text: "речь"
          start_time_ms: 3860
          end_time_ms: 4279
        }
        words {
          text: "теперь"
          start_time_ms: 4680
          end_time_ms: 5240
        }
        words {
          text: "и"
          start_time_ms: 5339
          end_time_ms: 5380
        }
        words {
          text: "вы"
          start_time_ms: 5460
          end_time_ms: 5766
        }
        words {
          text: "можете"
          start_time_ms: 5920
          end_time_ms: 6393
        }
        text: "я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете"
        end_time_ms: 6600
      }
      channel_tag: "0"
    }
    channel_tag: "0"
    , session_uuid {
      uuid: "df49eaa2-25a55218-ae967fa1-********"
      user_request_id: "f8dkup42nmhk********"
    }
    audio_cursors {
      received_data_ms: 6600
      partial_time_ms: 6600
      final_time_ms: 6600
    }
    response_wall_time_ms: 204
    final_refinement {
      normalized_text {
        alternatives {
          words {
            text: "я"
            start_time_ms: 380
            end_time_ms: 420
          }
          words {
            text: "яндекс"
            start_time_ms: 539
            end_time_ms: 919
          }
          words {
            text: "спичкит"
            start_time_ms: 960
            end_time_ms: 1719
          }
          words {
            text: "я"
            start_time_ms: 2159
            end_time_ms: 2200
          }
          words {
            text: "могу"
            start_time_ms: 2260
            end_time_ms: 2440
          }
          words {
            text: "превратить"
            start_time_ms: 2520
            end_time_ms: 3000
          }
          words {
            text: "любой"
            start_time_ms: 3060
            end_time_ms: 3320
          }
          words {
            text: "текст"
            start_time_ms: 3419
            end_time_ms: 3740
          }
          words {
            text: "в"
            start_time_ms: 3780
            end_time_ms: 3800
          }
          words {
            text: "речь"
            start_time_ms: 3860
            end_time_ms: 4279
          }
          words {
            text: "теперь"
            start_time_ms: 4680
            end_time_ms: 5240
          }
          words {
            text: "и"
            start_time_ms: 5339
            end_time_ms: 5380
          }
          words {
            text: "вы"
            start_time_ms: 5460
            end_time_ms: 5766
          }
          words {
            text: "можете"
            start_time_ms: 5920
            end_time_ms: 6393
          }
          text: "Я яндекс спичкит я могу превратить любой текст в речь теперь и вы можете"
          end_time_ms: 6600
        }
        channel_tag: "0"
      }
    }
    channel_tag: "0"
    , session_uuid {
      uuid: "df49eaa2-25a55218-ae967fa1-********"
      user_request_id: "f8dkup42nmhk********"
    }
    audio_cursors {
      received_data_ms: 6600
      partial_time_ms: 6600
      final_time_ms: 6600
      eou_time_ms: 6600
    }
    response_wall_time_ms: 204
    eou_update {
      time_ms: 6600
    }
    channel_tag: "0"
    ]
    

Была ли статья полезна?

Предыдущая
Синхронное распознавание API v1
Следующая
Асинхронное распознавание формата LPCM — API v2
Проект Яндекса
© 2025 ООО «Яндекс.Облако»