Saiba como realizar o reconhecimento óptico de caracteres (OCR) no Google Cloud Platform. Neste tutorial, você verá como fazer upload de arquivos de imagem para o Cloud Storage, extrair texto das imagens usando o Cloud Vision e traduzir o texto usando a função API Cloud Translation e salve 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 funções orientadas a eventos.
- Fazer upload de imagens para o Cloud Storage.
- Extrair, traduzir e salvar o texto contido nas imagens enviadas.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Run
- Cloud Logging
- 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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Prepare seu ambiente de desenvolvimento.
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
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 Run usa a API Cloud 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:
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_NAME
Crie 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_NAME
Crie 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_NAME
Crie 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_NAME
Clone 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/v2/ocr/app/
Python
cd python-docs-samples/functions/v2/ocr/
Go
cd golang-samples/functions/functionsv2/ocr/app/
Java
cd java-docs-samples/functions/v2/ocr/ocr-process-image/
Entenda o código
Esta seção descreve as dependências e funções que compõem o exemplo de OCR.
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
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
Traduzir texto
A função a seguir traduz o texto extraído e o enfileira para ser salvo no Cloud Storage:
Node.js
Python
Go
Java
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
Implantar as 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 \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=processImage \
--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
--runtime
para 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 \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=process_image \
--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
--runtime
para 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 \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=process-image \
--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
--runtime
para 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 \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrProcessImage \ --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
--runtime
para especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.Substitua:
- REGION: o nome da região do Google Cloud em que você quer implantar a função
(por exemplo,
us-west1
). - YOUR_IMAGE_BUCKET_NAME: o nome do
bucket do Cloud Storage em que você fará upload das imagens. Durante a implantação
as funções do Cloud Run, especifiquem apenas o nome do bucket, sem o
gs://
inicial, por exemplo,--trigger-event-filters="bucket=my-bucket"
.
- REGION: o nome da região do Google Cloud em que você quer implantar a função
(por exemplo,
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 \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=translateText \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=translate_text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=translate-text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrTranslateText \ --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
--runtime
para 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 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-save \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=saveResult \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=save_result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=save-result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Use a flag
--runtime
para 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 \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrSaveResult \ --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
--runtime
para especificar o ID do ambiente de execução de uma versão compatível do Java a fim de executar a função.
Faça o upload de uma imagem
Faça upload de uma imagem para o bucket do Cloud Storage:
gcloud storage cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
onde
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.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
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 Console do Google Cloud.