在nodejs中的Firebase函数中使用谷歌云Vision Api的PermissionError

Rez*_*eza 4 firebase google-cloud-platform google-vision google-cloud-functions

我有一个 firebase 函数,并且尝试在我的 firebase 函数中使用 Vision API,但是在本地服务时出现此错误

PERMISSION_DENIED:项目 563584335869 之前未使用过 Cloud Vision API 或已禁用。通过访问https://console.developers.google.com/apis/api/vision.googleapis.com/overview?project=563584335869启用它,然后重试。如果您最近启用了此 API

首先,我不知道 563584335869来自哪里,因为当我单击链接时,它不是一个有效的项目 在此输入图像描述

其次,我选择该项目并在其上启用 Vision API,仍然收到相同的错误

代码非常简单,无论如何我将其添加到这里

    async analyze(imageStorageLocation: string): Promise<any> {
        const vision = require('@google-cloud/vision');

        const client = new vision.ImageAnnotatorClient();

        const [result] = await client.textDetection(imageStorageLocation);
        const detections = result.textAnnotations;
        console.log('Text:');
        detections.forEach((text: string) => console.log(text));
    }
Run Code Online (Sandbox Code Playgroud)

这就是我初始化 firebase admin 的方式 admin.initializeApp(functions.config().firebase);

这是package.json

  "dependencies": {
    "@google-cloud/vision": "^1.7.1",
    "@nestjs/common": "^6.0.0",
    "@nestjs/core": "^6.0.0",
    "@nestjs/platform-express": "^6.9.0",
    "express": "^4.17.1",
    "firebase-admin": "^8.7.0",
    "firebase-functions": "^3.3.0",
    "moment-timezone": "^0.5.27",
    "reflect-metadata": "^0.1.12",
    "rimraf": "^2.6.2",
    "rxjs": "^6.3.3"
  },
Run Code Online (Sandbox Code Playgroud)

更新

这就是谷歌云仪表板的样子 在此输入图像描述

更新

我发现我的项目的projectId与错误消息中的id不同 在此输入图像描述

更新

我检查了我拥有的所有其他项目的 ID,该编号与任何项目都不匹配

更新

该问题仅发生在我的本地,当部署到 firebase 时它可以工作

Rez*_*eza 5

谢谢@Chris32,我根据他在评论中的引导找到了解决方案。

由于问题仅出现在我的本地服务器上并且部署时没问题,因此我这样做是为了解决问题(https://cloud.google.com/vision/docs/before-you-begin

  1. 导出服务密钥文件
  2. 创建一个名为的环境变量(win 10)GOOGLE_APPLICATION_CREDENTIALS
  3. 将服务密钥文件的路径设置为此环境变量
  4. 本地运行函数

ps 令人惊讶的是,正如 Chris 提到的,错误中的项目 ID 是硬编码的,因此具有误导性