Ошибка в запросе к Google Video Intelligence API

Я пытался отправить запрос в API Google Video Intelligence для SAFE_SEARCH_DETECTION (в файле node.js), но продолжаю сталкиваться с той же ошибкой:

ОШИБКА: {Ошибка: запрос содержит недопустимый аргумент. по адресу /Users/paulsteenkiste/node_modules/grpc/src/node/src/client.js:569:15 code: 3, метаданные: метаданные { _internal_repr: {} }, примечание: "Исключение произошло в методе повтора, который не был классифицирован как переходный процесс ' }

Я попытался погрузиться в тот файл client.js, который указан в сообщении об ошибке, но он не очень хорошо освещал. Вот код, который выдает эту ошибку:

const firebase = require('firebase');

firebase.initializeApp({
    serviceAccount: "./service-account.json",
    apiKey: "<API key>",
    databaseURL: "<My Database>"
});

// Imports the Google Cloud Video Intelligence library
const Video = require('@google-cloud/video-intelligence');

// Instantiates a client
const video = Video();

firebase.auth().signInWithEmailAndPassword("<My email>", "<My password>")
    .then(function(user) {

    // The GCS filepath of the video to analyze
    const gcsUri = '<File location>';

    const request = {
      inputUri: gcsUri,
      features: ["SAFE_SEARCH_DETECTION"]
    };

    // Human-readable likelihoods
    const likelihoods = ['UNKNOWN', 'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE', 'LIKELY', 'VERY_LIKELY'];

    // Detects unsafe content
    video.annotateVideo(request)
      .then((results) => {
        const operation = results[0];
        console.log('Waiting for operation to complete...');
        return operation.promise();
      })
      .then((results) => {
        // Gets unsafe content
        const safeSearchResults = results[0].annotationResults[0].safeSearchAnnotations;
        console.log('Safe search results:');
        safeSearchResults.forEach((result) => {
          console.log(`Time: ${result.timeOffset / 1e6}s`);
          console.log(`\tAdult: ${likelihoods[result.adult]}`);
          console.log(`\tSpoof: ${likelihoods[result.spoof]}`);
          console.log(`\tMedical: ${likelihoods[result.medical]}`);
          console.log(`\tViolent: ${likelihoods[result.violent]}`);
          console.log(`\tRacy: ${likelihoods[result.racy]}`);
        });
      })
      .catch((err) => {
        console.error('ERROR:', err);
      });
    })
    .catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log(errorMessage);
    });

(Обратите внимание, что это по сути скопировано и вставлено из документации Google по адресу https://cloud.google.com/video-intelligence/docs/analyze-safesearch). Service-account.json - это файл, который я скачал при создании учетной записи службы, и он находится в той же папке, что и вышеуказанный файл. Я не думаю, что это необходимо для проверки подлинности с помощью firebase, но я хотел убедиться, что проблема не в этом. Я включил API и имею полный доступ к проекту, поэтому ни один из них не является проблемой.

Я полагаю, что проблема как-то связана с учетной записью службы, но все, что я пытаюсь, та же самая ошибка обнаруживается. Некоторые из вещей, которые я пробовал:

  1. Настройка GOOGLE_APPLICATION_CREDENTIALS из терминала
  2. Предоставление этой учетной записи службы "Suite Domain-wide Delegation"
  3. Публикация файла
  4. Выполнение команды "gsutil", рекомендованной ответом здесь: Отказано в доступе при выполнении запроса к API GCP Video Intelligence

Есть идеи, в чем проблема?

1 ответ

У меня была такая же проблема в недавнем проекте, и я узнал, что это связано с отправкой https:// URI, когда Google Cloud Services ожидал gs:// URI. Error: Request contains an invalid argument. Я уверен, что это проблема.

Простым исправлением будет прямое изменение URL-адреса, который вы передаете вызову API.

const gcsUri = '<File location>'.replace('https://storage.googleapis.com/', 'gs://')

И да, большинство их API требует, чтобы файлы находились в собственном облачном хранилище. Если вы пытаетесь обработать видео, расположенное в другом месте, вам, скорее всего, сначала нужно скопировать его в их облачное хранилище.

Другие вопросы по тегам