¿Qué es Document AI?
La API de Document AI es una solución de comprensión de documentos que toma datos no estructurados, como documentos, correos electrónicos, etc., y permite que los datos sean más fáciles de comprender, analizar y consumir. 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 instructivo, te enfocarás en el uso de la API de Document AI con Python. En el instructivo, se explica cómo analizar un formulario simple de admisión médica.
Qué aprenderá
- Cómo habilitar la API de Document AI
- Cómo autenticar solicitudes a la API
- Cómo instalar la biblioteca cliente de Python
- Cómo analizar datos de un formulario escaneado
Qué necesitará
Encuesta
¿Cómo usarás este instructivo?
¿Cómo calificarías tu experiencia con Python?
¿Cómo calificarías tu experiencia con los servicios de Google Cloud?
Configuración del entorno a su propio ritmo
- Accede a Cloud Console y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de G Suite, debes crear una).
Recuerda el ID del proyecto, un nombre único en todos los proyectos de Google Cloud. (el nombre anterior ya se encuentra en uso y no lo podrás usar). Debes proporcionar este ID más adelante como PROJECT_ID
.
- Luego, debes habilitar la facturación en Cloud Console para usar los recursos de Google Cloud.
Asegúrate de seguir las instrucciones de la sección “Limpieza”. En la sección, se aconseja cómo cerrar recursos para que no se te facture más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Iniciar Cloud Shell
Si bien Google Cloud puede operar Google Cloud de forma remota desde tu laptop, este codelab usa Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
Activar Cloud Shell
- En Cloud Console, haz clic en Activar Cloud Shell.
Si nunca has iniciado Cloud Shell, se mostrará una pantalla intermedia (mitad inferior) que describe qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Cloud Shell te brinda acceso de terminal a una máquina virtual alojada en la nube. La máquina virtual incluye todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.
Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puede configurarlo con este comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
Antes de comenzar a usar Document AI, debes habilitar la API. Abre Cloud Console en tu navegador.
- Haz clic en Menú de navegación ☰ > API y servicios > Biblioteca.
- Busca “API de Document AI” y, luego, haz clic en Habilitar para usar la API en su proyecto de Google Cloud.
Primero debes crear una instancia del procesador del analizador de formularios a fin de usarla en la plataforma de Document AI para este instructivo.
- En Console, navega a Descripción general de la plataforma de Document AI
- Haz clic en Crear procesador y selecciona Analizador de formularios.
- Especifica el nombre del procesador y selecciona tu región en la lista.
- Haz clic en Crear para crear tu procesador.
- Copia el ID del procesador. Debes usar esto en el código más adelante.
Para probar tu procesador en la consola, puedes subir un documento (opcional). Haz clic en Subir documento y selecciona un formulario para analizar. Puedes descargar y usar este formulario de muestra si no tienes uno disponible para usar.
El resultado debería ser el siguiente:
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 de Google 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á el SDK de Cloud a fin de crear una cuenta de servicio y, luego, crear las credenciales que necesita para autenticarse como la cuenta de servicio.
Primero, configura una variable de entorno con tu PROJECT_ID
, que usarás en este codelab:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
A continuación, crea una cuenta de servicio nueva para acceder a la API de Document AI mediante el siguiente comando:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
A continuación, crea las credenciales que tu código de Python usa para acceder como tu cuenta de servicio nueva. Crea estas credenciales y guárdalas como un archivo JSON “~/key.json” mediante el siguiente comando:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Por último, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS, que la biblioteca usa para encontrar tus credenciales. Para obtener más información sobre la autenticación de este formulario, consulta la guía. La variable de entorno debe configurarse en la ruta completa del archivo JSON de credenciales que creaste mediante el siguiente comando:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
Tenemos un formulario de muestra para usar en Google Cloud Storage. Usa el siguiente comando para descargarlo en tu directorio de trabajo.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Confirma que el archivo se haya descargado a cloudshell mediante el siguiente comando:
ls -ltr form.pdf
Instala la biblioteca cliente:
pip3 install --upgrade google-cloud-documentai pip3 install --upgrade google-cloud-storage
Debería ver algo como esto:
... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-0.3.0 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-1.35.0
Ya está lista para usar la API de Document AI.
Iniciar Python interactiva
En este instructivo, usarás un intérprete de Python interactivo llamado IPython. Inicia una sesión mediante la ejecución de ipython
en Cloud Shell. Este comando ejecuta el intérprete de Python en una sesión interactiva.
ipython
Debería ver algo como esto:
Python 3.7.3 (default, Jul 25 2020, 13:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
En este paso, realizarás una llamada a un documento de proceso mediante el extremo síncrono. Si deseas procesar grandes cantidades de documentos a la vez, también puedes usar la API asíncrona. Si deseas obtener más información para usar las API de Analizador de formularios, lee la guía aquí.
Copie el siguiente código en su sesión de iPython:
project_id= 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
file_path = 'form.pdf' # The local file in your current working directory
from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage
def process_document(
project_id=project_id, location=location, processor_id=processor_id, file_path=file_path
):
# Instantiates a client
client = documentai.DocumentProcessorServiceClient()
# The full resource name of the processor, e.g.:
# projects/project-id/locations/location/processor/processor-id
# You must create new processors in the Cloud Console first
name = f"projects/{project_id}/locations/{location}/processors/{processor_id}"
with open(file_path, "rb") as image:
image_content = image.read()
# Read the file into memory
document = {"content": image_content, "mime_type": "application/pdf"}
# Configure the process request
request = {"name": name, "document": document}
# Use the Document AI client to process the sample form
result = client.process_document(request=request)
document = result.document
document_text = document.text
print("Document processing complete.")
print("Text: {}".format(document_text))
Ejecuta el código ahora y deberías ver el texto extraído e impreso en tu consola. En los pasos siguientes, debes extraer datos estructurados que se pueden almacenar más fácilmente en bases de datos o en otras aplicaciones.
Llama a la función:
process_document()
Ahora puedes extraer los pares clave-valor del formulario y sus puntuaciones de confianza correspondientes. El objeto de respuesta Document contiene una lista de páginas del documento de entrada. Cada objeto page
contiene una lista de campos de formulario y sus ubicaciones en el texto.
El siguiente código itera en cada página y extrae e imprime cada clave, valor y puntuación de confianza.
En la parte inferior de la función processDocument(), pega el siguiente código:
document_pages = document.pages
for page in document_pages:
print("Page Number:{}".format(page.page_number))
for form_field in page.form_fields:
fieldName=get_text(form_field.field_name,document)
nameConfidence = round(form_field.field_name.confidence,4)
fieldValue = get_text(form_field.field_value,document)
valueConfidence = round(form_field.field_value.confidence,4)
print(fieldName+fieldValue +" (Confidence Scores: "+str(nameConfidence)+", "+str(valueConfidence)+")")
def get_text(doc_element: dict, document: dict):
"""
Document AI identifies form fields by their offsets
in document text. This function converts offsets
to text snippets.
"""
response = ""
# If a text segment spans several lines, it will
# be stored in different text segments.
for segment in doc_element.text_anchor.text_segments:
start_index = (
int(segment.start_index)
if segment in doc_element.text_anchor.text_segments
else 0
)
end_index = int(segment.end_index)
response += document.text[start_index:end_index]
return response
Ahora ejecuta tu código, llama a la función:
process_document()
Deberías ver el siguiente resultado si usas nuestro documento de muestra:
Document processing complete.
Page Number:1
Marital Status: Single (Confidence Scores: 1.0000, 1.0000)
DOB: 09/04/1986 (Confidence Scores: 0.9999, 0.9999)
City: Towalo (Confidence Scores: 0.9996, 0.9996)
Address: 24 Barney Lane (Confidence Scores: 0.9994, 0.9994)
Referred By: None (Confidence Scores: 0.9968, 0.9968)
Phone #: (906) 917-3486 (Confidence Scores: 0.9961, 0.9961)
State: NJ (Confidence Scores: 0.9960, 0.9960)
Emergency Contact Phone: (906) 334-8926 (Confidence Scores: 0.9924, 0.9924)
Name: Sally Walker (Confidence Scores: 0.9922, 0.9922)
Felicitaciones, usaste correctamente la API de Document AI para extraer datos de un formulario escrito a mano. Te recomendamos que pruebes con otras imágenes de formulario
Limpieza
Para evitar que se generen costos en tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, sigue estos pasos:
- En Cloud Console, ve a la página Administrar recursos.
- En la lista de proyectos, selecciona tu proyecto y haz clic en Borrar.
- En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.