Преобразование речи в текст Google Cloud: "INVALID_ARGUMENT: недопустимая конфигурация распознавания: неправильная кодировка .." ошибка кодирования аудиокодека
Я записываю короткие аудиофайлы (несколько секунд) в Chrome, используя mediaDevices.getUserMedia()
, сохраняя файл в хранилище Firebase, а затем пытаясь отправить файлы в Google Cloud для преобразования речи в текст из облачной функции 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. Файл воспроизводится без проблем.