领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多嗨,Spring 粉丝们!在这个简短的 8 部分系列文章中,我们将介绍 Google Cloud Platform 的 Spring Cloud 集成,称为 Spring Cloud GCP。Spring Cloud GCP 代表了 Google 和 Pivotal 之间的共同努力,旨在为使用 Google Cloud Platform 的 Spring Cloud 开发人员提供一流的体验。Pivotal Cloud Foundry 用户将享受更加轻松与 GCP 服务代理集成。我编写了这些部分,并参考了 Google Cloud 开发者倡导者兼我的朋友Ray Tsang的意见。您还可以在我们的 Google Next 2018 会议中了解 Spring Cloud GCP 的演练,美妙的 Google Cloud Platform。谢谢,伙计!与往常一样,如果您有任何反馈,我都很乐意收到您的来信。
本系列共有八篇文章。以下列出所有文章
Spring Cloud GCP 项目致力于提供与 Spring 和一些与 Spring 完美匹配的 GCP 服务的集成。但 GCP 非常庞大!还有许多其他服务可以通过其直接的 Java SDK甚至直接通过其 REST API 来使用。Spring Cloud GCP 也可以使使用这些 API 变得更容易!在本节中,我们将与 Google Cloud Vision API 集成,该 API 支持分析图像并执行特征检测。
与往常一样,您需要启用 API
gcloud services enable vision.googleapis.com
当您使用 Spring Cloud GCP 中的自动配置时,它们会方便地为您获取使用给定 API 所需的 OAuth 范围,您无需担心。对于其他服务,我们需要自己完成这项工作。谢天谢地,这很容易。使用spring.cloud.gcp.credentials.scopes
属性获取一个通用的、平台范围的、通配符范围,该范围可用于请求所有基本 Google Cloud Platform API 的权限。
src/main/resources/applications.properties。
spring.cloud.gcp.credentials.scopes=https://www.googleapis.com/auth/cloud-platform
spring.cloud.gcp.credentials.encoded-key=FIXME
就是这样!现在您可以根据需要使用 API 了。让我们创建一个简单的 REST API,您可以将图像作为多部分文件上传发布到该 API,并让 Google Cloud Vision API 执行特征检测。
package com.example.gcp.vision;
import com.google.api.gax.core.CredentialsProvider;
import com.google.cloud.vision.v1.*;
import com.google.protobuf.ByteString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Collections;
// curl -F "image=@$HOME/Pictures/soup.jpg" https://127.0.0.1:8080/analyze
@SpringBootApplication
public class VisionApplication {
@Bean
ImageAnnotatorClient imageAnnotatorClient(
CredentialsProvider credentialsProvider) throws IOException {
ImageAnnotatorSettings settings = ImageAnnotatorSettings
.newBuilder()
.setCredentialsProvider(credentialsProvider)
.build();
return ImageAnnotatorClient.create(settings);
}
@Slf4j
@RestController
public static class ImageAnalyzerRestController {
private final ImageAnnotatorClient client;
private final Feature labelDetection = Feature.newBuilder().setType(Feature.Type.LABEL_DETECTION).build();
private final Feature textDetection = Feature.newBuilder().setType(Feature.Type.DOCUMENT_TEXT_DETECTION).build();
ImageAnalyzerRestController(ImageAnnotatorClient client) {
this.client = client;
}
@PostMapping("/analyze")
String analyze(@RequestParam MultipartFile image) throws IOException {
byte[] data = image.getBytes();
ByteString imgBytes = ByteString.copyFrom(data);
Image img = Image.newBuilder().setContent(imgBytes).build();
AnnotateImageRequest request = AnnotateImageRequest
.newBuilder()
.addFeatures(this.labelDetection)
.addFeatures(this.textDetection)
.setImage(img)
.build();
BatchAnnotateImagesResponse responses = this.client
.batchAnnotateImages(Collections.singletonList(request));
AnnotateImageResponse reply = responses.getResponses(0);
return reply.toString();
}
}
public static void main(String args[]) {
SpringApplication.run(VisionApplication.class, args);
}
}
MultipartFile
,从中我们可以轻松提取字节以馈送到此 API。您可以使用curl
或任何其他通用 HTTP 客户端将图像发布到此端点。以下是使用
curl
:
curl -F "image=@/home/jlong/Desktop/soup.jpg" https://127.0.0.1:8080/analyze
还有无数其他您可以使用的 API!这里我们只是开始触及可能的表面。查看此服务目录!例如,Google Cloud DataStore、Google Storage、Firebase、BigQuery、Apigee、视频流服务、物联网服务、机器学习、Google Tensorflow、Google Dataflow、Google Cloud AutoML、Cloud Natural Language、Cloud Speech-to-Text、Cloud Text-to-Speech、基因组学 API、Video Intelligence,等等。