Google Vision API仅检测GCP上的公共图片标签

时间:2017-11-28 14:30:23

标签: google-cloud-storage google-cloud-vision

我将图像存储在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访问,它甚至应该在我的私有图像上工作。

你能帮忙吗?

2 个答案:

答案 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)