语音转文字API无法通过“找不到请求的实体”错误

时间:2019-06-07 15:21:22

标签: node.js google-cloud-platform google-cloud-speech

我在由GCS事件触发的Cloud Function中调用Cloud Speech-to-Text API。 在Cloud Function之外(运行node index.js)执行此操作非常好,但随后出现我的错误。

我使用this doc认为该错误是由于身份验证问题引起的,但是我尝试了几种方法,但现在还不确定。

我的代码是:

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const nl = require('@google-cloud/language');
const client_nl = new nl.LanguageServiceClient();
const speech = require('@google-cloud/speech');
const client_speech = new speech.SpeechClient();

exports.getRecording = (data,context) => {
  const file = data;
  if (file.resourceState === 'not_exists') {
    // Ignore file deletions
    return true;
  } else if (!new RegExp(/\.(wav|mp3)/g).test(file.name)) {
    // Ignore changes to non-audio files
    return true;
  }

  console.log(`Analyzing gs://${file.bucket}/${file.name}`);

  const bucket = storage.bucket(file.bucket);
  const audio = {
    uri: 'gs://${file.bucket}/${file.name}'
  };

  // Configure audio settings for BoF recordings
  const audioConfig = {
    encoding: 'LINEAR16',
    sampleRateHertz: 44100,
    languageCode: 'fr-FR'
  };

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

  return client_speech.recognize(request)
    .then(([transcription]) => {
      const filename = `analysis.json`;
      console.log(`Saving gs://${file.bucket}/${filename}`);

      return bucket
        .file(filename)
        .save(JSON.stringify(transcription, null, 2));
  });

然后我使用进行部署: gcloud functions deploy getRecording --runtime nodejs10 --trigger-resource trigger-bucket-id --trigger-event google.storage.object.finalize --service-account my-service-account

我尝试过的事情:

  1. export GOOGLE_APPLICATION_CREDENTIALS=/path/to/file/keyfile.json
  2. 在内部添加了config.json的{​​{1}}文件,在根项目中添加了密钥文件,在"GOOGLE_APPLICATION_CREDENTIALS":"./keyfile.json"中添加了require('./config.json')
  3. 添加了一个选项json
index.js

我不断收到此错误,需要一些帮助

const options = {
    projectId: 'my-project-id',
    keyFilename: './key-file.json'
  };
const client_speech = new speech.SpeechClient(options);

2 个答案:

答案 0 :(得分:0)

this code有帮助吗? 有一些StackOverflow帖子可能对herehere

有帮助

我建议进行更详细的日志记录/调试。 例如,您可以证明这两行符合您的期望吗?字符串会产生格式正确的uri吗?

const bucket = storage.bucket(file.bucket);
  const audio = {
    uri: 'gs://${file.bucket}/${file.name}'
  };

让我们知道您是否找到解决方案

答案 1 :(得分:0)

@Bruce是正确的,我终于发现了错误。 我只是看不到它是写的 uri:'gs://${file.bucket}/${file.name}'

不是

uri: `gs://${file.bucket}/${file.name}`

(是的,这个错误很小,但是可以通过更多测试来避免...