Проблема с учетными данными приложения Google

Привет, во-первых, я впервые пользуюсь услугами Google. Я пытаюсь разработать приложение с помощью Google AutoML Vision Api (пользовательская модель). Я уже построил пользовательскую модель и сгенерировал ключи API (надеюсь, я сделал это правильно).

После многих попыток разработки через Ionics и Android и неудачного подключения к API.

Теперь я взял прогнозное моделирование с заданными кодами в Python (в Google Colab), и даже при этом я все еще получаю сообщение об ошибке, в котором говорится, что не удалось автоматически определить учетные данные. Я не уверен, где я ошибся в этом. Пожалуйста помоги. Умирающий.

#installing & importing libraries 

!pip3 install google-cloud-automl

import sys  

from google.cloud import automl_v1beta1
from google.cloud.automl_v1beta1.proto import service_pb2


#import key.json file generated by GOOGLE_APPLICATION_CREDENTIALS
from google.colab import files
credentials = files.upload()


#explicit function given by Google accounts 

[https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-python][1]

def explicit():
from google.cloud import storage

# Explicitly use service account credentials by specifying the private key
# file.
storage_client = storage.Client.from_service_account_json(credentials)

# Make an authenticated API request
buckets = list(storage_client.list_buckets())
print(buckets)




#import image for prediction
from google.colab import files
YOUR_LOCAL_IMAGE_FILE = files.upload()


#prediction code from modelling
def get_prediction(content, project_id, model_id):
prediction_client = automl_v1beta1.PredictionServiceClient()

name = 'projects/{}/locations/uscentral1/models/{}'.format(project_id, 
        model_id)
payload = {'image': {'image_bytes': content }}
params = {}
request = prediction_client.predict(name, payload, params)
return request  # waits till request is returned

#print function substitute with values 
 content = YOUR_LOCAL_IMAGE_FILE
 project_id = "REDACTED_PROJECT_ID"
 model_id = "REDACTED_MODEL_ID"

 print (get_prediction(content, project_id,  model_id))

Сообщение об ошибке при запуске последней строки кода:

введите здесь описание изображения


person Purry    schedule 16.04.2019    source источник


Ответы (1)


credentials = files.upload()
storage_client = storage.Client.from_service_account_json(credentials)

эти две строки - проблема, я думаю. Первый фактически загружает содержимое файла, а второй ожидает путь к файлу вместо содержимого.

Давайте сначала займемся первой строкой: я вижу, что просто передать credentials, которое вы получите после вызова credentials = files.upload(), не получится, как описано в документы для него. Делая это так, как вы, credentials фактически не содержит значение файла напрямую, а скорее словарь для имен файлов и содержимого.

Предполагая, что вы загружаете только 1 файл учетных данных, вы можете получить содержимое файла, подобного этому (украдено из этого ответа SO):

from google.colab import files
uploaded = files.upload()
credentials_as_string = uploaded[uploaded.keys()[0]]

Итак, теперь у нас есть содержимое загруженного файла в виде строки, следующим шагом будет создание из него фактического объекта учетных данных.

Этот ответ на Github показывает, как создать учетные данные объект из строки, преобразованной в json.

import json
from google.oauth2 import service_account

credentials_as_dict = json.loads(credentials_as_string)
credentials = service_account.Credentials.from_service_account_info(credentials_as_dict)

Наконец, мы можем создать объект клиента хранилища, используя этот объект учетных данных:

storage_client = storage.Client(credentials=credentials)

Обратите внимание, что я не проверял это, поэтому, пожалуйста, попробуйте и посмотрите, действительно ли это работает.

person Edo Akse    schedule 19.04.2019
comment
Эй, спасибо за ваш ответ. Я отказался от попыток решить проблему, поэтому я переключился на Nanonets, и он работает как шарм и на самом деле дешевле. nanonets.com - person Purry; 10.05.2019