Я работаю в одном университетском проекте, который предусматривает использование облачного речевого API Google. Я решил использовать nodejs, потому что мне очень нравится, и я хочу использовать его с express4.0. общая идея здесь заключается в том, что у меня есть одна конечная точка, которая вызывает одну функцию, которая получает один строковый параметр, который является URL-адресом аудиофайла. После стольких попыток и перечитывания документации у меня все та же ошибка, что я просто передаю один неверный аргумент в запросе, но я использовал официальные примеры nodejs.
Я взял фрагмент, который не выполняется в моем основном приложении-экспрессе, для выполнения запроса, а также я тестировал различные варианты, которые существуют в речевой документации. Я не знаю, почему запрос неверен, если он соответствует параметрам запроса в официальных документах.
let request = {"config": {
"enableWordTimeOffsets": true,
languageCode:"es-CO",
},
"audio":{
"uri": gsUri
},
}
если я распечатаю этот запрос:
{ config: { enableWordTimeOffsets: true, languageCode: 'es-CO' },
audio:
{ uri:
'gs://xpublic-uploads/62b1bbf29ee0a061a13017d4eccf3bfb1548201141566.wav' } }
Это фактический код, я просто запускаю этот фрагмент с node snippet.js
const speech = require('@google-cloud/speech');
const {Storage} = require('@google-cloud/storage');
//Constants
//const bucketName = 'xpublic-uploads';
//const filenamebucket =
'62b1bbf29ee0a061a13017d4eccf3bfb1548201141566.wav'
let gsUri = process.argv[2] //for testing I send the url using the command line
//gcsUri = `gs://${bucketName}/${filename}` //bucket url
const client = new speech.SpeechClient();
let request = {"config": {
"enableWordTimeOffsets": true,
languageCode:"es-CO",
},
"audio":{
"uri": gsUri
},
}
console.log(request); //debug.
function TexttoSpeechLong(req) {
// Return new promise
return new Promise(function(resolve, reject) {
// Do the async transcription.
const results_long_audio = client.longRunningRecognize(req, function(err, jobid){
if(err){
reject(err)
} else {
resolve(jobid);
}
});
});
}
TexttoSpeechLong(request).then(function(data) {
console.log(data.latestResponse); //debug
//updade another variable here.
}).catch(function(err){
console.log(err); //debug
});
Фактический код приводит к следующему выводу:
{ Error: 3 INVALID_ARGUMENT: Invalid recognition 'config': bad encoding..
at Object.exports.createStatusError (/home/c1b3r/Developer/NodeReview/speech/speech-to-text-gcloud/node_modules/grpc/src/common.js:91:15)
at Object.onReceiveStatus (/home/c1b3r/Developer/NodeReview/speech/speech-to-text-gcloud/node_modules/grpc/src/client_interceptors.js:1204:28)
at InterceptingListener._callNext (/home/c1b3r/Developer/NodeReview/speech/speech-to-text-gcloud/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/home/c1b3r/Developer/NodeReview/speech/speech-to-text-gcloud/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/home/c1b3r/Developer/NodeReview/speech/speech-to-text-gcloud/node_modules/grpc/src/client_interceptors.js:845:24)
code: 3,
metadata: Metadata { _internal_repr: {} },
details: 'Invalid recognition \'config\': bad encoding..' }
Я должен получить номер асинхронного задания. На самом деле я знаю, что проблема только в части URL, звук в порядке в соответствии со спецификацией речи.