Ошибка в запросе к 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 и имею полный доступ к проекту, поэтому ни один из них не является проблемой.
Я полагаю, что проблема как-то связана с учетной записью службы, но все, что я пытаюсь, та же самая ошибка обнаруживается. Некоторые из вещей, которые я пробовал:
- Настройка GOOGLE_APPLICATION_CREDENTIALS из терминала
- Предоставление этой учетной записи службы "Suite Domain-wide Delegation"
- Публикация файла
- Выполнение команды "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 требует, чтобы файлы находились в собственном облачном хранилище. Если вы пытаетесь обработать видео, расположенное в другом месте, вам, скорее всего, сначала нужно скопировать его в их облачное хранилище.