📅  最后修改于: 2023-12-03 15:17:57.766000             🧑  作者: Mango
在使用 Google Vision API 的时候,若出现以下报错信息:
Error: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials
for more information.
at GoogleAuth.getApplicationDefaultAsync (C:\project\node_modules\google-auth-library\build\src\auth\googleauth.js:159:19)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async getClient (C:\project\node_modules\@google-cloud\vision\build\src\v1\image_annotator_client.js:53:20)
at async annotateImage (C:\project\src\annotateImage.js:6:31)
Error: 7 PERMISSION_DENIED: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.
那么,很有可能是因为当前环境无法检测到 Google Cloud Platform 的项目 ID 或认证信息所致。
针对这种问题,我们需要对 NodeJS 的 Google Cloud Client 进行设置,告知其我们使用的是哪个项目的认证信息和服务。
以下是解决这个问题的步骤。
首先去到 Google Cloud Platform 控制台,选择使用的项目,点击导航菜单。
找到“APIs & Services” > “Credentials”。
选择“Create credentials” > “Service account key”。
选择“New service account”,输入一个名称并选择角色“Project” > “Editor”。
点击“Create”,并将生成的密钥文件下载到本地。
到这里我们就得到了一个 JSON 文件,该文件包含我们所需要使用的项目的认证信息。
npm install --save @google-cloud/vision
const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient({
keyFilename: './credentials/google-vision-credentials.json',
});
请注意,这里的 “./credentials/google-vision-credentials.json” 指的是我们上一步放置 JSON 文件的路径。
async function detectLabels() {
// 读取本地图像文件
const [result] = await client.labelDetection('./resources/wakeupcat.jpg');
const labels = result.labelAnnotations;
console.log('Labels:');
labels.forEach(label => console.log(label.description));
}
detectLabels();
这时,我们就可以正常地使用 Google Vision API 进行图像识别了。
出现 NodeJS Google Vision 无法在当前环境中检测到项目 ID 的问题,通常是因为程序无法找到 Google Cloud Platform 的认证信息或是项目 ID。
解决方案是在 Google Cloud Platform 控制台上创建一个 Service Account,并下载该项目的认证信息 JSON 文件,最后在 NodeJS 中使用该认证信息创建 vision 客户端对象即可。