Using Vision with Spring framework

Spring Cloud Google Cloud offers convenient libraries to interface with the Vision API from a Spring application. These libraries include Auto-Configuration and helper classes and Spring Boot Template classes to allow developers to get started with the Vision API quickly.

If you're already familiar with the Spring Framework, then Spring Cloud Vision can make it easier to work with the Vision API in your application and reduce the amount of code that you need to write.

This page explains how to add Spring Cloud Vision to a Java application. For detailed information about the module, see the Spring Cloud Vision reference.

Dependency setup

To begin using this library, add the spring-cloud-gcp-starter-vision artifact to your project.

Maven coordinates, using Spring Cloud Google Cloud BOM:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-gcp-dependencies</artifactId>
      <version>1.2.8.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-gcp-starter-vision</artifactId>
</dependency>

You must also create a service account and use the service account key to authenticate with Google Cloud.

For more information, see the instructions for setting up a Java development environment. You do not need to install the Google Cloud Client Library for Java; the Spring Boot starter installs the client library automatically.

Image analysis

After configuring the Spring Cloud Google Cloud Vision dependencies on your classpath, you can immediately begin processing your images by getting an instance of CloudVisionTemplate using Spring dependency injection.

@Autowired private CloudVisionTemplate cloudVisionTemplate;

The CloudVisionTemplate is a wrapper around the Vision API Client Libraries and lets you process images easily through the Vision API. For more information about the CloudVisionTemplate features, see the Cloud Vision template reference page.

The following sections contain code samples for common use cases of the CloudVisionTemplate. All code snippets come from the Spring and Cloud Vision sample application.

Getting the classification labels for an image

The code below extracts the classification labels for an image, providing you with general descriptions of image content.

AnnotateImageResponse response =
    this.cloudVisionTemplate.analyzeImage(
        this.resourceLoader.getResource(imageUrl), Type.LABEL_DETECTION);

Map<String, Float> imageLabels =
    response.getLabelAnnotationsList().stream()
        .collect(
            Collectors.toMap(
                EntityAnnotation::getDescription,
                EntityAnnotation::getScore,
                (u, v) -> {
                  throw new IllegalStateException(String.format("Duplicate key %s", u));
                },
                LinkedHashMap::new));

Extracting the Text In an Image

The code sample below describes another common operation of extracting the text from an image.

String textFromImage =
    this.cloudVisionTemplate.extractTextFromImage(this.resourceLoader.getResource(imageUrl));
return "Text from image: " + textFromImage;

What's next