Search code examples
authenticationgoogle-cloud-storagegoogle-oauthgoogle-cloud-vision

Enable Cloud Vision API to access a file on Cloud Storage


i have already seen there are some similar questions but none of them actually provide a full answer. Since I cannot comment in that thread, i am opening a new one.

How do I address Brandon's comment below?

"... In order to use the Cloud Vision API with a non-public GCS object, you'll need to send OAuth authentication information along with your request for a user or service account which has permission to read the GCS object."?

I have the json file the system gave me as described here when I created the service account. I am trying to run the api from a python script.

It is not clear how to use it.


Solution

  • I'd recommend to use the Vision API Client Library for python to perform the call. You can install it on your machine (ideally in a virtualenv) by running the following command:

    pip install --upgrade google-cloud-vision
    

    Next, You'll need to set the environment variable GOOGLE_APPLICATION_CREDENTIALS to the file path of the JSON file that contains your service account key. For example, on a Linux machine you'd do it like this:

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
    

    Finally, you'll just have to call the Vision API client's method you desire (for example here the label_detection method) like so:

    def detect_labels():
        """Detects labels in the file located in Google Cloud Storage."""
        client = vision.ImageAnnotatorClient()
        image = types.Image()
        image.source.image_uri = "gs://bucket_name/path_to_image_object"
    
        response = client.label_detection(image=image)
        labels = response.label_annotations
        print('Labels:')
    
        for label in labels:
            print(label.description)
    

    By initialyzing the client with no parameter, the library will automatically look for the GOOGLE_APPLICATION_CREDENTIALS environment variable you've previously set and run on behalf of this service account. If you granted it permissions to access the file, it'll run successfully.