1. Descripción general
¿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 Node.js. 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 Node.js
- Cómo analizar datos de un formulario escaneado
Qué necesitará
Encuesta
¿Cómo usarás este instructivo?
¿Cómo calificarías tu experiencia con Node.js?
¿Cómo calificarías tu experiencia en el uso de los servicios de Google Cloud?
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud 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 que aparece arriba ya está en uso y no funcionará. ¡Lo siento!). Debes proporcionar este ID más adelante como PROJECT_ID
.
- Luego, debes habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud.
Asegúrate de seguir las instrucciones de la sección “Realiza una 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.
Inicia Cloud Shell
Si bien puedes usar 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 la consola de Cloud, 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, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Habilita la API de Cloud Document AI
Antes de comenzar a usar Document AI, debes habilitar la API. Abre la consola de Cloud 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.
4. Crea y prueba un procesador
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 Create Processor y selecciona Form Parser.
- 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.
Tu resultado debería tener la siguiente apariencia:
5. 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 Google de Node.js 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 con el siguiente comando:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
A continuación, crea credenciales para que tu código de Node.js las use 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 se debe establecer en la ruta de acceso completa del archivo JSON de credenciales que creaste, con el siguiente código:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Descargar el formulario de muestra
Tenemos un formulario de muestra almacenado en nuestro bucket público de muestras de 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
7. Instalar la biblioteca cliente
A continuación, configura el código en el directorio de trabajo.
Inicializa un nuevo paquete de Node.js:
npm init
Instala la biblioteca cliente de Document AI:
npm install @google-cloud/documentai
8. Realiza una solicitud de documento de proceso síncrono
En este paso, realizarás una llamada a documentos de procesos con 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í.
Crea un archivo index.js
y pega el siguiente código. Completa las variables aplicables con la información de tu procesador.
const { DocumentProcessorServiceClient } = require('@google-cloud/documentai').v1;
const fs = require('fs');
/**
* Runs the sample document through Document AI to get key/value pairs and
* confidence scores.
*/
async function processDocument(projectId, location, processorId, filePath, mimeType) {
// Instantiates a client
const documentaiClient = new 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
const resourceName = documentaiClient.processorPath(projectId, location, processorId);
// Read the file into memory.
const imageFile = fs.readFileSync(filePath);
// Convert the image data to a Buffer and base64 encode it.
const encodedImage = Buffer.from(imageFile).toString('base64');
// Load Binary Data into Document AI RawDocument Object
const rawDocument = {
content: encodedImage,
mimeType: mimeType,
};
// Configure ProcessRequest Object
const request = {
name: resourceName,
rawDocument: rawDocument
};
// Use the Document AI client to process the sample form
const [result] = await documentaiClient.processDocument(request);
return result.document;
}
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
console.log("Document Processing Complete");
// Print the document text as one big string
console.log(`Text: ${document.text}`);
}
main(...process.argv.slice(2)).catch(err => {
console.error(err);
process.exitCode = 1;
});
Ejecuta tu código ahora. Deberías ver el siguiente texto impreso en tu consola.
Text: FakeDoc M.D. HEALTH INTAKE FORM Please fill out the questionnaire carefully. The information you provide will be used to complete your health profile and will be kept confidential. Name: Date: Sally Walker DOB: 09/04/1986 Address: 24 Barney Lane City: Towalo State: NJ Zip: 07082 Email: Sally, waller@cmail.com Phone #: (906) 917-3486 Gender: Marital Status: Single Occupation: Software Engineer Referred By: None Emergency Contact: Eva Walker Emergency Contact Phone: (906) 334-8926 Describe your medical concerns (symptoms, diagnoses, etc): Runny nose, mucas in throat, weakness, aches, chills, tired Are you currently taking any medication? (If yes, please describe): Vyvanse (25mg) daily for attention
En los próximos pasos, extraerás datos estructurados que pueden almacenarse más fácilmente en bases de datos o usarse en otras aplicaciones.
9. Extrae los pares clave-valor del formulario
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 se itera en cada página y extrae cada clave, valor y puntuación de confianza.
Agrega la siguiente función a tu código.
/**
* Extract form data and confidence from processed document.
*/
function extractFormData(document) {
// Extract shards from the text field
function getText(textAnchor, document) {
if (!textAnchor.textSegments || textAnchor.textSegments.length === 0) {
return '';
}
// First shard in document doesn't have startIndex property
const startIndex = textAnchor.textSegments[0].startIndex || 0;
const endIndex = textAnchor.textSegments[0].endIndex;
return document.text.substring(startIndex, endIndex);
}
var formData = [];
const pages = document.pages;
pages.forEach((page) => {
const formFields = page.formFields;
formFields.forEach((field) => {
// Get the extracted field names and remove extra space from text
const fieldName = getText(field.fieldName.textAnchor, document);
// Confidence - How "sure" the API is that the text is correct
const nameConfidence = field.fieldName.confidence.toFixed(4);
const fieldValue = getText(field.fieldValue.textAnchor, document);
const valueConfidence = field.fieldValue.confidence.toFixed(4);
formData.push({
fieldName: fieldName,
fieldValue: fieldValue,
nameConfidence: nameConfidence,
valueConfidence: valueConfidence
});
});
});
return formData;
}
Agrega una llamada a la función extractFormData()
desde el interior de la función principal y, luego, imprime el objeto resultante como una tabla.
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
const formData = extractFormData(document);
console.log('\nThe following form key/value pairs were detected:');
console.table(formData);
}
Ahora, ejecuta tu código. Deberías ver el siguiente resultado si usas nuestro documento de muestra:
The following form key/value pairs were detected: ┌─────────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────────────┬─────────────────┐ │ (index) │ fieldName │ fieldValue │ nameConfidence │ valueConfidence │ ├─────────┼────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────────┼─────────────────┤ │ 0 │ 'Marital Status: ' │ 'Single ' │ '1.0000' │ '1.0000' │ │ 1 │ 'DOB: ' │ '09/04/1986\n' │ '0.9999' │ '0.9999' │ │ 2 │ 'City: ' │ 'Towalo ' │ '0.9996' │ '0.9996' │ │ 3 │ 'Address: ' │ '24 Barney Lane ' │ '0.9994' │ '0.9994' │ │ 4 │ 'Referred By: ' │ 'None\n' │ '0.9968' │ '0.9968' │ │ 5 │ 'Phone #: ' │ '(906) 917-3486\n' │ '0.9961' │ '0.9961' │ │ 6 │ 'State: ' │ 'NJ ' │ '0.9960' │ '0.9960' │ │ 7 │ 'Emergency Contact Phone: ' │ '(906) 334-8926\n' │ '0.9925' │ '0.9925' │ │ 8 │ 'Name:\n' │ 'Sally\nWalker\n' │ '0.9922' │ '0.9922' │ │ 9 │ 'Occupation: ' │ 'Software Engineer\n' │ '0.9914' │ '0.9914' │ │ 10 │ 'Zip: ' │ '07082\n' │ '0.9904' │ '0.9904' │ │ 11 │ 'Email: ' │ 'Sally, waller@cmail.com ' │ '0.9681' │ '0.9681' │ │ 12 │ 'Emergency Contact: ' │ 'Eva Walker ' │ '0.9430' │ '0.9430' │ │ 13 │ 'Describe your medical concerns (symptoms, diagnoses, etc):\n' │ 'Runny nose, mucas in throat, weakness,\naches, chills, tired\n' │ '0.7817' │ '0.7817' │ └─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘
10. ¡Felicitaciones!
Felicitaciones, usaste correctamente la API de Document AI para extraer datos de un formulario escrito a mano. Te recomendamos experimentar con otras imágenes del formulario.
Realiza una limpieza
Para evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que usaste en este instructivo, sigue estos pasos:
- En la consola de Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, selecciona tu proyecto y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
Más información
- El futuro de los documentos - Playlist de YouTube
- Documentación de Document AI
- Referencia de la biblioteca cliente de Node.js para Document AI
- Muestras de Node.js de Document AI