Я пытаюсь разобраться в библиотеке 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 МБ, и не имел ничего общего с учетными данными!