[Документация Yandex Cloud](../../index.md) > [speechkit](../index.md) > [Начало работы](index.md) > Как распознать длинные аудиофайлы в API v3 и v2

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


{% note info %}

В [регионе Казахстан](../../overview/concepts/region.md) доступна только версия API v3.

{% endnote %}


Сервис позволяет распознавать речь [различными способами](../stt/index.md#stt-ways). В примере аудиофайл распознается с помощью [асинхронного распознавания](../stt/transcribation.md). Асинхронное распознавание доступно в API v3 и API v2. Для асинхронного распознавания действуют ограничения:

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

Для работы с API в примере используется утилита [cURL](https://curl.se/). Если вы хотите использовать Python-скрипт для работы с API, обратитесь к [практическим руководствам](../tutorials/index.md#async-stt).

## Перед началом работы {#before-you-begin}

1. [Создайте](../../storage/operations/buckets/create.md) бакет и [загрузите](../../storage/operations/objects/upload.md) в него аудиофайл, который вы хотите распознать.
1. [Создайте](../../iam/operations/sa/create.md) сервисный аккаунт.

   {% note warning %}

   Асинхронно распознать аудиофайлы можно только от имени сервисного аккаунта. Не используйте для этого [другие аккаунты в Yandex Cloud](../../iam/concepts/users/accounts.md).

   {% endnote %}

1. [Назначьте](../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту роли `storage.uploader` и `ai.speechkit-stt.user` на каталог, в котором вы ранее создали бакет.
1. [Получите API-ключ](../../iam/operations/authentication/manage-api-keys.md#create-api-key) или [IAM-токен](../../iam/operations/iam-token/create-for-sa.md) для созданного сервисного аккаунта.
1. Скачайте пример аудиофайла:

   * для API v3 — [файл WAV](https://storage.yandexcloud.kz/doc-files/speech.wav);
   * для API v2 — [файл LPCM](https://storage.yandexcloud.kz/speechkit/speech.pcm).

## Распознавание речи {#speech-recognition}

{% list tabs %}

- API v3

  1. [Получите ссылку на аудиофайл](../../storage/operations/objects/link-for-download.md) в Object Storage.
  1. Создайте файл, например `request.json`, и добавьте в него код:
  
      ```json
      {
        "uri": "https://storage.yandexcloud.kz/<название_бакета>/<путь_к_WAV-файлу_в_бакете>",
        "recognition_model": {
          "model": "general",
          "audio_format": {
            "container_audio": {
              "container_audio_type": "WAV"
            }
          }
        }
      }
      ```
  
      Где:
  
      * `uri` — ссылка на аудиофайл в Object Storage. Пример ссылки: `https://storage.yandexcloud.kz/speechkit/speech.wav`.
  
          Для бакета с ограниченным доступом в ссылке присутствуют дополнительные query-параметры (после знака `?`). Эти параметры не нужно передавать в SpeechKit — они игнорируются.
  
      * `model` — модель распознавания речи.
      * `container_audio_type` — тип аудиоконтейнера.
  
  1. Выполните запрос, используя один из способов аутентификации через сервисный аккаунт:    
      * С помощью [IAM-токена](../../iam/concepts/authorization/iam-token.md):
  
        ```bash
        export FOLDER_ID=<идентификатор_каталога>
        export IAM_TOKEN=<IAM-токен_сервисного_аккаунта> && \
        curl \
          --insecure \
          --header "Authorization: Bearer ${IAM_TOKEN}" \
          --header "x-folder-id: ${FOLDER_ID}" \
          --data @request.json https://stt.api.ml.yandexcloud.kz:443/stt/v3/recognizeFileAsync
        ```
  
        Где:
        
        * `FOLDER_ID` — [идентификатор каталога](*идентификатор каталога), в котором создан ваш сервисный аккаунт.
        * `IAM_TOKEN` — IAM-токен сервисного аккаунта.
  
      * С помощью [API-ключа](../../iam/concepts/authorization/api-key.md).
  
        Используйте API-ключи, если у вас нет возможности автоматически запрашивать [IAM-токен](../../iam/concepts/authorization/iam-token.md).
  
        ```bash
        export FOLDER_ID=<идентификатор_каталога>
        export API_KEY=<API-ключ_сервисного_аккаунта> && \
        curl \
          --insecure \
          --header "Authorization: Api-Key ${API_KEY}" \
          --header "x-folder-id: ${FOLDER_ID}" \
          --data @request.json https://stt.api.ml.yandexcloud.kz:443/stt/v3/recognizeFileAsync
        ```
  
      Пример результата:
  
      ```text
      {
         "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`) операции распознавания, полученный в ответе.
  
  1. Дождитесь, когда завершится распознавание. Одна минута аудио распознается примерно за 10 секунд.
  
  
  1. Запросите результат операции:
  
      * С аутентификацией с помощью IAM-токена:
  
          ```bash
          curl \
            --insecure \
            --request GET \
            --header "Authorization: Bearer ${IAM_TOKEN}" \
            --header "x-folder-id: ${FOLDER_ID}" \
            https://stt.api.ml.yandexcloud.kz:443/stt/v3/getRecognition?operation_id=<идентификатор_операции_распознавания>
          ```
  
      * С аутентификацией с помощью API-ключа:
  
          ```bash
          curl \
            --insecure \
            --request GET \
            --header "Authorization: Api-key ${API_KEY}" \
            --header "x-folder-id: ${FOLDER_ID}" \
            https://stt.api.ml.yandexcloud.kz:443/stt/v3/getRecognition?operation_id=<идентификатор_операции_распознавания>
          ```
  
      {% cut "Пример результата" %}
  
      ```json
      {
       "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"
       }
      }
      ```
  
      {% endcut %}

- API v2

  1. [Получите ссылку на аудиофайл](../../storage/operations/objects/link-for-download.md) в Object Storage.
  1. Создайте файл `body.json` и добавьте в него код:
  
     ```json
     {
        "config": {
           "specification": {
              "languageCode": "ru-RU",
              "model": "general",
              "audioEncoding": "LINEAR16_PCM",
              "sampleRateHertz": 8000,
              "audioChannelCount": 1
           }
        },
        "audio": {
           "uri": "<ссылка_на_аудиофайл>"
        }
     }
     ```
  
     Где:
  
     
     * `languageCode` — [язык](../stt/models.md#languages), для которого будет выполнено распознавание.
     * `model` — [модель распознавания речи](../stt/models.md#tags).
     * `audioEncoding` — [формат](../formats.md) передаваемого аудиофайла.
  
     * `sampleRateHertz` — частота дискретизации аудиофайла в Гц.
     * `audioChannelCount` — количество аудиоканалов.
     * `uri` — ссылка на аудиофайл в Object Storage. Пример ссылки: `https://storage.yandexcloud.net/speechkit/speech.pcm`.
  
        Для бакета с ограниченным доступом в ссылке присутствуют дополнительные query-параметры (после знака `?`). Эти параметры не нужно передавать в SpeechKit — они игнорируются.
  
  1. Выполните созданный файл:
  
     ```bash
     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
     ```
  
     Пример результата:
  
     ```text
     {
        "done": false,
        "id": "e03sup6d5h1q********",
        "createdAt": "2019-04-21T22:49:29Z",
        "createdBy": "ajes08feato8********",
        "modifiedAt": "2019-04-21T22:49:29Z"
     }
     ```
  
     Сохраните идентификатор (`id`) операции распознавания, полученный в ответе.
  
  1. Дождитесь, когда завершится распознавание. Одна минута одноканального аудио распознается примерно за 10 секунд.
  1. Отправьте запрос на [получение информации об операции](../../api-design-guide/concepts/operation.md#monitoring):
  
     ```bash
     curl \
       --insecure \
       --header "Authorization: Api-key ${API_KEY}" \
       https://operation.api.cloud.yandex.net/operations/<идентификатор_операции_распознавания>
     ```
  
     Пример результата:
  
     ```text
     {
        "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` может отсутствовать в ответе.

{% endlist %}

#### Полезные ссылки {#what-is-next}

* [Распознавание речи](../stt/index.md)
* [API v3 асинхронного распознавания](../stt-v3/api-ref/AsyncRecognizer/getRecognition.md)
* [API v2 асинхронного распознавания](../stt/api/transcribation-api.md)
* [Аутентификация в API SpeechKit](../concepts/auth.md)
* [Асинхронное распознавание аудиофайлов в формате WAV в API v3](../stt/api/transcribation-api-v3.md)
* [Асинхронное распознавание аудиофайлов в формате OggOpus в API v2](../stt/api/transcribation-ogg.md)

[*идентификатор каталога]: #### {#get-folder-id}
                           
                           [Каталог](../../resource-manager/concepts/resources-hierarchy.md#folder) — пространство, в котором содержатся ресурсы Yandex Cloud. Для аутентификации в AI Studio необходим идентификатор каталога. Чтобы его получить, в [интерфейсе AI Studio](https://aistudio.yandex.ru/platform) наведите указатель на название каталога, расположенное в верхней части экрана, и нажмите ![image](../../_assets/ai-studio/folder-id.svg). Идентификатор будет скопирован в буфер обмена.
                           
                           ![image](../../_assets/ai-studio/ai-studio-get-folder-id.png)