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

标签 node.js google-cloud-platform google-vision pdf-extraction

我对云环境和一般编程不太熟悉,并且正在努力使用 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 请求来检查文档文本检测是否完成。如果完成,它应该在我的存储桶内的文件中写入响应(这就是我在上面的 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从图像中提取数据时,您只需要发出一个请求

感谢您的帮助。

最佳答案

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

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

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

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

关于Node.js - 使用 Google Cloud Vision API 从 PDF 文件中提取文本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381742/

相关文章:

javascript - 在 Node.JS 中获取 http post 表单数据

javascript - 访问 json 变量 (node.js)

python - App Engine 服务的自定义服务帐户

Android Vision - 减少条码跟踪窗口

Android 应用程序在没有堆栈的情况下崩溃 : how to debug?

javascript - 没有换行的node.js console.log

node.js - nodejs 重用同一服务器的最后一个 TLS 连接

python - Airflow xcom pull 只返回字符串

google-cloud-platform - 如何传递动态参数 Airflow 运算符?

android - 从 Firebase 视觉文本检测总量