Google Cloud to Speech, возвращает неверный аргумент при попытке передать строковый параметр в функцию - PullRequest
0 голосов
/ 23 января 2019

Я работаю в одном университетском проекте, который предусматривает использование облачного речевого 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, звук в порядке в соответствии со спецификацией речи.

...