Consulta cómo realizar el reconocimiento óptico de caracteres (OCR) en Google Cloud. En este tutorial se muestra cómo subir archivos de imagen a Cloud Storage, extraer texto de las imágenes con la API Cloud Vision, traducir el texto con la API Cloud Translation de Google y guardar las traducciones en Cloud Storage. Pub/Sub se usa para poner en cola varias tareas y activar las funciones de Cloud Run adecuadas para llevarlas a cabo.
Para obtener más información sobre cómo enviar una solicitud de detección de texto (OCR), consulta los artículos sobre cómo detectar texto en imágenes, detectar escritura a mano en imágenes o detectar texto en archivos (PDF o TIFF).
Objetivos
- Escribe y despliega varias funciones de Cloud Run en segundo plano.
- Sube imágenes a Cloud Storage.
- Extrae, traduce y guarda el texto contenido en las imágenes subidas.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
- Pub/Sub
- Cloud Storage
- Cloud Translation API
- Cloud Vision
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- 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.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente 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.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Prepara tu entorno de desarrollo.
- Se sube a Cloud Storage una imagen que contiene texto en cualquier idioma.
- Se activa una función de Cloud Run que usa la API Vision para extraer el texto y detectar el idioma de origen.
- El texto se pone en cola para traducirse publicando un mensaje en un tema de Pub/Sub. Se pone en cola una traducción para cada idioma de destino que sea diferente del idioma de origen.
- Si el idioma de destino coincide con el de origen, se omite la cola de traducción 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 usa la API Translation para traducir el texto de la cola de traducción. El resultado traducido se envía a la cola de resultados.
- Otra función de Cloud Run 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.
Crea un segmento de Cloud Storage para subir imágenes.
YOUR_IMAGE_BUCKET_NAME
es un nombre de segmento único a nivel global:gcloud storage buckets create gs://
YOUR_IMAGE_BUCKET_NAME
Crea un segmento de Cloud Storage para guardar las traducciones de texto, donde
YOUR_RESULT_BUCKET_NAME
es un nombre de segmento único a nivel mundial:gcloud storage buckets create gs://
YOUR_RESULT_BUCKET_NAME
Crea un tema de Pub/Sub para publicar solicitudes de traducción, donde
YOUR_TRANSLATE_TOPIC_NAME
es el nombre de tu tema de solicitudes de traducción:gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
Crea un tema de Pub/Sub para publicar los resultados de traducción terminados, donde
YOUR_RESULT_TOPIC_NAME
es el nombre del tema de resultados de traducción:gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAME
Clona el repositorio de aplicaciones de muestra en la máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo de Cloud Run 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/
Para desplegar 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 el archivo
pom.xml
en el caso de Java):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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Python compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Java compatible para ejecutar tu función.donde
YOUR_IMAGE_BUCKET_NAME
es el nombre del segmento de Cloud Storage al que subirás las imágenes.Para desplegar 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 ejemplo (o, en el caso de Java, el archivo
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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Python compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Java compatible para ejecutar tu función.Para desplegar la función que guarda los resultados en Cloud Storage con un activador de Cloud Pub/Sub, ejecuta el siguiente comando en el directorio que contiene el código de ejemplo (o, en el caso de Java, el archivo
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"Usa la marca
--runtime
para especificar el ID del entorno de ejecución de una versión compatible de Node.js para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Python compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Go compatible para ejecutar tu función.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"Usa la marca
--runtime
para especificar el ID de tiempo de ejecución de una versión de Java compatible para ejecutar tu función.Sube una imagen al segmento de Cloud Storage de imágenes:
gcloud storage cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
donde
PATH_TO_IMAGE
es la ruta a un archivo de imagen (que contiene texto) en tu sistema local.YOUR_IMAGE_BUCKET_NAME
es el nombre del segmento en el que vas a subir las imágenes.
Puedes descargar una de las imágenes del proyecto de ejemplo.
Consulta los registros para asegurarte de que las ejecuciones se han completado:
gcloud functions logs read --limit 100
Puedes ver las traducciones guardadas en el segmento de Cloud Storage que hayas usado 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.
Si ya tienes instalada la CLI de gcloud, actualízala ejecutando el siguiente comando:
gcloud components update
Visualizar el flujo de datos
El flujo de datos en la aplicación del tutorial de OCR consta de varios pasos:
Puede ser útil visualizar los pasos:
Preparar la aplicación
Información sobre el código
Importar dependencias
La aplicación debe importar varias dependencias para comunicarse con los servicios de Google Cloud Platform:
Node.js
Python
Go
Java
Procesar imágenes
La siguiente función lee un archivo de imagen subido de Cloud Storage y llama a una función para detectar si la imagen contiene texto:
Node.js
Python
Go
Java
La siguiente función extrae texto de la imagen mediante la API Vision y lo pone en cola para traducirlo:
Node.js
Python
Go
Java
Traducir texto
La siguiente función traduce el texto extraído y pone en cola el texto traducido para que se guarde de nuevo en Cloud Storage:
Node.js
Python
Go
Java
Guardar las traducciones
Por último, la siguiente función recibe el texto traducido y lo vuelve a guardar en Cloud Storage:
Node.js
Python
Go
Java
Desplegar las funciones
Subir una imagen
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
Eliminar la función
Si eliminas funciones de Cloud Run, no se eliminarán los recursos almacenados en Cloud Storage.
Para eliminar las funciones de Cloud Run que has creado en este tutorial, ejecuta los siguientes comandos:
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
También puedes eliminar funciones de Cloud Run desde la Google Cloud consola.