Aprende a realizar el reconocimiento óptico de caracteres (OCR) en Google Cloud Platform. En este instructivo, se muestra cómo subir archivos de imagen a Cloud Storage, extraer el texto de las imágenes con Cloud Vision y traducir el texto con la API de Cloud Translation, y vuelve a guardar las traducciones en Cloud Storage. Pub/Sub se usa para poner en cola varias tareas y activar las funciones correctas de Cloud Run Functions para realizarlas.
Para obtener más información sobre cómo enviar una solicitud de detección de texto (OCR), consulta Detecta texto en imágenes, Detecta escritura a mano en imágenes o Detecta texto en archivos (PDF/TIFF).
Objetivos
- Escribir e implementar varias funciones controladas por eventos
- Subir imágenes a Cloud Storage
- Extraer, traducir y guardar texto contenido en imágenes que subas
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Run
- Cloud Logging
- Cloud Storage
- Cloud Translation API
- Cloud Vision
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- 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
- Prepara tu entorno de desarrollo.
Si ya tienes instalado gcloud CLI, ejecuta el siguiente comando para actualizarla:
gcloud components update
Visualiza el flujo de datos
El flujo de datos en la aplicación del instructivo de OCR incluye los siguientes pasos:
- Una imagen que contiene texto en cualquier idioma se sube a Cloud Storage.
- Se activa una función de Cloud Run Functions que usa la API de Vision para extraer el texto y detectar el idioma de origen.
- El texto se pone en cola para la traducción mediante la publicación de un mensaje en un tema de Pub/Sub. Se pone en cola una traducción para cada idioma objetivo diferente del idioma de origen.
- Si un idioma objetivo coincide con el idioma de origen, la cola de traducciones se omite, y el texto se envía a la cola de resultados, que es un tema de Pub/Sub diferente.
- Una función de Cloud Run Functions usa la API de Cloud Translation para traducir el texto de la cola de traducciones. El resultado se envía a la cola de resultados.
- Otra función de Cloud Run Functions guarda el texto traducido de la cola de resultados en Cloud Storage.
- Los resultados se encuentran en Cloud Storage como archivos de texto de cada traducción.
El siguiente gráfico puede ayudarte a visualizar los pasos:
Prepara la aplicación
Crea un bucket de Cloud Storage para subir imágenes, en el que
YOUR_IMAGE_BUCKET_NAME
es un nombre de bucket único a nivel global:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAME
Crea un bucket de Cloud Storage para guardar las traducciones de texto, en el que
YOUR_RESULT_BUCKET_NAME
es un nombre de bucket único a nivel global:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAME
Crea un tema de Cloud Pub/Sub para publicar las solicitudes de traducción, en el que
YOUR_TRANSLATE_TOPIC_NAME
es el nombre del tema de tu solicitud de traducción:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
Crea un tema de Cloud Pub/Sub para publicar los resultados de traducción finalizados, en el que
YOUR_RESULT_TOPIC_NAME
es el nombre del tema de los resultados de las traducciones:gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAME
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Ve al directorio que contiene el código de muestra de funciones de 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/
Examine el código
En esta sección, se describen las dependencias y las funciones que conforman la muestra de OCR.
Importa las dependencias
La aplicación debe importar varias dependencias con el fin de comunicarse con los servicios de Google Cloud Platform:
Node.js
Python
Go
Java
Procesa las imágenes
La siguiente función lee un archivo de imagen que se subió desde Cloud Storage y llama a la función para detectar si la imagen contiene texto, como se muestra a continuación:
Node.js
Python
Go
Java
La siguiente función extrae texto de la imagen con la API de Vision y lo pone en cola para su traducción.
Node.js
Python
Go
Java
Traducir texto
La siguiente función traduce el texto extraído y, luego, lo pone en cola para volver a guardarlo en Cloud Storage:
Node.js
Python
Go
Java
Guarda las traducciones
Finalmente, la siguiente función recibe el texto traducido y lo vuelve a guardar en Cloud Storage:
Node.js
Python
Go
Java
Implementa las funciones
Para implementar la función de procesamiento de imágenes con un activador de Cloud Storage, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o, en el caso de Java, el archivo
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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Python compatible con el fin de ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión de Java compatible con el fin de ejecutar tu función.Reemplaza lo siguiente:
- REGION: el nombre de la región de Google Cloud en la que deseas implementar tu función
(por ejemplo,
us-west1
). - YOUR_IMAGE_BUCKET_NAME: el nombre del
bucket de Cloud Storage al que subirás las imágenes. Cuando implementes
Cloud Run Functions, especifica el nombre del bucket solo sin el
gs://
inicial; por ejemplo:--trigger-event-filters="bucket=my-bucket"
.
- REGION: el nombre de la región de Google Cloud en la que deseas implementar tu función
(por ejemplo,
Para implementar la función de traducción de texto con un activador de Pub/Sub, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o en el caso de Java, el archivo
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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Python compatible con el fin de ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión de Java compatible con el fin de ejecutar tu función.Para implementar la función que guarda los resultados en Cloud Storage con un activador de Pub/Sub, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o, en el caso de Java, el archivo
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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Python compatible con el fin de ejecutar la función.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"Usa la marca
--runtime
para especificar el ID de entorno de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión de Java compatible con el fin de ejecutar tu función.
Suba una imagen
Sube una imagen a tu bucket de imágenes de Cloud Storage:
gcloud storage cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
en el que
PATH_TO_IMAGE
es una ruta a un archivo de imagen (que contiene texto) en el sistema local.YOUR_IMAGE_BUCKET_NAME
es el nombre del bucket al que subes las imágenes.
Puedes descargar una de las imágenes desde el proyecto de muestra.
Revisa los registros para asegurarte de que las ejecuciones se completaron:
gcloud functions logs read --limit 100
Puedes ver las traducciones guardadas en el bucket de Cloud Storage que usaste para
YOUR_RESULT_BUCKET_NAME
.
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- 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.
Borra la función
Borrar las funciones de Cloud Run no quita ningún recurso almacenado en Cloud Storage.
Para borrar las funciones de Cloud Run Functions que creaste en este instructivo, ejecuta los siguientes comandos:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
También puedes borrar Cloud Run Functions en la consola de Google Cloud.