📜  NodeJS Google Vision 无法在当前环境中检测到项目 ID (1)

📅  最后修改于: 2023-12-03 15:17:57.766000             🧑  作者: Mango

NodeJS Google Vision 无法在当前环境中检测到项目 ID

在使用 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 认证信息
  1. 首先去到 Google Cloud Platform 控制台,选择使用的项目,点击导航菜单。

  2. 找到“APIs & Services” > “Credentials”。

  3. 选择“Create credentials” > “Service account key”。

  4. 选择“New service account”,输入一个名称并选择角色“Project” > “Editor”。

  5. 点击“Create”,并将生成的密钥文件下载到本地。

到这里我们就得到了一个 JSON 文件,该文件包含我们所需要使用的项目的认证信息。

  1. 将该 JSON 文件放到你的项目的目录内,假设我们将其放到项目根目录的 credentials 目录内,命名为 “google-vision-credentials.json”。
设置 NodeJS 代码
  1. 安装 Google Cloud Client:
npm install --save @google-cloud/vision
  1. 在你的程序中导入该模块:
const vision = require('@google-cloud/vision');
  1. 创建 vision 客户端对象:
const client = new vision.ImageAnnotatorClient({
  keyFilename: './credentials/google-vision-credentials.json',
});

请注意,这里的 “./credentials/google-vision-credentials.json” 指的是我们上一步放置 JSON 文件的路径。

  1. 使用 client 对象进行图像识别操作:
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 客户端对象即可。