Saiba como fazer o reconhecimento ótico de carateres (OCR) no Google Cloud. Este tutorial demonstra como carregar ficheiros de imagem para o Cloud Storage, extrair texto das imagens através da API Cloud Vision, traduzir o texto através da API Google Cloud Translation e guardar as traduções novamente no Cloud Storage. O Pub/Sub é usado para colocar várias tarefas em fila e acionar as funções do Cloud Run certas para as executar.
Para mais informações sobre como enviar um pedido de deteção de texto (OCR), consulte os artigos Detete texto em imagens, Detete escrita manual em imagens ou Detete texto em ficheiros (PDF/TIFF).
Objetivos
- Escrever e implementar várias funções do Cloud Run em segundo plano.
- Carregar imagens para o Cloud Storage.
- Extrair, traduzir e guardar texto contido em imagens carregadas.
Custos
Neste documento, usa 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 custos com base na sua utilização projetada,
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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Prepare o seu ambiente de desenvolvimento.
- Uma imagem que contém texto em qualquer idioma é carregada para o Cloud Storage.
- É acionada uma função do Cloud Run, que usa a API Vision para extrair o texto e detetar o idioma de origem.
- O texto é colocado em fila para tradução através da publicação de uma mensagem num tópico do Pub/Sub. É colocada em fila uma tradução 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 é ignorada e o texto é enviado para a fila de resultados, que é um tópico do Pub/Sub diferente.
- Uma função do Cloud Run usa a API Translation para traduzir o texto na fila de tradução. O resultado traduzido é enviado para a fila de resultados.
- Outra função do Cloud Run guarda o texto traduzido da fila de resultados no Cloud Storage.
- Os resultados encontram-se no Cloud Storage como ficheiros de texto para cada tradução.
Crie um contentor do Cloud Storage para carregar imagens, em que
YOUR_IMAGE_BUCKET_NAME
é um nome de contentor exclusivo a nível global:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAME
Crie um contentor do Cloud Storage para guardar as traduções de texto, em que
YOUR_RESULT_BUCKET_NAME
é um nome de contentor exclusivo a nível global:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAME
Crie um tópico do Pub/Sub para publicar pedidos de tradução, em que
YOUR_TRANSLATE_TOPIC_NAME
é o nome do seu tópico de pedidos de tradução:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
Crie um tópico Pub/Sub para publicar os resultados da tradução concluídos, onde
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 da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo 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/
Para implementar a função de processamento de imagens com um acionador do Cloud Storage, execute o seguinte comando no diretório que contém o código de exemplo (ou, no caso do Java, o ficheiro
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 de tempo de execução de uma versão suportada do Node.js para executar a sua 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 de tempo de execução de uma versão do Python suportada para executar a sua 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 de tempo de execução de uma versão do Go suportada para executar a sua 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 de tempo de execução de uma versão Java suportada para executar a sua função.onde
YOUR_IMAGE_BUCKET_NAME
é o nome do seu contentor do Cloud Storage para o qual vai carregar imagens.Para implementar a função de tradução de texto com um acionador do Pub/Sub, execute o seguinte comando no diretório que contém o código de exemplo (ou, no caso do Java, o ficheiro
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 de tempo de execução de uma versão suportada do Node.js para executar a sua 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 de tempo de execução de uma versão do Python suportada para executar a sua 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 de tempo de execução de uma versão do Go suportada para executar a sua 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 de tempo de execução de uma versão Java suportada para executar a sua função.Para implementar a função que guarda os resultados no Cloud Storage com um acionador do Cloud Pub/Sub, execute o seguinte comando no diretório que contém o código de exemplo (ou, no caso do Java, o ficheiro
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 de tempo de execução de uma versão suportada do Node.js para executar a sua 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 de tempo de execução de uma versão do Python suportada para executar a sua 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 de tempo de execução de uma versão do Go suportada para executar a sua 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 de tempo de execução de uma versão Java suportada para executar a sua função.Carregue uma imagem para o seu contentor do Cloud Storage de imagens:
gcloud storage cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
onde
PATH_TO_IMAGE
é um caminho para um ficheiro de imagem (que contém texto) no seu sistema local.YOUR_IMAGE_BUCKET_NAME
é o nome do contentor onde está a carregar imagens.
Pode transferir uma das imagens do projeto de exemplo.
Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 100
Pode ver as traduções guardadas no contentor do Cloud Storage que usou para
YOUR_RESULT_BUCKET_NAME
.- 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.
Se já tiver a CLI gcloud instalada, atualize-a executando o seguinte comando:
gcloud components update
Visualizar o fluxo de dados
O fluxo de dados na aplicação do tutorial de OCR envolve vários passos:
Pode ser útil visualizar os passos:
A preparar a aplicação
Compreender o código
Importar dependências
A aplicação tem de importar várias dependências para comunicar com os serviços da Google Cloud Platform:
Node.js
Python
Go
Java
A processar imagens
A função seguinte lê um ficheiro de imagem carregado do Cloud Storage e chama uma função para detetar se a imagem contém texto:
Node.js
Python
Go
Java
A seguinte função extrai texto da imagem através da API Vision e coloca o texto em fila para tradução:
Node.js
Python
Go
Java
A traduzir texto
A função seguinte traduz o texto extraído e coloca o texto traduzido em fila para ser guardado novamente no Cloud Storage:
Node.js
Python
Go
Java
Guardar as traduções
Por último, a seguinte função recebe o texto traduzido e guarda-o novamente no Cloud Storage:
Node.js
Python
Go
Java
Implementar as funções
Carregar uma imagem
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Eliminar o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
A eliminar a função
A eliminação de funções do Cloud Run não remove recursos armazenados no Cloud Storage.
Para eliminar as funções do Cloud Run que criou neste tutorial, execute os seguintes comandos:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
Também pode eliminar funções do Cloud Run a partir da Google Cloud consola.