1. Introdução
Na era atual de aplicativos orientados por dados, é cada vez mais importante aproveitar serviços avançados de machine learning e inteligência artificial, como a visão computacional. Um desses serviços é a API Vision, que oferece recursos avançados de análise de imagens. Neste codelab, você vai aprender a criar um aplicativo de visão computacional usando Spring Boot e Java, o que permite aproveitar o potencial de reconhecimento e análise de imagens nos seus projetos. A interface do aplicativo aceita como entrada URLs públicos de imagens que contêm texto escrito ou impresso, extrai o texto, detecta o idioma e, se for um dos idiomas aceitos, gera a tradução em inglês desse texto.
O que você vai criar
Você vai criar um
- Um aplicativo Java Spring Boot para usar a API Vision e a API Google Cloud Translation
- Implantado no Cloud Run
2. Requisitos
- Use um navegador, como o Chrome ou o Firefox.
- Tenha um projeto do Google Cloud com o faturamento ativado.
Confira os pré-requisitos abaixo:
Criar seu projeto
- Uma conta do Google Cloud com um projeto criado e o faturamento ativado
- APIs Vision, Translation, Cloud Run e Artifact Registry ativadas
- Cloud Shell ativado
- API Storage do Cloud Storage ativada com um bucket criado e imagens com texto ou escrita à mão em idiomas locais compatíveis enviadas (ou você pode usar os links de imagens de amostra fornecidos neste blog)
Consulte a documentação para saber como ativar as APIs do Cloud.
Ativar o Cloud Shell
- Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq:
No console do Cloud, clique em "Ativar o Cloud Shell" no canto superior direito

- Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com seu ID do projeto. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list
- Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto.
gcloud config list project
- Se o projeto não estiver definido, use este comando:
gcloud config set project <PROJECT_ID>
Consulte a documentação para ver o uso e os comandos gcloud.
3. Inicializar um projeto do Spring Boot
Para começar, crie um projeto Spring Boot usando o ambiente de desenvolvimento integrado ou o Spring Initializr de sua preferência. Inclua as dependências necessárias, como Spring Web, Spring Cloud GCP e Vision AI, na configuração do projeto. Como alternativa, use o Spring Initializr no Cloud Shell seguindo as etapas abaixo para fazer o bootstrap do seu aplicativo Spring Boot com facilidade.
Execute o comando a seguir para criar o projeto do 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 é o nome do projeto. Mude-o de acordo com sua necessidade.
bootVersion é a versão do Spring Boot. Atualize-a se necessário no momento da implementação.
type é a versão do tipo de ferramenta de build do projeto. Você pode mudar para gradle, se preferir.

Isso cria uma estrutura de projeto em "spring-vision" como abaixo:

O arquivo pom.xml contém todas as dependências do projeto. As dependências configuradas usando esse comando já estão adicionadas ao pom.xml.
src/main/java/com/example/demo tem os arquivos .java das classes de origem.
Os recursos contêm as imagens, XML, arquivos de texto e o conteúdo estático que o projeto usa e que são mantidos de forma independente.
O arquivo application.properties permite manter os recursos de administrador para definir propriedades específicas do perfil do aplicativo.
4. Como configurar a API Vision
Depois de ativar a API Vision, você pode configurar as credenciais da API no aplicativo. Você também pode usar as Application Default Credentials para configurar a autenticação. No entanto, nesta implementação de demonstração, não implementei o uso de credenciais.
Implementar os serviços de visão e tradução
Crie uma classe de serviço que interaja com a API Vision. Injete as dependências necessárias e use o cliente da API Vision para enviar solicitações de análise de imagem. É possível implementar métodos para realizar tarefas como identificação de imagens, detecção facial, reconhecimento e muito mais, com base nos requisitos do seu aplicativo. Nesta demonstração, vamos usar métodos de extração e tradução de escrita à mão.
Para isso, inclua as seguintes dependências em 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>
Clone / substitua os seguintes arquivos do repositório e adicione-os às pastas / caminhos respectivos na estrutura do projeto:
- 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
O método extractTextFromImage no serviço org.springframework.cloud.gcp.vision.CloudVisionTemplate permite extrair texto da entrada de imagem. O método getTranslatedText do serviço com.google.cloud.translate.v3 permite transmitir o texto extraído da imagem e receber o texto traduzido no idioma de destino desejado como resposta (se a origem estiver em um dos idiomas compatíveis).
Como criar a API REST
Projete e implemente os endpoints REST que vão expor as funcionalidades da API Vision. Crie controladores que processem as solicitações recebidas e usem o serviço da API Vision para processar as imagens e retornar os resultados da análise. Nesta demonstração, nossa classe VisionController implementa o endpoint, processa a solicitação recebida, invoca a API Vision e os serviços do Cloud Translation e retorna o resultado para a camada de visualização. A implementação do método GET para o endpoint REST é a seguinte:
@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;
}
A classe TranslateText na implementação acima tem o método que invoca o serviço do 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);
}
Com a classe VisionController, temos o método GET para o REST implementado.
Integração do Thymeleaf para desenvolvimento de front-end
Ao criar um aplicativo com o Spring Boot, uma opção popular para o desenvolvimento de front-end é aproveitar o poder do Thymeleaf. O Thymeleaf é um mecanismo de modelos Java do lado do servidor que permite integrar conteúdo dinâmico às páginas HTML. O Thymeleaf oferece uma experiência de desenvolvimento tranquila, permitindo que você crie modelos HTML com expressões incorporadas do lado do servidor. Essas expressões podem ser usadas para renderizar dinamicamente dados do back-end do Spring Boot, facilitando a exibição dos resultados da análise de imagens realizada pelo serviço da API Vision.
Para começar, verifique se você tem as dependências necessárias para o Thymeleaf no seu projeto Spring Boot. Você pode incluir a dependência do Thymeleaf Starter no pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
No método do controlador, recupere o resultado da análise do serviço da API Vision e adicione-o ao modelo. O modelo representa os dados que serão usados pelo Thymeleaf para renderizar o modelo HTML. Depois que o modelo for preenchido, retorne o nome do modelo Thymeleaf que você quer renderizar. O Thymeleaf processa o modelo, substituindo as expressões do lado do servidor pelos dados reais e gerando o HTML final que será enviado ao navegador do cliente.
No caso do método extractText em VisionController, retornamos o resultado como um String, e não o adicionamos ao modelo. Mas invocamos o método GET extractText no index.html ao enviar a página. Com o Thymeleaf, é possível criar uma experiência do usuário perfeita, em que os usuários podem fazer upload de imagens, acionar análises da API Vision e conferir os resultados em tempo real. Aproveite todo o potencial do seu aplicativo da API Vision AI usando o poder do Thymeleaf para desenvolvimento de front-end.
<form action="/extractText">
Web URL of image to analyze:
<input type="text"
name="imageUrl"
value=""
<input type="submit" value="Read and Translate" />
</form>
5. Como implantar o app de visão computacional no Cloud Run
Escreva testes de unidade para suas classes de serviço e controlador para garantir a funcionalidade adequada na pasta /src/test/java/com/example. Quando você tiver certeza da estabilidade dele, empacote-o em um artefato implantável, como um arquivo JAR, e implante-o no Cloud Run, uma plataforma de computação sem servidor no Google Cloud. Nesta etapa, vamos focar na implantação do aplicativo Spring Boot conteinerizado usando o Cloud Run.
- Empacote o aplicativo executando as etapas a seguir no Cloud Shell. Verifique se o terminal está solicitando na pasta raiz do projeto.
Crie:
./mvnw package
Depois que a build for concluída, execute localmente para testar:
./mvnw spring-boot:run
- Conteinerize seu aplicativo Spring Boot com o Jib:
Em vez de criar manualmente um Dockerfile e criar a imagem do contêiner, use o utilitário Jib para simplificar o processo de conteinerização. O Jib é um plug-in que se integra diretamente à sua ferramenta de build (como Maven ou Gradle) e permite criar imagens de contêiner otimizadas sem escrever um Dockerfile. Antes de continuar, ative a API Artifact Registry. Recomendamos usar o Artifact Registry em vez do Container Registry. Em seguida, execute o Jib para criar uma imagem Docker e publicar no registro:
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib
Observação: neste experimento, não configuramos o plug-in Jib Maven em pom.xml, mas, para uso avançado, é possível adicioná-lo em pom.xml com mais opções de configuração.
- Implante o contêiner (que enviamos para o Artifact Registry na etapa anterior) no Cloud Run. Esta é novamente uma etapa de um comando:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
Você também pode fazer isso na interface. Navegue até o console do Google Cloud e localize o serviço do Cloud Run. Clique em "Criar serviço" e siga as instruções na tela. Especifique a imagem do contêiner que você enviou por push ao registro, configure as definições de implantação desejadas (como alocação de CPU e escalonamento automático) e escolha a região apropriada para a implantação. É possível definir variáveis de ambiente específicas para seu aplicativo. Essas variáveis podem incluir credenciais de autenticação (chaves de API etc.), strings de conexão de banco de dados ou qualquer outra configuração necessária para que seu aplicativo de Vision AI funcione corretamente. Quando a implantação for concluída, você vai receber um endpoint para seu aplicativo.
Como usar o app Vision AI
Para fins de demonstração, use o URL da imagem abaixo para que seu app leia e traduza: https://storage.googleapis.com/img_public_test/tamilwriting1.jfif

6. Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta postagem, siga estas etapas:
- No console do Google Cloud, acesse a página "Gerenciar recursos".
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
7. Parabéns
Parabéns! Você criou um aplicativo de IA Vision usando Spring Boot e Java. Com a tecnologia da Vision AI, seu aplicativo pode realizar análises sofisticadas de imagens, incluindo rotulagem, detecção de rostos e muito mais. A integração do Spring Boot oferece uma base sólida para criar aplicativos nativos do Google Cloud escalonáveis e robustos. Continue explorando os vastos recursos da Vision AI, do Cloud Run, do Cloud Translation e muito mais para aprimorar seu aplicativo com mais recursos e funcionalidades. Para saber mais, confira a documentação da API Vision, do Cloud Translation e do GCP Spring. Teste o mesmo experimento com a opção Spring Native. Para conhecer o mundo da IA generativa, confira como essa API aparece no Model Garden.