Google Cloud Vision API - Как включить сервисный аккаунт

Я пытаюсь разобраться в библиотеке Java API GoogleVision.

Я создал учетную запись службы, загрузил json и установил эту переменную среды.

GOOGLE_APPLICATION_CREDENTIALS=C:\GoogleAPI\keys\translate-41428d4d1ec6.json

Я установил учетные данные приложения по умолчанию, используя:

gcloud beta auth application-default login

И я следую примеру здесь: https://cloud.google.com/vision/docs/reference/libraries

Теперь я предполагаю, что все сделанные вызовы будут использовать учетную запись службы как по волшебству, поскольку я не выполняю никакой аутентификации в коде (согласно образцу).

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

Когда я вхожу в IAM и пытаюсь назначить "роль" учетной записи службы, нет ничего, что связано с API Vision? Есть такие роли, как

  • Как я могу быть уверен, что использую учетную запись службы для звонка?
  • Что мне нужно сделать, чтобы явно разрешить учетной записи службы доступ к определенному API, например GoogleVision, если он не указан в IAM ... или ВСЕ учетные записи служб, связанные с проектом, могут получить доступ к API?

Пример в документации показывает, как

Любая помощь приветствуется.

Также меня интересует, как бы я адаптировал образец, чтобы не использовать учетные данные приложения по умолчанию, а фактически создать конкретный экземпляр учетных данных и использовать его для вызова Google Vision, поскольку это неясно. Приведенный пример предназначен для вызова GoogleStorage, но я не могу перевести это в Google Vision.

public class StorageFactory {
  private static Storage instance = null;

  public static synchronized Storage getService() throws IOException, GeneralSecurityException {
    if (instance == null) {
      instance = buildService();
    }
    return instance;
  }

  private static Storage buildService() throws IOException, GeneralSecurityException {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory);

    // Depending on the environment that provides the default credentials (for
    // example: Compute Engine, App Engine), the credentials may require us to
    // specify the scopes we need explicitly.  Check for this case, and inject
    // the Cloud Storage scope if required.
    if (credential.createScopedRequired()) {
      Collection<String> scopes = StorageScopes.all();
      credential = credential.createScoped(scopes);
    }

    return new Storage.Builder(transport, jsonFactory, credential)
        .setApplicationName("GCS Samples")
        .build();
  }
}

И не заставляйте меня начинать с тех 2 часов, которые я только что потратил на получение сообщения «Доступ запрещен» ... что, по-видимому, произошло из-за того, что размер изображения превышал 4 МБ, и не имел ничего общего с учетными данными!


person smackenzie    schedule 11.02.2017    source источник
comment
Включили ли вы Cloud Vision API для своего проекта на странице console.cloud .google.com / apis / api / vision.googleapis.com /? Также см. youtube.com/watch?v=tSnzoW4RlaQ, связанный с учетными записями служб.   -  person jarmod    schedule 11.02.2017
comment
Я создал учетную запись службы, включил api. Мне ни разу не приходилось предоставлять доступ к API Vision специально для учетной записи службы ?! Достаточно ли создания учетной записи службы? Я могу использовать учетную запись службы без роли ... для доступа к Vision API ... с использованием учетных данных приложения по умолчанию. Я думал, мне придется привязать сервисный аккаунт к API.   -  person smackenzie    schedule 12.02.2017
comment
Насколько я могу судить, вам не нужна какая-либо конкретная роль для вызова Vision API. Я понимаю, почему это может иметь смысл - вы загружаете изображение и просите его классифицировать, но на самом деле вы не используете какие-либо другие облачные ресурсы, для которых требуются разрешения.   -  person jarmod    schedule 12.02.2017
comment
Спасибо за вашу помощь   -  person smackenzie    schedule 12.02.2017


Ответы (1)


Вам не нужно авторизовать сервисный аккаунт для доступа к Vision API. Достаточно включить API в вашем проекте и использовать учетную запись службы, связанную с этим проектом. Сообщите мне, если у вас все еще есть проблемы.

person Rob Kochman    schedule 12.02.2017
comment
Спасибо, теперь я хочу, чтобы Vision обрабатывал изображения в Google Storage, поэтому предположим, что мне нужно назначить ACL для корзины с помощью учетной записи службы. Вперед ... - person smackenzie; 12.02.2017