Instrucciones y requisitos de configuración del lab
Protege tu cuenta y tu progreso. Usa siempre una ventana de navegador privada y las credenciales del lab para ejecutarlo.

Reconocimiento óptico de caracteres (OCR) con Document AI (Python)

Lab 1 hora universal_currency_alt 5 créditos show_chart Intermedio
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Este contenido aún no está optimizado para dispositivos móviles.
Para obtener la mejor experiencia, visítanos en una computadora de escritorio con un vínculo que te enviaremos por correo electrónico.

GSP1138

Logotipo de los labs de autoaprendizaje de Google Cloud

Descripción general

Document AI es una solución de comprensión de documentos que toma datos no estructurados, como documentos, correos electrónicos, facturas y formularios, entre otros, y facilita la comprensión, el análisis y el consumo de los datos. La API proporciona una estructura mediante la clasificación de contenido, la extracción de entidades, la búsqueda avanzada y mucho más.

En este lab, realizarás reconocimiento óptico de caracteres (OCR) en documentos PDF con Document AI y Python. Descubrirás cómo realizar solicitudes de procesamiento en línea (síncrono) y por lotes (asíncrono).

Utilizaremos un archivo PDF de la novela clásica “Winnie the Pooh” de A. A. Milne que, hace poco, se hizo parte del dominio público en Estados Unidos. Este archivo se escaneó y digitalizó con Google Libros.

Objetivos

En este lab, aprenderás a realizar las siguientes tareas:

  • Habilitar la API de Document AI
  • Autenticar solicitudes a la API
  • Instalar la biblioteca cliente de Python
  • Usar las APIs de procesamiento en línea y por lotes
  • Analizar texto de un archivo PDF

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar. Se recomienda el navegador Chrome.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.

Cómo iniciar tu lab y acceder a la consola de Google Cloud

  1. Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:

    • El botón para abrir la consola de Google Cloud
    • El tiempo restante
    • Las credenciales temporales que debes usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).

    El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.

    Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
  3. De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.

    {{{user_0.username | "Username"}}}

    También puedes encontrar el nombre de usuario en el panel Detalles del lab.

  4. Haz clic en Siguiente.

  5. Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.

    {{{user_0.password | "Password"}}}

    También puedes encontrar la contraseña en el panel Detalles del lab.

  6. Haz clic en Siguiente.

    Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
  7. Haz clic para avanzar por las páginas siguientes:

    • Acepta los Términos y Condiciones.
    • No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
    • No te registres para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.

Nota: Para acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar. Ícono del menú de navegación y campo de búsqueda

Activa Cloud Shell

Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.

  1. Haz clic en Activar Cloud Shell Ícono de Activar Cloud Shell en la parte superior de la consola de Google Cloud.

  2. Haz clic para avanzar por las siguientes ventanas:

    • Continúa en la ventana de información de Cloud Shell.
    • Autoriza a Cloud Shell para que use tus credenciales para realizar llamadas a la API de Google Cloud.

Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu Project_ID, . El resultado contiene una línea que declara el Project_ID para esta sesión:

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.

  1. Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
  1. Haz clic en Autorizar.

Resultado:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project

Resultado:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Nota: Para obtener toda la documentación de gcloud, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.

Tarea 1: Habilita la API de Document AI

Antes de comenzar a usar Document AI, debes habilitar la API.

  1. Usa la barra de búsqueda en la parte superior de la consola para buscar "Document AI API" y, luego, haz clic en Habilitar para usar la API en tu proyecto de Google Cloud.

Búsqueda de la API

  1. Ingresa "Cloud Storage API" en la barra de búsqueda. Si aún no está habilitada, haz clic en Habilitar.

  2. Como alternativa, las APIs se pueden habilitar con los siguientes comandos de gcloud.

gcloud services enable documentai.googleapis.com gcloud services enable storage.googleapis.com

Deberías ver algo como esto:

Operation "operations/..." finished successfully.

Now, you can use Document AI!

Haz clic en Revisar mi progreso para verificar el objetivo. Habilitar la API de Document AI

Tarea 2: Crea y prueba un procesador

Primero, debes crear una instancia del procesador de OCR en documentos que realizará la extracción. Esto se puede completar con la consola de Cloud o la API de Processor Management.

  1. En el menú de navegación, haz clic en Ver todos los productos. En Inteligencia Artificial, selecciona Document AI.

Consola de la descripción general de Document AI

  1. Haz clic en Explorar procesadores y, luego, en OCR de documentos.

Procesadores

  1. Asígnale el nombre lab-ocr y selecciona la región más cercana de la lista.

  2. Haz clic en Crear para crear tu procesador.

  3. Copia el ID del procesador. Debes usarlo en el código más adelante.

ID del procesador

  1. Descarga el siguiente archivo PDF, que contiene las primeras 3 páginas de la novela "Winnie the Pooh" de A. A. Milne.

Para probar tu procesador en la consola, puedes subir un documento.

  1. Haz clic en Subir documento de prueba y selecciona el archivo PDF que descargaste.

El resultado debería ser similar a este:

Libro analizado

Haz clic en Revisar mi progreso para verificar el objetivo. Crear y probar un procesador

Tarea 3: Autentica solicitudes a la API

Para realizar solicitudes a la API de Document AI, debes usar una cuenta de servicio. Una cuenta de servicio pertenece a tu proyecto y la biblioteca cliente de Python la usa para realizar solicitudes a la API. Al igual que cualquier otra cuenta de usuario, una cuenta de servicio está representada por una dirección de correo electrónico. En esta sección, usarás el SDK de Cloud para crear una cuenta de servicio y, luego, crear las credenciales que necesitas para autenticarte como la cuenta de servicio.

  1. Primero, abre una ventana nueva de Cloud Shell y establece una variable de entorno con el ID de tu proyecto con el siguiente comando:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
  1. A continuación, crea una cuenta de servicio nueva para acceder a la API de Document AI con el siguiente comando:
gcloud iam service-accounts create my-docai-sa \ --display-name "my-docai-service-account"
  1. Otórgale a tu cuenta de servicio permisos para acceder a Document AI, Cloud Storage y Service Usage con los siguientes comandos:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/documentai.admin" gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/storage.admin" gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"
  1. Crea credenciales para que tu código de Python las use para acceder como tu cuenta de servicio nueva. Créalas y guárdalas como un archivo JSON ~/key.json con el siguiente comando:
gcloud iam service-accounts keys create ~/key.json \ --iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
  1. Por último, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que la biblioteca usa para encontrar tus credenciales. La variable de entorno se debe establecer con la ruta de acceso completa del archivo JSON de credenciales que creaste, con el siguiente comando:
export GOOGLE_APPLICATION_CREDENTIALS=$(realpath key.json)

Para leer más sobre esta forma de autenticación, consulta la guía.

Haz clic en Revisar mi progreso para verificar el objetivo. Autenticar solicitudes a la API

Tarea 4: Instala la biblioteca cliente

  1. En Cloud Shell, ejecuta los siguientes comandos para instalar las bibliotecas cliente de Python para Document AI y Cloud Storage.
pip3 install --upgrade google-cloud-documentai pip3 install --upgrade google-cloud-storage

Deberías ver algo como esto:

... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-1.4.1 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-1.43.0

Ya está todo listo para usar la API de Document AI.

Nota: Si configuras tu propio entorno de desarrollo de Python, puedes seguir estos lineamientos.

Sube el documento PDF de muestra a Cloud Shell

  1. En la barra de herramientas de Cloud Shell, haz clic en los tres puntos y selecciona Subir.

  2. Selecciona Archivo > Elegir archivos y selecciona el archivo PDF de 3 páginas que descargaste antes.

  3. Haz clic en Subir.

  4. Como alternativa, también puedes descargar el PDF desde un bucket público de Google Cloud Storage con gcloud storage cp.

gcloud storage cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .

Tarea 5: Realiza una solicitud de procesamiento en línea

En este paso, procesarás las primeras 3 páginas de la novela con la API de procesamiento en línea (síncrono). Este método funciona mejor en documentos más pequeños que están almacenados de forma local. Consulta la lista completa de procesadores para conocer la cantidad máxima de páginas y el tamaño máximo de los archivos que admite cada tipo de procesador.

  1. En Cloud Shell, crea un archivo llamado online_processing.py y pega el siguiente código en él:
from google.api_core.client_options import ClientOptions from google.cloud import documentai_v1 as documentai PROJECT_ID = "YOUR_PROJECT_ID" LOCATION = "YOUR_PROJECT_LOCATION" # El formato debe ser 'us' o 'eu' PROCESSOR_ID = "YOUR_PROCESSOR_ID" # Crea el procesador en la consola de Cloud # El archivo local en tu directorio de trabajo actual FILE_PATH = "Winnie_the_Pooh_3_Pages.pdf" # Consulta https://cloud.google.com/document-ai/docs/file-types # para ver los tipos de archivos admitidos MIME_TYPE = "application/pdf" # Crea una instancia de cliente docai_client = documentai.DocumentProcessorServiceClient( client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com") ) # El nombre de recurso completo del procesador, p. ej.: # projects/project-id/locations/location/processor/processor-id # Debes crear nuevos procesadores en la consola de Cloud RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID) # Lee el archivo en la memoria with open(FILE_PATH, "rb") as image: image_content = image.read() # Carga los datos binarios en el objeto RawDocument de Document AI raw_document = documentai.RawDocument(content=image_content, mime_type=MIME_TYPE) # Configura la solicitud de procesamiento request = documentai.ProcessRequest(name=RESOURCE_NAME, raw_document=raw_document) # Usa el cliente de Document AI para procesar el formulario de muestra result = docai_client.process_document(request=request) document_object = result.document print("Document processing complete.") print(f"Text: {document_object.text}")
  1. Reemplaza YOUR_PROJECT_ID, YOUR_PROJECT_LOCATION, YOUR_PROCESSOR_ID y FILE_PATH por los valores adecuados para tu entorno.
Nota: FILE_PATH es el nombre del archivo que subiste a Cloud Shell en el paso anterior. Si no cambiaste el nombre del archivo, debería ser Winnie_the_Pooh_3_Pages.pdf, que es el valor predeterminado, y no es necesario cambiarlo.
  1. Ejecuta el código, que extraerá el texto y lo imprimirá en la consola.
python3 online_processing.py

Deberías ver el siguiente resultado:

Document processing complete. Text: IN WHICH We Are Introduced to CHAPTER I Winnie-the-Pooh and Some Bees, and the Stories Begin HERE is Edward Bear, coming downstairs now, bump, bump, bump, on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs, but sometimes he feels that there really is another way, if only he could stop bumping for a moment and think of it. And then he feels that perhaps there isn't. Anyhow, here he is at the bottom, and ready to be introduced to you. Winnie-the-Pooh. When I first heard his name, I said, just as you are going to say, "But I thought he was a boy?" "So did I," said Christopher Robin. "Then you can't call him Winnie?" "I don't." "But you said--" ...

Tarea 6: Realiza una solicitud de procesamiento por lotes

Ahora, supongamos que quieres leer el texto de toda la novela.

  • El procesamiento en línea tiene límites para la cantidad de páginas y el tamaño de los archivos que se pueden enviar y solo permite un documento por llamada a la API.
  • En cambio, el procesamiento por lotes permite procesar archivos más grandes o varios archivos en un método asíncrono.

En esta sección, procesarás toda la novela "Winnie the Pooh" con la API de procesamiento por lotes de Document AI y el texto resultante se almacenará en un bucket de Google Cloud Storage.

El procesamiento por lotes usa operaciones de larga duración para administrar solicitudes de forma asíncrona, por lo que debemos realizar la solicitud y recuperar el resultado de forma distinta al procesamiento en línea. Sin embargo, el resultado estará en el mismo formato de objeto Document, independiente de si se usa procesamiento por lotes o en línea.

En esta sección, se muestra cómo proporcionar documentos específicos para que Document AI los procese. Más adelante, aprenderás a procesar un directorio de documentos completo.

Sube el documento PDF a Cloud Storage

Actualmente, el método batch_process_documents() acepta archivos de Google Cloud Storage. Puedes consultar documentai_v1.types.BatchProcessRequest para obtener más información sobre la estructura del objeto.

  1. Ejecuta el siguiente comando para crear un bucket de Google Cloud Storage en el que se almacenará el archivo PDF y subir el archivo PDF al bucket:
gcloud storage buckets create gs://$GOOGLE_CLOUD_PROJECT gcloud storage cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://$GOOGLE_CLOUD_PROJECT/

Usa el método batch_process_documents()

  1. Crea un archivo llamado batch_processing.py y pega el siguiente código:
import re from typing import List from google.api_core.client_options import ClientOptions from google.cloud import documentai_v1 as documentai from google.cloud import storage PROJECT_ID = "YOUR_PROJECT_ID" LOCATION = "YOUR_PROJECT_LOCATION" # El formato debe ser 'us' o 'eu' PROCESSOR_ID = "YOUR_PROCESSOR_ID" # Crea el procesador en la consola de Cloud # Formato 'gs://input_bucket/directory/file.pdf' GCS_INPUT_URI = "gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf" INPUT_MIME_TYPE = "application/pdf" # Formato 'gs://output_bucket/directory' GCS_OUTPUT_URI = "YOUR_OUTPUT_BUCKET_URI" # Crea una instancia de cliente docai_client = documentai.DocumentProcessorServiceClient( client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com") ) # El nombre de recurso completo del procesador, p. ej.: # projects/project-id/locations/location/processor/processor-id # Debes crear nuevos procesadores en la consola de Cloud RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID) # URI de Cloud Storage para el documento de entrada input_document = documentai.GcsDocument( gcs_uri=GCS_INPUT_URI, mime_type=INPUT_MIME_TYPE ) # Carga el URI de entrada de GCS en una lista de archivos de documentos input_config = documentai.BatchDocumentsInputConfig( gcs_documents=documentai.GcsDocuments(documents=[input_document]) ) # URI de Cloud Storage para el directorio de salida gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig( gcs_uri=GCS_OUTPUT_URI ) # Carga el URI de salida de GCS en el objeto OutputConfig output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config) # Configura la solicitud de procesamiento request = documentai.BatchProcessRequest( name=RESOURCE_NAME, input_documents=input_config, document_output_config=output_config, ) # El procesamiento por lotes devuelve una operación de larga duración (LRO) operation = docai_client.batch_process_documents(request) # Sondea la operación continuamente hasta que se completa. # Esto podría tardar más para archivos más grandes # Formato: projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID print(f"Waiting for operation {operation.operation.name} to complete...") operation.result() # NOTA: También puedes usar devoluciones de llamada para procesamiento asíncrono # # def my_callback(future): # result = future.result() # # operation.add_done_callback(my_callback) print("Document processing complete.") # Cuando se complete la operación, # obtén la información del documento de salida a partir de los metadatos de la operación metadata = documentai.BatchProcessMetadata(operation.metadata) if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED: raise ValueError(f"Batch Process Failed: {metadata.state_message}") documents: List[documentai.Document] = [] # Cliente de Storage para recuperar los archivos de salida de GCS storage_client = storage.Client() # Un proceso por cada documento de entrada for process in metadata.individual_process_statuses: # Formato de output_gcs_destination: gs://BUCKET/PREFIX/OPERATION_NUMBER/0 # La API de GCS requiere el nombre del bucket y el prefijo del URI por separado output_bucket, output_prefix = re.match( r"gs://(.*?)/(.*)", process.output_gcs_destination ).groups() # Obtén la lista de objetos Document del bucket de salida output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix) # Es posible que DocAI genere varios archivos JSON por archivo de origen for blob in output_blobs: # Document AI solo debe generar archivos JSON para GCS if ".json" not in blob.name: print(f"Skipping non-supported file type {blob.name}") continue print(f"Fetching {blob.name}") # Descarga el archivo JSON y conviértelo en un objeto Document document = documentai.Document.from_json( blob.download_as_bytes(), ignore_unknown_fields=True ) documents.append(document) # Imprime el texto de todos los documentos # Trunca en 100 caracteres para abreviar for document in documents: print(document.text[:100])
  1. Reemplaza YOUR_PROJECT_ID, YOUR_PROJECT_LOCATION, YOUR_PROCESSOR_ID, GCS_INPUT_URI y GCS_OUTPUT_URI por los valores adecuados para tu entorno.

    • Para GCS_INPUT_URI, usa el URI del archivo que subiste a tu bucket en el paso anterior, es decir, gs:///Winnie_the_Pooh.pdf.
    • Para GCS_OUTPUT_URI, usa el URI del bucket que creaste en el paso anterior, es decir, gs://.
  2. Ejecuta el código y deberías ver el texto de la novela completa extraído y, además, impreso en tu consola.

python3 batch_processing.py Nota: Este proceso puede tardar en completarse, ya que el archivo es mucho más grande que el del ejemplo anterior. Sin embargo, con la API de procesamiento por lotes, recibirás un ID de operación que se puede usar para obtener el resultado de Cloud Storage cuando se complete la tarea.

El resultado debería ser similar a este:

Document processing complete. Fetching 16218185426403815298/0/Winnie_the_Pooh-0.json Fetching 16218185426403815298/0/Winnie_the_Pooh-1.json Fetching 16218185426403815298/0/Winnie_the_Pooh-10.json Fetching 16218185426403815298/0/Winnie_the_Pooh-11.json Fetching 16218185426403815298/0/Winnie_the_Pooh-12.json Fetching 16218185426403815298/0/Winnie_the_Pooh-13.json Fetching 16218185426403815298/0/Winnie_the_Pooh-14.json Fetching 16218185426403815298/0/Winnie_the_Pooh-15.json .. This is a reproduction of a library book that was digitized by Google as part of an ongoing effort t 0 TAM MTAA Digitized by Google Introduction (I₂ F YOU happen to have read another book about Christo 84 Eeyore took down his right hoof from his right ear, turned round, and with great difficulty put u 94 ..

¡Genial! Extrajiste correctamente texto de un archivo PDF con la API de procesamiento por lotes de Document AI.

Haz clic en Revisar mi progreso para verificar el objetivo. Realizar una solicitud de procesamiento por lotes

Tarea 7: Realiza una solicitud de procesamiento por lotes para un directorio

A veces, es posible que quieras procesar un directorio de documentos completo, sin tener que enumerar cada documento de forma individual. El método batch_process_documents() admite la entrada de una lista de documentos específicos o una ruta de acceso a un directorio.

En esta sección, aprenderás a procesar un directorio completo de archivos de documentos. La mayoría del código es el mismo que en el paso anterior. La única diferencia es el URI de GCS que se envió con BatchProcessRequest.

  1. Ejecuta el siguiente comando para copiar el directorio de muestra (que contiene varias páginas de la novela en archivos separados) a tu bucket de Cloud Storage.
gsutil -m cp -r gs://cloud-samples-data/documentai/codelabs/ocr/multi-document/* gs://$GOOGLE_CLOUD_PROJECT/multi-document/

Puedes leer los archivos directamente o copiarlos en tu propio bucket de Cloud Storage.

  1. Crea un archivo llamado batch_processing_directory.py y pega el siguiente código:
import re from typing import List from google.api_core.client_options import ClientOptions from google.cloud import documentai_v1 as documentai from google.cloud import storage PROJECT_ID = "YOUR_PROJECT_ID" LOCATION = "YOUR_PROJECT_LOCATION" # El formato debe ser 'us' o 'eu' PROCESSOR_ID = "YOUR_PROCESSOR_ID" # Crea el procesador en la consola de Cloud # Formato 'gs://input_bucket/directory' GCS_INPUT_PREFIX = "gs://cloud-samples-data/documentai/codelabs/ocr/multi-document" # Formato 'gs://output_bucket/directory' GCS_OUTPUT_URI = "YOUR_OUTPUT_BUCKET_URI" # Crea una instancia de cliente docai_client = documentai.DocumentProcessorServiceClient( client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com") ) # El nombre de recurso completo del procesador, p. ej.: # projects/project-id/locations/location/processor/processor-id # Debes crear nuevos procesadores en la consola de Cloud RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID) # URI de Cloud Storage del directorio de entrada gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=GCS_INPUT_PREFIX) # Carga el URI de entrada de GCS en la configuración de entrada por lotes input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix) # URI de Cloud Storage para el directorio de salida gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig( gcs_uri=GCS_OUTPUT_URI ) # Carga el URI de salida de GCS en el objeto OutputConfig output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config) # Configura la solicitud de procesamiento request = documentai.BatchProcessRequest( name=RESOURCE_NAME, input_documents=input_config, document_output_config=output_config, ) # El procesamiento por lotes devuelve una operación de larga duración (LRO) operation = docai_client.batch_process_documents(request) # Sondea la operación continuamente hasta que se completa. # Esto podría tardar más para archivos más grandes # Formato: projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID print(f"Waiting for operation {operation.operation.name} to complete...") operation.result() # NOTA: También puedes usar devoluciones de llamada para procesamiento asíncrono # # def my_callback(future): # result = future.result() # # operation.add_done_callback(my_callback) print("Document processing complete.") # Cuando se complete la operación, # obtén la información del documento de salida a partir de los metadatos de la operación metadata = documentai.BatchProcessMetadata(operation.metadata) if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED: raise ValueError(f"Batch Process Failed: {metadata.state_message}") documents: List[documentai.Document] = [] # Cliente de Storage para recuperar los archivos de salida de GCS storage_client = storage.Client() # Un proceso por cada documento de entrada for process in metadata.individual_process_statuses: # Formato de output_gcs_destination: gs://BUCKET/PREFIX/OPERATION_NUMBER/0 # La API de GCS requiere el nombre del bucket y el prefijo del URI por separado output_bucket, output_prefix = re.match( r"gs://(.*?)/(.*)", process.output_gcs_destination ).groups() # Obtén la lista de objetos Document del bucket de salida output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix) # Es posible que DocAI genere varios archivos JSON por archivo de origen for blob in output_blobs: # Document AI solo debe generar archivos JSON para GCS if ".json" not in blob.name: print(f"Skipping non-supported file type {blob.name}") continue print(f"Fetching {blob.name}") # Descarga el archivo JSON y conviértelo en un objeto Document document = documentai.Document.from_json( blob.download_as_bytes(), ignore_unknown_fields=True ) documents.append(document) # Imprime el texto de todos los documentos # Trunca en 100 caracteres para abreviar for document in documents: print(document.text[:100])
  1. Reemplaza PROJECT_ID, LOCATION, PROCESSOR_ID, GCS_INPUT_PREFIX y GCS_OUTPUT_URI por los valores adecuados para tu entorno.

    • Para GCS_INPUT_PREFIX, usa el URI del directorio que subiste a tu bucket en la sección anterior, es decir, gs:///multi-document.
    • Para GCS_OUTPUT_URI, usa el URI del bucket que creaste en la sección anterior, es decir, gs://.
  2. Usa el siguiente comando para ejecutar el código. Deberías ver el texto extraído de todos los archivos de documentos en el directorio de Cloud Storage.

python3 batch_processing_directory.py

El resultado debería ser similar a este:

Document processing complete. Fetching 16354972755137859334/0/Winnie_the_Pooh_Page_0-0.json Fetching 16354972755137859334/1/Winnie_the_Pooh_Page_1-0.json Fetching 16354972755137859334/2/Winnie_the_Pooh_Page_10-0.json .. Introduction (I₂ F YOU happen to have read another book about Christopher Robin, you may remember th IN WHICH We Are Introduced to CHAPTER I Winnie-the-Pooh and Some Bees, and the Stories Begin HERE is ..

¡Genial! Usaste correctamente la biblioteca cliente de Python para Document AI para procesar un directorio de documentos con un procesador de Document AI y almacenar los resultados en Cloud Storage.

Haz clic en Revisar mi progreso para verificar el objetivo. Realizar una solicitud de procesamiento por lotes para un directorio

¡Felicitaciones!

¡Felicitaciones! En este lab, aprendiste a usar la biblioteca cliente de Python para Document AI para procesar un directorio de documentos con un procesador de Document AI y almacenar los resultados en Cloud Storage. También aprendiste a autenticar solicitudes a la API con un archivo de claves de cuenta de servicio, instalar la biblioteca cliente de Python para Document AI y usar las APIs de procesamiento en línea (síncrono) y por lotes (asíncrono) para procesar solicitudes.

Próximos pasos / Más información

Consulta los siguientes recursos para obtener más información sobre Document AI y la biblioteca cliente de Python:

Capacitación y certificación de Google Cloud

Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.

Actualización más reciente del manual: 13 de junio de 2024

Prueba más reciente del lab: 13 de junio de 2024

Copyright 2025 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.