Node.js - 使用 Google Cloud Vision API 从 PDF 文件中提取文本的问题

Node.js - Problem to extract text from PDF file using Google Cloud Vision API

我是云环境和一般编程的新手,我正在努力使用 Google Vision API 从位于远程存储桶中的 PDF 文件中提取文本。

我发现很难在文档甚至 Stack Overflow 中获得与此主题相关的有意义的内容。我最接近解决这个问题的是这个问题:

但由于下述原因,它对我不起作用,这就是为什么我要问自己的问题。

问题是:

我正在向指定的 url

发出以下 post 请求
    https://vision.googleapis.com/v1/files:asyncBatchAnnotate?key=MY_API_KEY

    "requests": [
    {
        "inputConfig": {
            "gcsSource": {
                "uri": "gs://BUCKET_NAME/FILE_NAME.pdf"
            },
            "mimeType": "application/pdf"
        },
        "features": [
            {
                "type": "DOCUMENT_TEXT_DETECTION"
            }
        ],
        "outputConfig": {
            "gcsDestination": {
                "uri": "gs://BUCKET_NAME/output/"
            },
            "batchSize": 1
        }
    }
]

POST请求成功,之后,根据我发现的,我必须使用我之前收到的响应进行get请求来检查文档文本检测是否完成post 请求。如果完成,它应该在我的存储桶内的文件中写入响应(这就是我在上面的 json 中配置 'output' 的原因)

但是,当我在 url

上发出获取请求时
    https://vision.googleapis.com/v1/operations/RESPONSE?key=API_KEY

我收到以下错误:

    "error": {
        "code": 7,
        "message": "Error writing final output to: gs://BUCKET_NAME/output/filename.json"
    }

即使有办法解决这个问题来写最终输出,我想知道这是否是从 pdf 中提取数据的最佳方法,制作一个 post 和一个 get 看起来很奇怪,特别是考虑到当你使用相同的API从图像中提取数据时,你只需要发出一个请求

感谢您的帮助。

我认为问题在于您正在为 "asyncBatchAnnotate" 请求使用 API 密钥身份验证。该文档指出您必须使用服务帐户身份验证: https://cloud.google.com/vision/docs/pdf#authentication

另一个重点是使用的服务帐户必须具有对目标存储桶的写入权限。

发出 POST 请求以提交任务,然后发出 GET 请求以检查状态是长 运行 操作的常见 REST 模式。 http://restalk-patterns.org/long-running-operation-polling.html

我认为图像和 pdf 的 APIs 不同,因为在识别图像时假定操作相对较短,而识别多页 pdf 可能需要很长时间。