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

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

  • Перед началом работы
  • Распознавание речи
  1. Начало работы
  2. Как распознать длинные аудиофайлы в API v3 и v2

Как распознать длинные аудиофайлы в SpeechKit

Статья создана
Yandex Cloud
Обновлена 28 апреля 2025 г.
  • Перед началом работы
  • Распознавание речи

Сервис позволяет распознавать речь различными способами. В примере аудиофайл распознается с помощью асинхронного распознавания. Асинхронное распознавание доступно в API v3 и API v2. Для асинхронного распознавания действуют ограничения:

  • максимальная длительность аудио — 4 часа;
  • максимальный размер файла — 1 ГБ.

Для работы с API в примере используется утилита cURL. Если вы хотите использовать Python-скрипт для работы с API, обратитесь к практическим руководствам.

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

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

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

    Важно

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

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

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

  5. Скачайте пример аудиофайла:

    • для API v3 — файл WAV;
    • для API v2 — файл LPCM.

Распознавание речиРаспознавание речи

API v3
API v2
  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. Получите ссылку на аудиофайл в Object Storage.

  2. Создайте файл body.json и добавьте в него код:

    {
       "config": {
          "specification": {
             "languageCode": "ru-RU",
             "model": "general",
             "audioEncoding": "LINEAR16_PCM",
             "sampleRateHertz": 8000,
             "audioChannelCount": 1
          }
       },
       "audio": {
          "uri": "<ссылка_на_аудиофайл>"
       }
    }
    

    Где:

    • languageCode — язык, для которого будет выполнено распознавание.

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

    • audioEncoding — формат передаваемого аудиофайла.

    • sampleRateHertz — частота дискретизации аудиофайла в Гц.

    • audioChannelCount — количество аудиоканалов.

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

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

  3. Выполните созданный файл:

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

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

    {
       "done": false,
       "id": "e03sup6d5h1q********",
       "createdAt": "2019-04-21T22:49:29Z",
       "createdBy": "ajes08feato8********",
       "modifiedAt": "2019-04-21T22:49:29Z"
    }
    

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

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

  5. Отправьте запрос на получение информации об операции:

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

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

    {
       "done": true,
       "response": {
          "@type": "type.googleapis.com/yandex.cloud.ai.stt.v2.LongRunningRecognitionResponse",
          "chunks": [
             {
                "alternatives": [
                   {
                      "words": [
                         {
                            "startTime": "0.160s",
                            "endTime": "0.500s",
                            "word": "привет",
                            "confidence": 1
                         },
                         {
                            "startTime": "0.580s",
                            "endTime": "0.800s",
                            "word": "мир",
                            "confidence": 1
                         }
                      ],
                      "text": "Привет мир",
                      "confidence": 1
                   }
                ],
                "channelTag": "1"
             }
          ]
       },
       "id": "e03jjenu23uc********",
       "createdAt": "2024-08-22T11:39:22Z",
       "createdBy": "aje3bg430agh********",
       "modifiedAt": "2024-08-22T11:39:23Z"
    }
    

    Если распознать речь в переданном файле не удалось, секция response.chunks может отсутствовать в ответе.

См. такжеСм. также

  • Распознавание речи
  • API v3 асинхронного распознавания
  • API v2 асинхронного распознавания
  • Аутентификация в API SpeechKit
  • Асинхронное распознавание аудиофайлов в формате WAV в API v3
  • Асинхронное распознавание аудиофайлов в формате OggOpus в API v2

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

Предыдущая
Как распознать короткие аудиофайлы в API v1
Следующая
Как синтезировать речь в API v1
Проект Яндекса
© 2025 ООО «Яндекс.Облако»