我一般都不了解云环境和编程,因此我在努力使用Google Vision API从位于远程存储桶中的PDF文件提取文本。
我发现在文档中甚至在Stack Overflow中都很难获得与此主题相关的有意义的内容。我最接近解决这个问题的地方是这个问题:
但是由于以下原因,它对我不起作用,这就是为什么我要问自己一个问题。
问题出在这里
我正在对指定的网址发出以下发布请求
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从图像中提取数据,您只需发出一个请求
感谢您的帮助。
答案 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则需要花费大量时间。