我将图像存储在Google云端存储上,并使用Google Vision API检测这些图像的标签。我为这两个目的使用相同的帐户和凭据。 我使用的示例程序是: 'https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/vision/cloud-client/detect/detect.py'
我可以成功检测互联网上可公开访问的本地图像和图像的标签。 当我将以下内容与存储在GCP存储空间中的存储桶中的图像一起使用时,除非我将数据(图像)标记为公开,否则程序不会检测到任何标签。
e.g。
当它是私人时:
# ./detect.py labels-uri
'https://www.googleapis.com/download/storage/v1/b/mybucket/o/Penguins.jpg?
generation=1510548912343529&alt=media'
Labels:
当我将其标记为“公开”时:
# ./detect.py labels-uri
'https://www.googleapis.com/download/storage/v1/b/mybucket/o/Penguins.jpg?
generation=1510548912343529&alt=media'
Labels:
penguin
bird
king penguin
flightless bird
beak
organism
我很期待,因为我使用相同的凭据进行视觉和存储API访问,它甚至应该在我的私有图像上工作。
你能帮忙吗?
答案 0 :(得分:2)
引用云存储对象时,请使用URI模式gs://bucket_name/object_name
。
尝试./detect.py labels-uri gs://mybucket/Penguins.jpg
Cloud Vision支持云存储对象以及任意URL。但是,当您引用URL时,Cloud Vision不会转发您的凭据,这与您直接引用云存储对象时不同。在这里,您要指定一个尝试匿名下载云存储对象的URL,这不是您想要的。 (但请注意,Cloud Vision不支持指定特定版本的GCS对象 - 有关更多信息,请参阅https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate)。
答案 1 :(得分:0)
这对我使用非公共 GS 存储桶有效:
export GOOGLE_APPLICATION_CREDENTIALS="path-to-your-creds.json"
Python3:
import json
import google.auth
import requests
from google.auth.transport import requests as grequests
from google.cloud import storage
URL = "https://vision.googleapis.com/v1p4beta1/files:asyncBatchAnnotate"
credentials, project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(grequests.Request())
headers = {'Authorization': 'Bearer ' + credentials.token, "Content-Type": "application/json; charset=utf-8"}
request_json = {
"requests": [
{
"inputConfig": {
"gcsSource": {
"uri": "gs://your-input-bucket/test.pdf"
},
"mimeType": "application/pdf"
},
"features": [
{
"type": "DOCUMENT_TEXT_DETECTION"
}
],
"outputConfig": {
"gcsDestination": {
"uri": "gs://your-output-bucket/json"
},
"batchSize": 1
}
}
]
}
response = requests.post(URL, json=request_json, headers=headers)
print(response.content)