Sobre este codelab
1. Introdução
Na atual era de aplicativos orientados por dados, o uso de serviços avançados de machine learning e de inteligência artificial, como a visão computacional, é cada vez mais importante. 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 para aproveitar o potencial do reconhecimento e da 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 ele for um dos idiomas compatíveis, gera a tradução para o inglês.
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 abaixo os pré-requisitos:
Criar seu projeto
- Uma conta do Google Cloud com um projeto criado e faturamento ativado.
- APIs Vision, Translation, Cloud Run e Artifact Registry ativadas
- Cloud Shell ativado
- API Cloud Storage ativada com um bucket criado e imagens com texto ou escrita à mão em idiomas locais compatíveis enviados (ou você pode usar os links de imagens de exemplo fornecidos neste blog)
Consulte a documentação para saber como ativar as APIs do Google Cloud.
Ativar o Cloud Shell
- Você usará o Cloud Shell, um ambiente de linha de comando em execução 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. Como inicializar um projeto do Spring Boot
Para começar, crie um novo projeto do Spring Boot usando o ambiente de desenvolvimento integrado de sua preferência ou o Spring Initializr. Incluir as dependências necessárias, como Spring Web, Spring Cloud GCP e Vision AI, na configuração do seu projeto. Se preferir, use o Spring Initializr no Cloud Shell seguindo as etapas abaixo para fazer o bootstrap do seu aplicativo Spring Boot com facilidade.
Execute o seguinte comando para criar seu 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 seu projeto, altere-o de acordo com suas necessidades.
bootVersion é a versão do Spring Boot. Atualize-a no momento da implementação, se necessário.
type é a versão do tipo de ferramenta de compilação do projeto. É possível alterá-la para Gradle, se preferir.
Isso cria uma estrutura de projeto em "visão de mola" conforme abaixo:
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 as classes de origem arquivos .java.
recursos contêm imagens, XML, arquivos de texto e o conteúdo estático usado pelo projeto que são mantidos de forma independente.
application.properties permite que você mantenha os recursos administrativos para definir propriedades específicas do perfil do aplicativo.
4. Como configurar a API Vision
Depois de ativar a API Vision, você terá a opção de configurar as credenciais da API no seu aplicativo. Também é possível usar o 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
Criar 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 rotulagem 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 de escrita à mão e traduçã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 respectivas pastas / caminhos 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. Criar controladores que processam as solicitações recebidas e utilizam 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 os serviços da API Vision e 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 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 modelo em Java de servidor que permite a integração perfeita de conteúdo dinâmico em suas páginas HTML. O Thymeleaf fornece 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 os 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 do Thymeleaf no projeto do Spring Boot. É possível incluir a dependência Thymeleaf Starter no seu 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 se encarrega de processar 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 String
e não o adicionamos ao modelo. No entanto, invocamos o método extractText
GET no index.html
no envio da página. Com o Thymeleaf, é possível criar uma experiência do usuário integrada, em que os usuários podem fazer upload de imagens, acionar análises da API Vision e visualizar os resultados em tempo real. Descubra todo o potencial do seu aplicativo da Vision AI aproveitando a tecnologia da Thymeleaf para o 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 seu app de visão computacional no Cloud Run
Programe 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 confiança na estabilidade, empacote o arquivo 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 nos concentrar na implantação do seu aplicativo Spring Boot conteinerizado usando o Cloud Run.
- Empacote seu aplicativo executando as seguintes etapas no Cloud Shell. Verifique se o terminal está na pasta raiz do projeto:
Crie:
./mvnw package
Quando o build for bem-sucedido, execute localmente para testar:
./mvnw spring-boot:run
- Coloque seu aplicativo do Spring Boot em contêineres com o Jib:
Em vez de criar um Dockerfile
e a imagem do contêiner manualmente, você pode usar 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 programar uma Dockerfile
. Antes de continuar, é preciso ativar a API Artifact Registry. Recomendamos usar o Artifact Registry em vez do Container Registry. Em seguida, execute o Jib para criar uma imagem do Docker e publicar no Registry:
$ ./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. No entanto, para uso avançado, é possível adicioná-lo em pom.xml com mais opções de configuração
- Implante o contêiner (enviado para o Artifact Registry na etapa anterior) no Cloud Run. Novamente, esta é uma etapa de um único comando:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
Como alternativa, também é possível fazer isso pela interface. Acesse 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 anteriormente ao registro, defina as configurações de implantação desejadas (como alocação de CPU e escalonamento automático) e escolha a região apropriada para implantação. É possível definir variáveis de ambiente específicas para o 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 o aplicativo da Vision AI funcione corretamente. Quando a implantação for concluída com êxito, você receberá um endpoint para o aplicativo.
Como usar o app Vision AI
Para fins de demonstração, você pode usar 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 da Vision AI usando Spring Boot e Java. Com a tecnologia da Vision AI, seu aplicativo agora pode realizar análises sofisticadas de imagens, incluindo rotulagem, detecção facial e muito mais. A integração do Spring Boot fornece uma base sólida para a criação de aplicativos nativos do Google Cloud escalonáveis e robustos. Continue explorando os amplos 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 os documentos da API Vision, do Cloud Translation e do GCP Spring. Teste o mesmo experimento com a opção Spring Native. Também como uma prévia do mundo da IA generativa, confira como essa API aparece no Model Garden.