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

时间:2018-11-19 19:55:07

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

我一般都不了解云环境和编程,因此我在努力使用Google Vision API从位于远程存储桶中的PDF文件提取文本。

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

Cloud Vision API - PDF OCR

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

问题出在这里

我正在对指定的网址发出以下发布请求

    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上获取请求

    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从图像中提取数据,您只需发出一个请求

感谢您的帮助。

1 个答案:

答案 0 :(得分: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则需要花费大量时间。