Невозможно пройти через «Запрошенный объект не найден» с помощью Speech-to-Text API - PullRequest
1 голос
/ 07 июня 2019

Я вызываю Cloud Speech-to-Text API в облачной функции, запускаемой событием GCS. Выполнение этого вне облачной функции (запуск node index.js) совершенно нормально, но моя ошибка возникает позже.

Используя этот документ , я полагал, что ошибка произошла из-за проблемы с аутентификацией, но я попробовал несколько вещей, и сейчас я не уверен.

Мой код:

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 с "GOOGLE_APPLICATION_CREDENTIALS":"./keyfile.json" внутри, файл ключа в корневом проекте и require('./config.json') в index.js
  3. добавлены опции json
const options = {
    projectId: 'my-project-id',
    keyFilename: './key-file.json'
  };
const client_speech = new speech.SpeechClient(options);

Я получаю эту ошибку и мне нужна помощь

D      getRecording  573287126069013  2019-06-07 15:03:09.609  Function execution started
       getRecording  573287126069013  2019-06-07 15:03:09.789  Analyzing gs://my-bucket/audio_trimed.wav
D      getRecording  573287126069013  2019-06-07 15:03:10.979  Function execution took 1372 ms, finished with status: 'error'
E      getRecording  573291408785013  2019-06-07 15:03:11.990  Error: Requested entity was not found.
                                                                   at Http2CallStream.call.on (/srv/functions/node_modules/@grpc/grpc-js/build/src/client.js:101:45)
                                                                   at Http2CallStream.emit (events.js:194:15)
                                                                   at Http2CallStream.EventEmitter.emit (domain.js:459:23)
                                                                   at Http2CallStream.endCall (/srv/functions/node_modules/@grpc/grpc-js/build/src/call-stream.js:63:18)
                                                                   at handlingTrailers (/srv/functions/node_modules/@grpc/grpc-js/build/src/call-stream.js:152:18)
                                                                   at process._tickCallback (internal/process/next_tick.js:68:7)

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

@ Брюс был прав, я наконец-то заметил ошибку.Я просто не мог понять, что это было написано uri:'gs://${file.bucket}/${file.name}'

, а не

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

(да, ошибка была крошечной, но ее можно было бы избежать с помощью дополнительного тестирования ...

0 голосов
/ 21 июня 2019

Помогает ли какой-либо из этот код ? Есть несколько сообщений StackOverflow, которые могут помочь здесь и здесь

Я предлагаю более подробное ведение журнала / отладку. Например, можете ли вы доказать, что эти две строки делают то, что вы ожидаете? Производит ли струна хорошо сформированный ури?

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

Сообщите нам, если вы найдете решение

...