Google Cloud vision API: “Request had insufficient

2019-02-17 08:06发布

问题:

Hi I'm trying to use google's cloud vision API, specifically this example: https://cloud.google.com/vision/docs/label-tutorial#label_tutorial_1

I followed this tutorial: https://cloud.google.com/vision/docs/getting-started#set_up_a_service_account for setting up a service account but when I run my code I get:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://vision.googleapis.com/$discovery/rest?version=v1 returned "Request had insufficient authentication scopes.">

Can anybody help? I can't figure out what's going on, my code is 1:1 with the tutorials.

回答1:

You need to clean ~/.credentials/sheets.googleapis.com-python-quickstart.json from your computer. Then define your scope as https://www.googleapis.com/auth/drive. Run your code again, it should ask you to re-authorize. Then run your code.



回答2:

I was getting the same error. I did the following:

sudo apt-get update & apt-get upgrade

pip install --upgrade google-api-python-client

then initialized the gcloud sdk via ...

gcloud init 

and voila it started working!

You can also try re-generating the credentials from the API manager



回答3:

You might want to use the google.cloud client library for the Vision API instead.

To authenticate with the right scope, you'll need to generate a service account in the Cloud Console, and point to it from your code (or environment variables). See the Vision auth section for more info:

Get a service account from the credentials manager in the Cloud Console. Then point to your project and JSON credentials file in your environment:

$ export GOOGLE_CLOUD_PROJECT="your-project-id-here"
$ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"

The demo you were trying to run (labeling an image) becomes:

>>> from google.cloud import vision
>>> client = vision.Client()
>>> image = client.image(source_uri='gs://my-storage-bucket/image.jpg')
>>> labels = image.detect_labels(limit=3)
>>> labels[0].description
'automobile'
>>> labels[0].score
0.9863683

(Code snippet taken from the docs)