Saiba como realizar o reconhecimento óptico de caracteres (OCR) em Google Cloud. Neste tutorial, você vai aprender a fazer upload de arquivos de imagem para o Cloud Storage, extrair texto das imagens usando a API Cloud Vision e traduzir o texto usando a API Google Cloud Translation e salvar as traduções de volta no Cloud Storage. O Pub/Sub é usado para enfileirar várias tarefas e acionar o Cloud Run functions correto para executá-lo.
Para mais informações sobre como enviar uma solicitação de detecção de texto (OCR), consulte Detectar texto em imagens e Detectar escrita à mão em imagens ou Detectar texto em arquivos (PDF/TIFF) (em inglês).
Objetivos
- Escrever e implantar várias Cloud Run functions em segundo plano.
- Fazer upload de imagens para o Cloud Storage.
- Extrair, traduzir e salvar o texto contido nas imagens enviadas.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Pub/Sub
- Cloud Storage
- Cloud Translation API
- Cloud Vision
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init - Prepare seu ambiente de desenvolvimento.
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
Como visualizar o fluxo de dados
O fluxo de dados no aplicativo do tutorial do OCR envolve vários passos:
- É feito o upload no Cloud Storage de uma imagem com texto em qualquer idioma.
- Uma função do Cloud Run é acionada, que usa a API Vision para extrair o texto e detectar o idioma de origem.
- O texto é colocado na fila para tradução publicando uma mensagem em um tópico do Pub/Sub. Uma tradução é enfileirada para cada idioma de destino diferente do idioma de origem.
- Se um idioma de destino corresponder ao idioma de origem, a fila de tradução será ignorada e o texto será enviado para a fila de resultados, que é um tópico do Pub/Sub diferente.
- Uma função do Cloud Function usa a API Translation para traduzir o texto na fila de tradução. A tradução gerada é enviada para a fila de resultados.
- Outra função do Cloud Run salva o texto traduzido da fila de resultados no Cloud Storage.
- Os resultados são encontrados no Cloud Storage como arquivos para cada tradução.
Isto pode ajudar a visualizar os passos:
Como preparar o aplicativo
Crie um bucket do Cloud Storage para fazer upload de imagens, em que
YOUR_IMAGE_BUCKET_NAMEé um nome de bucket globalmente exclusivo:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAMECrie um bucket do Cloud Storage para salvar traduções de texto, em que
YOUR_RESULT_BUCKET_NAMEé um nome de bucket globalmente exclusivo:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAMECrie um tópico do Pub/Sub onde as solicitações de tradução serão publicadas, em que
YOUR_TRANSLATE_TOPIC_NAMEé o nome do tópico da solicitação de tradução:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAMECrie um tópico do Pub/Sub onde os resultados da tradução concluída serão publicados, em que
YOUR_RESULT_TOPIC_NAMEé o nome do tópico de resultados da tradução:gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAMEClone o repositório do app de amostra na máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o código de amostra das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/ocr/app/
Python
cd python-docs-samples/functions/ocr/app/
Go
cd golang-samples/functions/ocr/app/
Java
cd java-docs-samples/functions/ocr/ocr-process-image/
Como entender o código
Como importar dependências
O aplicativo importa várias dependências para se comunicar com os serviços do Google Cloud Platform:
Node.js
Python
Go
Java
Como processar imagens
A função a seguir lê um arquivo de imagem enviado do Cloud Storage e chama uma função para detectar se a imagem contém texto:
Node.js
Python
Go
Java
A função a seguir extrai o texto da imagem usando a API Vision e enfileira o texto para tradução:
Node.js
Python
Go
Java
Como traduzir textos
A função a seguir traduz o texto extraído e o enfileira para ser salvo no Cloud Storage:
Node.js
Python
Go
Java
Como salvar as traduções
Por fim, a função a seguir recebe o texto traduzido e o salva no Cloud Storage:
Node.js
Python
Go
Java
Como implantar funções
Para implantar a função de processamento de imagens com um gatilho do Cloud Storage, execute o seguinte comando no diretório que contém o código de amostra (ou, no caso de Java, o arquivo
pom.xml):Node.js
gcloud functions deploy ocr-extract \ --runtime nodejs22 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point processImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.Python
gcloud functions deploy ocr-extract \ --runtime python312 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point process_image \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.Go
gcloud functions deploy ocr-extract \ --runtime go121 \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--entry-point ProcessImage \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.Java
gcloud functions deploy ocr-extract \ --entry-point functions.OcrProcessImage \ --runtime java17 \ --memory 512MB \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.onde
YOUR_IMAGE_BUCKET_NAMEé o nome do seu bucket do Cloud Storage no qual você fará upload de imagens.Para implantar a função de tradução de texto com um gatilho do Pub/Sub, execute o seguinte comando no diretório que contém o exemplo de código (ou, no caso de Java, o arquivo
pom.xml):Node.js
gcloud functions deploy ocr-translate \ --runtime nodejs22 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.Python
gcloud functions deploy ocr-translate \ --runtime python312 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translate_text \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.Go
gcloud functions deploy ocr-translate \ --runtime go121 \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point TranslateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.Java
gcloud functions deploy ocr-translate \ --entry-point functions.OcrTranslateText \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.Para implantar a função que salva os resultados no Cloud Storage com um gatilho do Cloud Pub/Sub, execute o seguinte comando no diretório que contém o código de amostra (ou, no caso de Java, o arquivo
pom.xml):Node.js
gcloud functions deploy ocr-save \ --runtime nodejs22 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point saveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Node.js compatível a fim de executar a função.Python
gcloud functions deploy ocr-save \ --runtime python312 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point save_result \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Python a fim de executar a função.Go
gcloud functions deploy ocr-save \ --runtime go121 \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point SaveResult \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão do Go compatível a fim de executar a função.Java
gcloud functions deploy ocr-save \ --entry-point functions.OcrSaveResult \ --runtime java17 \ --memory 512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtimepara especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.
Como fazer upload de uma imagem
Faça upload de uma imagem para o bucket do Cloud Storage:
gcloud storage cp
PATH_TO_IMAGEgs://YOUR_IMAGE_BUCKET_NAMEonde
PATH_TO_IMAGEé um caminho para um arquivo de imagem que contém texto em seu sistema local.YOUR_IMAGE_BUCKET_NAMEé o nome do bucket onde está sendo feito upload das imagens.
Você pode fazer o download de uma das imagens do projeto de amostra.
Verifique os registros para confirmar se as execuções foram concluídas:
gcloud functions logs read --limit 100
Você pode ver as traduções salvas no bucket do Cloud Storage usado para
YOUR_RESULT_BUCKET_NAME.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- No console 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.
Como excluir a função
A exclusão de funções do Cloud Run não remove nenhum recurso armazenado no Cloud Storage.
Para excluir o Cloud Run functions criado neste tutorial, execute os seguintes comandos:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
Também é possível excluir funções do Cloud Run pelo consoleGoogle Cloud .