Распознавание длинных аудио

Распознавание длинных аудио подходит для многоканальных аудиофайлов до 1 ГБ.

Распознавание длинных аудио немного дешевле других способов распознавания, однако не подходит в сценариях распознавания речи онлайн — время ответа больше. Подробнее о стоимости в разделе Правила тарификации для SpeechKit.

Примечание

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

Перед началом

  1. Запрос на распознавание необходимо отправлять от имени сервисного аккаунта. Если у вас еще нет сервисного аккаунта, создайте его.

  2. Убедитесь, что у сервисного аккаунта есть доступ к каталогу, в котором он создан.

  3. Получите IAM-токен или API-ключ для вашего сервисного аккаунта. В примерах для аутентификации используется IAM-токен.

    Чтобы использовать API-ключ, передайте его в заголовке Authorization в следующем формате:

    Authorization: Api-Key <API-ключ>
    
  4. Загрузите аудиофайл в сервис Yandex Object Storage и получите ссылку на загруженный файл:

    1. Если у вас еще нет бакета в Object Storage, создайте его.

    2. Загрузите аудиофайл в ваш бакет. В терминах Object Storage загружаемые файлы называются объектами.

    3. Получите ссылку на загруженный файл. Используйте эту ссылку в запросе на распознавание аудио.

      Ссылка на загруженный файл имеет вид:

      https://storage.yandexcloud.net/<имя-бакета>/<путь-к-файлу>
      

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

Отправить файл на распознавание

Отправьте файл на распознавание с помощью POST-запроса:

HTTP-запрос

POST https://transcribe.api.cloud.yandex.net/speech/stt/v2/longRunningRecognize

Параметры в теле запроса

{
    "config": {
        "specification": {
            "languageCode": "string",
            "profanityFilter": "string",
            "audioEncoding": "string",
            "sampleRateHertz": "integer",
            "audioChannelCount": "integer"
        }
    },
    "audio": {
        "uri": "string"
    }
}
Параметр Описание
config object
Поле с настройками распознавания.
config.
specification
object
Настройки распознавания.
config.
specification.
languageCode
string
Язык, для которого будет выполнено распознавание.
Сейчас поддерживается только русский язык — ru-RU.
config.
specification.
profanityFilter
boolean
Фильтр ненормативной лексики.
Допустимые значения:
  • true — исключать ненормативную лексику из результатов распознавания.
  • false (по умолчанию) — не исключать ненормативную лексику.
config.
specification.
audioEncoding
string
Формат передаваемого аудио.
Допустимые значения:
config.
specification.
sampleRateHertz
integer (int64)
Частота дискретизации передаваемого аудио.
Этот параметр обязателен, если значение format равно LINEAR16_PCM. Допустимые значения:
  • 48000 (по умолчанию) — частота дискретизации 48 кГц;
  • 16000 — частота дискретизации 16 кГц;
  • 8000 — частота дискретизации 8 кГц.
config.
specification.
audioChannelCount
integer (int64)
Количество каналов для файлов в формате LPCM. По умолчанию используется значение 1.
Не используйте это поле для файлов в формате OggOpus.
config.
specification.
raw_results
boolean
Флаг, указывающий, как писать числа. true — писать прописью, false (по умолчанию) — писать цифрами.
audio.
uri
string
URI аудиофайла для распознавания. Поддерживаются только ссылки на файлы, которые хранятся в Yandex Object Storage.

Ответ

Если запрос был составлен правильно, сервис возвращает объект Operation, в котором содержится идентификатор операции распознавания (id):

{
 "done": false,
 "id": "e03sup6d5h7rq574ht8g",
 "createdAt": "2019-04-21T22:49:29Z",
 "createdBy": "ajes08feato88ehbbhqq",
 "modifiedAt": "2019-04-21T22:49:29Z"
}

Используйте полученный идентификатор на следующем шаге.

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

Проверяйте результаты распознавания, используя полученный идентификатор. Количество запросов на проверку результатов ограничено, поэтому учитывайте скорость распознавания: 1 минута одноканального аудио распознается примерно за 10 секунд.

Важная информация

Результаты распознавания хранятся на сервере 3 суток. После этого вы не сможете запросить результаты распознавания используя полученный идентификатор.

HTTP-запрос

GET https://operation.api.cloud.yandex.net/operations/{operationId}

Path-параметры

Параметр Описание
operationId Идентификатор операции, полученный при отправке запроса на распознавание.

Ответ

Когда распознавание будет закончено, значение поля done будет true, а в поле response будет список результатов распознавания chunks[].

Каждый результат в chunks[] содержит поля:

  • alternatives[] - список вариантов распознанного текста. Каждый вариант содержит поля:
    • words[] - список распознанных слов.
      • startTime — временная отметка начала слова на аудиозаписи. Возможна погрешность в пределах 1-2 секунд.
      • endTime — временная отметка конца слова. Возможна погрешность в пределах 1-2 секунд.
      • word — распознанное слово. Распознанные числа пишутся прописью, например не 12, а двенадцать.
      • condfidence - достоверность определения. Сейчас сервис всегда возвращает значение 1, которое эквивалентно 100%.
    • text - распознанный текст целиком. По умолчанию числа пишутся цифрами. Чтобы весь текст был прописью, укажите true в поле raw_results.
    • confidence - достоверность определения. Сейчас сервис всегда возвращает значение 1, которое эквивалентно 100%.
  • channelTag - аудиоканал, для которого выполнено распознавание.
{
 "done": true,
 "response": {
  "@type": "type.googleapis.com/yandex.cloud.ai.stt.v2.LongRunningRecognitionResponse",
  "chunks": [
   {
    "alternatives": [
     {
      "words": [
       {
        "startTime": "0.879999999s",
        "endTime": "1.159999992s",
        "word": "при",
        "confidence": 1
       },
       {
        "startTime": "1.219999995s",
        "endTime": "1.539999988s",
        "word": "написании",
        "confidence": 1
       },
       ...
      ],
      "text": "при написании хоббита толкин обращался к мотивам скандинавской мифологии древней английской поэмы беовульф",
      "confidence": 1
     }
    ],
    "channelTag": "1"
   },
   ...
  ]
 },
 "id": "e03sup6d5h7rq574ht8g",
 "createdAt": "2019-04-21T22:49:29Z",
 "createdBy": "ajes08feato88ehbbhqq",
 "modifiedAt": "2019-04-21T22:49:36Z"
}

Примеры

Распознать русскую речь в формате OggOpus

Чтобы распознать речь в формате OggOpus, достаточно указать в конфигурации язык распознавания в поле languageCode.

Ссылку на загруженный аудиофайл укажите в поле uri.

  1. Сформируйте тело запроса и сохраните его в файл, например body.json:

    {
        "config": {
            "specification": {
                "languageCode": "ru-RU"
            }
        },
        "audio": {
            "uri": "https://storage.yandexcloud.net/speechkit/speech.ogg"
        }
    }
    
  2. Отправьте запрос на распознавание:

    $ export IAM_TOKEN=CggaATEVAgA...
    $ curl -X POST \
        -H "Authorization: Bearer ${IAM_TOKEN}" \
        -d @body.json \
        https://transcribe.api.cloud.yandex.net/speech/stt/v2/longRunningRecognize
    
    {
        "done": false,
        "id": "e03sup6d5h1qr574ht99",
        "createdAt": "2019-04-21T22:49:29Z",
        "createdBy": "ajes08feato88ehbbhqq",
        "modifiedAt": "2019-04-21T22:49:29Z"
    }
    

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

  3. Подождите немного, пока закончится распознавание. 1 минута одноканального аудио распознается примерно за 10 секунд.

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

    $ curl -H "Authorization: Bearer ${IAM_TOKEN}" \
        https://operation.api.cloud.yandex.net/operations/e03sup6d5h1qr574ht99
    
    {
    "done": true, "response": {
     "@type": "type.googleapis.com/yandex.cloud.ai.stt.v2.LongRunningRecognitionResponse",
     "chunks": [
      {
       "alternatives": [
        {
         "text": "твой номер 212-85-06",
         "confidence": 1
        }
       ],
       "channelTag": "1"
      }
     ]
    },
    "id": "e03sup6d5h1qr574ht99",
    "createdAt": "2019-04-21T22:49:29Z",
    "createdBy": "ajes08feato88ehbbhqq",
    "modifiedAt": "2019-04-21T22:49:36Z"
    }
    

Распознать речь в формате LPCM

Чтобы распознать речь в формате LPCM в настройках распознавания укажите частоту дискретизации файла и количество аудиоканалов. Язык распознавания укажите в поле languageCode.

  1. Сформируйте тело запроса и сохраните его в файл, например body.json:

    {
        "config": {
            "specification": {
                "languageCode": "ru-RU",
                "audioEncoding": "LINEAR16_PCM",
                "sampleRateHertz": 8000,
                "audioChannelCount": 1
            }
        },
        "audio": {
            "uri": "https://storage.yandexcloud.net/speechkit/speech.pcm"
        }
    }
    
  2. Отправьте запрос на распознавание:

    $ export IAM_TOKEN=CggaATEVAgA...
    $ curl -X POST \
        -H "Authorization: Bearer ${IAM_TOKEN}" \
        -d @body.json \
        https://transcribe.api.cloud.yandex.net/speech/stt/v2/longRunningRecognize
    
    {
        "done": false,
        "id": "e03sup6d5h1qr574ht99",
        "createdAt": "2019-04-21T22:49:29Z",
        "createdBy": "ajes08feato88ehbbhqq",
        "modifiedAt": "2019-04-21T22:49:29Z"
    }
    

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

  3. Подождите немного, пока закончится распознавание. 1 минута одноканального аудио распознается примерно за 10 секунд.

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

    $ curl -H "Authorization: Bearer ${IAM_TOKEN}" \
        https://operation.api.cloud.yandex.net/operations/e03sup6d5h1qr574ht99
    
    {
    "done": true, "response": {
     "@type": "type.googleapis.com/yandex.cloud.ai.stt.v2.LongRunningRecognitionResponse",
     "chunks": [
      {
       "alternatives": [
        {
         "text": "привет мир",
         "confidence": 1
        }
       ],
       "channelTag": "1"
      }
     ]
    },
    "id": "e03sup6d5h1qr574ht99",
    "createdAt": "2019-04-21T22:49:29Z",
    "createdBy": "ajes08feato88ehbbhqq",
    "modifiedAt": "2019-04-21T22:49:36Z"
    }