9

I am using the Google Cloud Vision Java API client documented here: https://cloud.google.com/vision/docs/reference/libraries.

The following quickstart code works fine if I use the implicit default credentials by setting the GOOGLE_APPLICATION_CREDENTIALS environment variable to reference a json file for the right "service account".

// Imports the Google Cloud client library
import com.google.cloud.vision.spi.v1.ImageAnnotatorClient;
import com.google.cloud.vision.v1.AnnotateImageRequest;
import com.google.cloud.vision.v1.AnnotateImageResponse;
import com.google.cloud.vision.v1.BatchAnnotateImagesResponse;

...


public class QuickstartSample {
  public static void main(String... args) throws Exception {
    // Instantiates a client
    ImageAnnotatorClient vision = ImageAnnotatorClient.create();

    ...

    BatchAnnotateImagesResponse response = vision.batchAnnotateImages(requests);
    List<AnnotateImageResponse> responses = response.getResponsesList();

    ...
  }
}

However, I want to authenticate to the API using a simple (single-string) API key rather than a service account, and I cannot find documentation explaining how to do that through this java library. Is it possible?

mac01021
  • 601
  • 4
  • 12
  • 1
    same problem here, did you found a solution? – JohnnyAW Jun 06 '17 at 15:35
  • @JohnnyAW: I don't think it can be done. My work-around has been to use the REST API (https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate) instead of the RPC API. It's not so hard to build the JSON fragments using a StringBuilder and then parse the response using GSON or whatever. – mac01021 Jun 07 '17 at 14:46
  • I'm also looking for this. Is strange that it's so simple using REST calls but not with the Java library. – Carl Emmoth Oct 19 '17 at 05:25
  • maybe this might help: it's a code sample for Android (which uses Java), and uses a simple API key: https://github.com/GoogleCloudPlatform/cloud-vision/tree/master/android – thijsonline Nov 02 '17 at 10:35

1 Answers1

1

It's possible: Create an ImageAnnotatorSettings like:

ImageAnnotatorSettings ias = ImageAnnotatorSettings.newBuilder()
        .setCredentialsProvider(
                FixedCredentialsProvider.create(#InputStream of your json key#)
        )
        .build();

replace your line

ImageAnnotatorClient vision = ImageAnnotatorClient.create();

with

ImageAnnotatorClient vision = ImageAnnotatorClient.create(ias);

Give it a try!

Sérgio Sousa
  • 53
  • 1
  • 8