Google Cloud Speech-to-Text: INVALID_ARGUMENT: неверная конфигурация распознавания: неверная кодировка... ошибка кодека аудиокодека

Я записываю короткие аудиофайлы (несколько секунд) в Chrome с помощью mediaDevices.getUserMedia(), сохраняю файл в хранилище Firebase, а затем пытаюсь отправить файлы в Google Cloud Speech-to-Text из облачной функции Firebase. Я получаю обратно это сообщение об ошибке:

INVALID_ARGUMENT: Invalid recognition 'config': bad encoding.

В документации Google говорится, что это сообщение об ошибке означает

Ваши аудиоданные могут быть закодированы неправильно или закодированы с помощью кодека, отличного от того, который вы объявили в RecognitionConfig. Проверьте аудиовход и убедитесь, что вы правильно установили поле кодировки.

В браузере настраиваю микрофон:

navigator.mediaDevices.getUserMedia({ audio: true, video: false })
.then(stream => {

var options = {
   audioBitsPerSecond : 128000,
   mimeType : 'audio/webm;codecs=opus'
};

const mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.start();
...

Согласно этому ответу Chrome поддерживает только два кодеки:

audio/webm
audio/webm;codecs=opus

На самом деле это один медиаформат и один кодек. В В этом сообщении блога также говорится, что Chrome поддерживает только кодек Opus.

Я настроил свою облачную функцию Firebase:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

const gcsUri = 'gs://my-app.appspot.com/my-file';
const encoding = 'Opus';
const sampleRateHertz = 128000;
const languageCode = 'en-US';

const config = {
   encoding: encoding,
   sampleRateHertz: sampleRateHertz,
   languageCode: languageCode,
};
const audio = {
   uri: gcsUri,
};

const request = {
   config: config,
   audio: audio,
};

// Detects speech in the audio file
return response = client.recognize(request) // square brackets in ES6 construct an array
.then(function(response) {
console.log(response);
...

Кодировка звука совпадает между браузером и запросом Google Speech-to-Text. Почему Google Speech сообщает мне, что кодировка звука плохая?

Я также попытался использовать параметры по умолчанию в браузере с тем же сообщением об ошибке:

navigator.mediaDevices.getUserMedia({ audio: true, video: false })
.then(stream => {

const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();

В облачной функции Firebase я попытался пропустить строку const encoding = 'Opus';, что привело к ошибке encoding is not defined. Я попробовал эту строку const encoding = '';, что привело к ошибке INVALID_ARGUMENT: Invalid recognition 'config': bad encoding...

Я получаю похожее сообщение об ошибке от IBM Watson Speech-to-Text. Файл воспроизводится без проблем.


person Thomas David Kehoe    schedule 18.03.2020    source источник
comment
У меня возникла аналогичная проблема с Google Voice to Text с использованием Python SDK. Я сталкиваюсь с этой проблемой случайно, но часто (в среднем 1 из 5). Но если я дважды вызываю API с одним и тем же звуковым файлом всякий раз, когда возникает эта ошибка, во второй раз он работает.   -  person Woody    schedule 08.09.2020