1

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

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

Cloud Vision API - PDF OCR

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

这是问题所在:

我正在向指定的 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 请求成功,然后根据我的发现,我必须使用我从之前的 post 请求中收到的响应发出一个 get 请求来检查文档文本检测是否完成。如果完成,它应该在我的 Bucket 内的文件中写入响应(这就是我在上面的 json 中配置“输出”的原因)

但是,当我在 url 上发出 get 请求时

    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 中提取数据的最佳方法,发帖和获取看起来很奇怪,特别是考虑到当你提取时使用相同 API 从图像中获取数据,您只需发出一个请求

谢谢您的帮助。

4

1 回答 1

1

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

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

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

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

于 2018-11-20T09:20:44.053 回答