Как перевести аудиофайл в текст с помощью Яндекс SpeechKit версии 3?

Здравствуйте. 

Я следую <a href="https://yandex.cloud/ru/docs/speechkit/stt/api/transcribation-api-v3#curl_1" rel="nofollow">документации</a> и выполняю следующий запрос: 

<pre><code class="javascript">const { data } = await axios.post&lt;any, { data: ISpeechToTextResponse }&gt;(
        this.speechToTextUrl,
        {
          uri: dto.storageUrl,
          recognition_model: {
            model: 'general',
            audio_format: {
              container_audio: {
                container_audio_type: 'OggOpus',
              },
            },
          },
        },
        {
          headers: {
            Authorization: `Api-Key ${this.speechKitApiKey}`,
          },
        },
      );</code></pre>

Однако я получаю следующую ошибку: 

<pre><code class="javascript">data: {
      error: 'unknown value "\\"OggOpus\\"" for enum speechkit.stt.v3.ContainerAudio.ContainerAudioType',
      code: 3,
      message: 'unknown value "\\"OggOpus\\"" for enum speechkit.stt.v3.ContainerAudio.ContainerAudioType',
      details: []
    }</code></pre>

Файл, который я отправляю, имеет формат Ogg и передается через Telegram. При попытке указать формат файла как OggOpus, ошибка сохраняется. Вместо этого, если я указываю формат WAV, запрос проходит успешно, файл отправляется и сохраняется в бакете. Далее, следуя инструкции, я выполняю запрос для проверки статуса распознавания. 

<pre><code class="javascript">const { data } = await axios.get&lt;ISpeechToTextResponse&gt;(
        `${process.env.YA_SPEECH_KIT_GET_INFO_OF_OPERATION_URL}/${speech_kit_id}`,
        {
          headers: {
            Authorization: `Api-key ${this.speechKitApiKey}`,
          },
        },
      );</code></pre>

Могу ли я получить помощь по устранению данной проблемы?
  • 6 сентября 2024 г. 14:02
Ответы на вопрос 2
Проблема, с которой вы столкнулись, связана с неверной передачей параметров в запросе к API Яндекс.SpeechKit. Давайте разберемся с ошибкой и возможными решениями.

### Ошибка

Сообщение об ошибке:
```
'unknown value "\\"OggOpus\\"" for enum speechkit.stt.v3.ContainerAudio.ContainerAudioType'
```
указывает на то, что значение, которое вы передали для типа контейнера аудио, неправильно. Это может быть связано с использованием лишних кавычек или неправильным форматом текста.

### Решение

1. **Обратите внимание на знаки кавычек**: Убедитесь, что вы передаете строку без лишних экранирующих символов. Вместо `'"OggOpus"'` используйте просто `'OggOpus'`.

2. **Корректная структура запроса**: Вам нужно убедиться, что JSON-объект, который вы отправляете, правильно структурирован. Вот как должен выглядеть ваш код:

```javascript
const { data } = await axios.post(
  this.speechToTextUrl,
  {
    uri: dto.storageUrl,
    recognition_model: {
      model: 'general',
      audio_format: {
        container_audio: 'OggOpus',
      },
    },
  },
  {
    headers: {
      Authorization: `Api-Key ${this.speechKitApiKey}`,
    },
  }
);
```

### Дополнительные шаги

- **Проверьте формат файла**: Убедитесь, что ваш аудиофайл действительно в формате Ogg Opus. Иногда файлы могут быть восстановлены в другом формате, даже если они имеют расширение .ogg. Попробуйте прослушать и протестировать аудиофайл, чтобы убедиться, что формат соответствует Ogg Opus.

- **Проверка JSON**: Используйте инструменты, такие как [Postman](https://www.postman.com/) или [cURL](https://curl.se/), чтобы выполнять тестовые запросы с помощью правильного JSON-формата и заголовков, что позволит проверить, правильно ли вы формируете ваши запросы.

- **Документация**: Если проблема сохраняется, обратите внимание на документацию Яндекс.SpeechKit. В ней могут быть указаны последние изменения или дополнительные требования к формату файла.

Если вы следовали всем указанным шагам и ошибка все еще возникает, не стесняйтесь обращаться в техподдержку Яндекса или в их сообщество разработчиков, где могут помочь более опытные пользователи.
Ошибка в том, что в этой документации не верно указан формат, формат нужно указывать, как показано в этой  документации.
Похожие вопросы