Saiba como realizar o reconhecimento óptico de caracteres (OCR) no Google Cloud Platform. Neste tutorial, demonstramos como fazer upload de arquivos de imagem para o Google Cloud Storage, extrair texto das imagens usando a Google Cloud Vision API, traduzir o texto usando a Google Cloud Translation API e salvar suas traduções de volta no Cloud Storage. O Google Cloud Pub/Sub é usado para enfileirar várias tarefas e acionar o Cloud 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ários Background Cloud Functions.
- 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 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
- 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.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the Cloud Functions, Cloud Build, Cloud 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.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the Cloud Functions, Cloud Build, Cloud 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
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.
- Um Cloud Function é acionado, 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.
- Um 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.
- Outro Cloud Function 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:gsutil mb 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:gsutil mb gs://
YOUR_RESULT_BUCKET_NAME
Crie um tópico do Cloud 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 Cloud 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.
Altere para o diretório que contém o código de amostra do Cloud Functions:
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 Cloud 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 nodejs20 \
--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
--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 \ --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
--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 \ --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
--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 \ --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
--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.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 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-translate \ --runtime nodejs20 \
--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
--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 \ --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
--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 \ --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
--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 \ --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
--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 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 nodejs20 \
--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
--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 \ --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
--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 \ --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
--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 \ --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
--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.
Como fazer upload de uma imagem
Faça upload de uma imagem para o bucket do Cloud Storage:
gsutil 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
.
Limpeza
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:
- 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.
Como excluir o Cloud Functions
A exclusão de Cloud Functions não remove nenhum recurso armazenado no Cloud Storage.
Para excluir o Cloud 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 o Cloud Functions do Console do Google Cloud.