1. 简介
在当今这个数据驱动型应用的时代,利用计算机视觉等先进的机器学习和人工智能服务变得越来越重要。其中一项服务是 Vision API,它提供强大的图片分析功能。在此 Codelab 中,您将学习如何使用 Spring Boot 和 Java 创建计算机视觉应用,从而在项目中充分发挥图像识别和分析的潜力。应用界面将接受包含书面或印刷文本的图片的公开网址作为输入,提取文本,检测语言,如果语言是支持的语言之一,则会生成该文本的英文翻译。
构建内容
您将创建一个
- 一个使用 Vision API 和 Google Cloud Translation API 的 Java Spring Boot 应用
- 已部署在 Cloud Run 上
2. 要求
以下是前提条件:
创建项目
- 已创建项目并启用结算功能的 Google Cloud 账号
- 已启用 Vision API、Translation API、Cloud Run API 和 Artifact Registry API
- Cloud Shell 已激活
- 已启用 Cloud Storage API,已创建存储分区,已上传包含本地支持语言的文本或手写内容的图片(或者您可以使用此博文中提供的示例图片链接)
如需了解如何启用 Google Cloud API,请参阅文档。
激活 Cloud Shell
- 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq:
在 Cloud 控制台中,点击右上角的“激活 Cloud Shell”

- 在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且项目已设置为您的项目 ID。在 Cloud Shell 中运行以下命令,以确认您已通过身份验证:
gcloud auth list
- 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目
gcloud config list project
- 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <PROJECT_ID>
如需了解 gcloud 命令和用法,请参阅文档。
3. 引导 Spring Boot 项目
首先,使用您偏好的 IDE 或 Spring Initializr 创建一个新的 Spring Boot 项目。在项目的配置中包含必要的依赖项,例如 Spring Web、Spring Cloud GCP 和 Vision AI。或者,您也可以按照以下步骤使用 Cloud Shell 中的 Spring Initializr 轻松启动 Spring Boot 应用。
运行以下命令以创建 Spring Boot 项目:
curl https://start.spring.io/starter.tgz -d packaging=jar -d dependencies=cloud-gcp,web,lombok -d baseDir=spring-vision -d type=maven-project -d bootVersion=3.0.1.RELEASE | tar -xzvf -
spring-vision 是您的项目名称,请根据您的需求进行更改。
bootVersion 是 Spring Boot 的版本,请务必在实现时根据需要更新它。
type 是项目 build 工具类型的版本,您可以根据需要将其更改为 gradle。

这会在“spring-vision”下创建如下所示的项目结构:

pom.xml 包含项目的所有依赖项(您使用此命令配置的依赖项已添加到您的 pom.xml 中)。
src/main/java/com/example/demo 包含源类 .java 文件。
资源包含项目使用的图片、XML、文本文件和静态内容,这些内容可独立维护。
借助 application.properties,您可以维护管理员功能,以定义应用的特定配置文件属性。
4. 配置 Vision API
启用 Vision API 后,您可以选择在应用中配置 API 凭据。您可以选择使用应用默认凭证来设置身份验证。不过,在此演示实现中,我尚未实现凭据的使用。
实现视觉和翻译服务
创建与 Vision API 交互的服务类。注入必要的依赖项,并使用 Vision API 客户端发送图片分析请求。您可以根据应用的要求实现相应方法,以执行图片加标签、人脸检测、识别等任务。在此演示中,我们将使用手写提取和翻译方法。
为此,请确保在 pom.xml 中包含以下依赖项。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-vision</artifactId>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-translate</artifactId>
</dependency>
从代码库中克隆 / 替换以下文件,并将其添加到项目结构中的相应文件夹 / 路径:
- Application.java (/src/main/java/com/example/demo)
- TranslateText.java (/src/main/java/com/example/demo)
- VisionController.java (/src/main/java/com/example/demo)
- index.html (/src/main/resources/static)
- result.html (/src/main/resources/templates)
- pom.xml
服务 org.springframework.cloud.gcp.vision.CloudVisionTemplate 中的方法 extractTextFromImage 可让您从图片输入中提取文本。通过服务 com.google.cloud.translate.v3 中的方法 getTranslatedText,您可以传递从图片中提取的文本,并以所需的目标语言获取翻译后的文本作为响应(如果源语言是受支持的语言之一)。
构建 REST API
设计并实现将公开 Vision API 功能的 REST 端点。创建用于处理传入请求的控制器,并利用 Vision API 服务来处理图片和返回分析结果。在此演示中,我们的 VisionController 类实现了端点,处理传入的请求,调用 Vision API 和 Cloud Translation 服务,并将结果返回到视图层。REST 端点的 GET 方法的实现如下所示:
@GetMapping("/extractText")
public String extractText(String imageUrl) throws IOException {
String textFromImage =
this.cloudVisionTemplate.extractTextFromImage(this.resourceLoader.getResource(imageUrl));
TranslateText translateText = new TranslateText();
String result = translateText.translateText(textFromImage);
return "Text from image translated: " + result;
}
上述实现中的 TranslateText 类具有调用 Cloud Translation 服务的方法:
String targetLanguage = "en";
TranslateTextRequest request =
TranslateTextRequest.newBuilder()
.setParent(parent.toString())
.setMimeType("text/plain")
.setTargetLanguageCode(targetLanguage)
.addContents(text)
.build();
TranslateTextResponse response = client.translateText(request);
// Display the translation for each input text provided
for (Translation translation : response.getTranslationsList()) {
res = res + " ::: " + translation.getTranslatedText();
System.out.printf("Translated text : %s\n", res);
}
借助 VisionController 类,我们实现了 REST 的 GET 方法。
集成 Thymeleaf 以进行前端开发
使用 Spring Boot 构建应用时,前端开发的一个热门选择是利用 Thymeleaf 的强大功能。Thymeleaf 是一种服务器端 Java 模板引擎,可让您将动态内容无缝集成到 HTML 网页中。Thymeleaf 允许您创建嵌入了服务器端表达式的 HTML 模板,从而提供顺畅的开发体验。这些表达式可用于动态呈现 Spring Boot 后端的数据,从而更轻松地显示 Vision API 服务执行的图片分析结果。
首先,请确保您的 Spring Boot 项目中包含 Thymeleaf 所需的依赖项。您可以在 pom.xml 中添加 Thymeleaf Starter 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在控制器方法中,从 Vision API 服务检索分析结果并将其添加到模型中。该模型表示 Thymeleaf 将用于呈现 HTML 模板的数据。填充模型后,返回要渲染的 Thymeleaf 模板的名称。Thymeleaf 将负责处理模板,用实际数据替换服务器端表达式,并生成将发送到客户端浏览器的最终 HTML。
对于 VisionController 中的 extractText 方法,我们已将结果作为 String 返回,但未添加到模型中。不过,我们在提交网页时对 index.html 调用了 GET 方法 extractText 方法。借助 Thymeleaf,您可以打造顺畅的用户体验,让用户能够上传图片、触发 Vision API 分析,并实时查看结果。利用 Thymeleaf 进行前端开发,充分发挥 Vision AI 应用的潜力。
<form action="/extractText">
Web URL of image to analyze:
<input type="text"
name="imageUrl"
value=""
<input type="submit" value="Read and Translate" />
</form>
5. 在 Cloud Run 上部署计算机视觉应用
为服务和控制器类编写单元测试,以确保 /src/test/java/com/example 文件夹中的功能正常运行。当您确信其稳定性后,将其打包到可部署的制品(例如 JAR 文件)中,然后将其部署到 Cloud Run(Google Cloud 上的无服务器计算平台)。在此步骤中,我们将重点介绍如何使用 Cloud Run 部署容器化的 Spring Boot 应用。
- 通过在 Cloud Shell 中执行以下步骤来打包应用(确保终端提示符位于项目根文件夹中)
构建:
./mvnw package
构建成功后,在本地运行以进行测试:
./mvnw spring-boot:run
- 使用 Jib 将 Spring Boot 应用容器化:
您可以使用 Jib 实用程序来简化容器化流程,而不是手动创建 Dockerfile 并构建容器映像。Jib 是一款可直接与构建工具(如 Maven 或 Gradle)集成的插件,可让您构建优化的容器映像,而无需编写 Dockerfile。在继续操作之前,您需要启用 Artifact Registry API(建议使用 Artifact Registry 而不是 Container Registry)。然后,运行 Jib 以构建 Docker 映像并发布到注册表:
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib
注意:在此实验中,我们没有在 pom.xml 中配置 Jib Maven 插件,但对于高级用法,可以使用更多配置选项在 pom.xml 中添加该插件
- 将我们在上一步中推送到 Artifact Registry 的容器部署到 Cloud Run。此步骤只需执行一个命令:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
您也可以通过界面执行此操作。前往 Google Cloud 控制台,然后找到 Cloud Run 服务。点击“创建服务”,然后按照屏幕上的说明操作。指定您之前推送到注册表的容器映像,配置所需的部署设置(例如 CPU 分配和自动扩缩),然后选择合适的部署区域。您可以设置特定于应用的环境变量。这些变量可以包括身份验证凭据(API 密钥等)、数据库连接字符串,或 Vision AI 应用正常运行所需的任何其他配置。部署成功完成后,您应该会获得应用的端点。
使用 Vision AI 应用
出于演示目的,您可以使用以下图片网址供应用读取和翻译:https://storage.googleapis.com/img_public_test/tamilwriting1.jfif

6. 清理
为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:
- 在 Google Cloud 控制台中,前往“管理资源”页面
- 在项目列表中,选择要删除的项目,然后点击“删除”
- 在对话框中输入项目 ID,然后点击“关停”以删除项目
7. 恭喜
恭喜!您已成功使用 Spring Boot 和 Java 创建了 Vision AI 应用。借助 Vision AI 的强大功能,您的应用现在可以执行复杂的图片分析,包括加标签、面孔检测等。Spring Boot 的集成为构建可扩缩且稳健的 Google Cloud Native 应用奠定了坚实的基础。继续探索 Vision AI、Cloud Run、Cloud Translation 等的强大功能,以增强应用的其他特性和功能。如需了解详情,请参阅 Vision API、Cloud Translation 和 GCP Spring 文档。尝试使用 Spring Native 选项进行相同的实验!此外,为了让您抢先了解生成式 AI 世界,请查看此 API 在 Model Garden 中的显示方式。