Aprende a realizar el reconocimiento óptico de caracteres (OCR) en Google Cloud Platform. En este instructivo, se muestra como subir archivos de imagen a Google Cloud Storage, extraer el texto de las imágenes con la API de Google Cloud Vision, traducir el texto con la API de Google Cloud Translation y volver a guardar tus traducciones en Cloud Storage. Google Cloud Pub/Sub se usa para poner en cola varias tareas y activar las funciones correctas de Cloud Functions a fin de realizarlas.
Objetivos
- Escribir e implementar varias funciones de Cloud Functions en segundo plano
- Subir imágenes a Cloud Storage
- Extraer, traducir y guardar texto contenido en imágenes que subas
Costos
Este instructivo usa componentes facturables de Cloud Platform, incluidos los siguientes:
- Google Cloud Functions
- Google Cloud Pub/Sub
- Google Cloud Storage
- API de Google Cloud Translation
- API de Google Cloud Vision
Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.
Los usuarios nuevos de Cloud Platform podrían cumplir con los requisitos para obtener una prueba gratuita.Antes de comenzar
- Accede a tu Cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
- Habilita las API de Cloud Functions, Cloud Build, Cloud Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision.
- Instala e inicializa el SDK de Cloud.
- Prepara tu entorno de desarrollo.
Si ya tienes instalado el SDK de Cloud, ejecuta el siguiente comando para actualizarlo:
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 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 otro tema de Pub/Sub.
- Una función de Cloud Functions usa la API de 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 Functions guarda el texto traducido de la cola de resultados en Cloud Storage.
- Los resultados se encuentran en Cloud Storage como archivos
txt
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:gsutil mb 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:gsutil mb 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 Cloud Functions, como sigue:
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/
Comprende el código
Importa 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 Cloud Vision y lo pone en cola para su traducción.
Node.js
Python
Go
Java
Traduce el 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
En esta sección, se describe cómo implementar 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 \ --runtime nodejs10 \
Puedes usar los siguientes valores para que con la marca
--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"--runtime
se especifique tu versión preferida de Node.js:nodejs10
nodejs12
Python
gcloud functions deploy ocr-extract \ --runtime python37 \
Puedes usar los siguientes valores para que con la marca
--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"--runtime
se especifique tu versión preferida de Python:python37
python38
Go
gcloud functions deploy ocr-extract \ --runtime go111 \
Puedes usar los siguientes valores para que con la marca
--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"--runtime
se especifique tu versión preferida de Go:go111
go113
Java
gcloud functions deploy ocr-extract \ --entry-point functions.OcrProcessImage \ --runtime java11 \ --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"donde
YOUR_IMAGE_BUCKET_NAME
es el nombre del bucket de Cloud Storage al que subirás las imágenes.Para implementar la función de traducción de texto con un activador de Cloud 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 \ --runtime nodejs10 \
Puedes usar los siguientes valores para que con la marca
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point translateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"--runtime
se especifique tu versión preferida de Node.js:nodejs10
nodejs12
Python
gcloud functions deploy ocr-translate \ --runtime python37 \
Puedes usar los siguientes valores para que con la marca
--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"--runtime
se especifique tu versión preferida de Python:python37
python38
Go
gcloud functions deploy ocr-translate \ --runtime go111 \
Puedes usar los siguientes valores para que con la marca
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--entry-point TranslateText \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"--runtime
se especifique tu versión preferida de Go:go111
go113
Java
gcloud functions deploy ocr-translate \ --entry-point functions.OcrTranslateText \ --runtime java11 \ --memory 512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Para implementar 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 muestra (o, en el caso de Java, el archivo
pom.xml
):Node.js
gcloud functions deploy ocr-save \ --runtime nodejs10 \
Puedes usar los siguientes valores para que con la marca
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point saveResult \
--set-env-vars "RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"--runtime
se especifique tu versión preferida de Node.js:nodejs10
nodejs12
Python
gcloud functions deploy ocr-save \ --runtime python37 \
Puedes usar los siguientes valores para que con la marca
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point save_result \
--set-env-vars "RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"--runtime
se especifique tu versión preferida de Python:python37
python38
Go
gcloud functions deploy ocr-save \ --runtime go111 \
Puedes usar los siguientes valores para que con la marca
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--entry-point SaveResult \
--set-env-vars "RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"--runtime
se especifique tu versión preferida de Go:go111
go113
Java
gcloud functions deploy ocr-save \ --entry-point functions.OcrSaveResult \ --runtime java11 \ --memory 512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"
Sube una imagen
Sube una imagen a tu bucket de imágenes de Cloud Storage:
gsutil cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
En el ejemplo anterior, se ilustra lo siguiente:
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 especifica el valor
RESULT_BUCKET
en tu archivo de configuración.
Realiza una limpieza
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:
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:
- En Cloud Console, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra la función de Cloud Functions
Si se borran las funciones de Cloud Functions, no se quita ningún recurso almacenado en Cloud Storage.
Para borrar las funciones de Cloud 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 funciones de Cloud Functions en Google Cloud Console.