1. Panoramica
Che cos'è Document AI?
L'API Document AI è una soluzione di comprensione dei documenti che prende i dati non strutturati, come documenti, email e così via, e li rende più facili da comprendere, analizzare e utilizzare. L'API fornisce una struttura tramite classificazione dei contenuti, estrazione di entità, ricerca avanzata e altro ancora.
In questo tutorial, ti concentrerai sull'utilizzo dell'API Document AI con Node.js. Il tutorial mostra come analizzare un semplice modulo di assunzione medica.
Cosa imparerai a fare
- Come abilitare l'API Document AI
- Come autenticare le richieste API
- Come installare la libreria client per Node.js
- Come analizzare i dati di un modulo scansionato
Che cosa ti serve
Sondaggio
Come utilizzerai questo tutorial?
Come valuteresti la tua esperienza con Node.js?
Come giudichi la tua esperienza di utilizzo dei servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco tra tutti i progetti Google Cloud. Il nome indicato sopra è già in uso e non funzionerà per te. Devi fornire questo ID in un secondo momento come PROJECT_ID
.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
Assicurati di seguire le istruzioni nella sezione "Pulizia" . Questa sezione spiega come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Avvia Cloud Shell
Mentre con Google Cloud puoi utilizzare Google Cloud da remoto dal tuo laptop, questo codelab utilizza Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Attiva Cloud Shell
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
Se non hai mai avviato Cloud Shell, ti viene mostrata una schermata intermedia (below the fold) che descrive di cosa si tratta. In tal caso, fai clic su Continua (e non la vedrai più). Ecco come appare quella singola schermata:
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
Cloud Shell fornisce l'accesso al terminale a una macchina virtuale ospitata nel cloud. La macchina virtuale include tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto semplicemente con un browser o Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output 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
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Abilita l'API Cloud Document AI
Prima di poter iniziare a utilizzare Document AI, devi abilitare l'API. Apri la console Cloud nel browser.
- Fai clic sul menu di navigazione PUBLISHER > API e Servizi > Raccolta.
- Cerca "API Document AI" e fai clic su Abilita per utilizzare l'API nel tuo progetto Google Cloud.
4. crea e testa un processore
Devi prima creare un'istanza del processore dell'analizzatore sintattico di moduli da utilizzare in Document AI Platform per questo tutorial.
- Nella console, vai a Document AI Platform Overview
- Fai clic su Crea processore e seleziona Analizzatore moduli
- Specifica un nome del processore e seleziona la tua regione dall'elenco.
- Fai clic su Crea per creare il tuo processore
- Copia il tuo ID processore. Lo dovrai utilizzare nel tuo codice in un secondo momento.
(Facoltativo) Puoi testare il tuo processore nella console caricando un documento. Fai clic su Carica documento e seleziona un modulo da analizzare. Puoi scaricare e utilizzare questo modulo di esempio se non ne hai uno disponibile.
L'output dovrebbe avere questo aspetto:
5. Autentica le richieste API
Per effettuare richieste all'API Document AI, devi utilizzare un account di servizio. Un account di servizio appartiene al progetto e viene utilizzato dalla libreria Node.js del client Google per effettuare le richieste API. Come qualsiasi altro account utente, un account di servizio è rappresentato da un indirizzo email. In questa sezione utilizzerai Cloud SDK per creare un account di servizio e quindi creare le credenziali per l'autenticazione come account di servizio.
Innanzitutto, imposta una variabile di ambiente con PROJECT_ID
che utilizzerai in questo codelab:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Quindi, crea un nuovo account di servizio per accedere all'API Document AI utilizzando:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Successivamente, crea le credenziali che il codice Node.js utilizza per accedere come nuovo account di servizio. Crea le credenziali e salvale come file JSON "~/key.json" utilizzando il seguente comando:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Infine, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS, utilizzata dalla libreria per trovare le tue credenziali. Per ulteriori informazioni sull'autenticazione dei moduli, consulta la guida. La variabile di ambiente deve essere impostata sul percorso completo del file JSON delle credenziali che hai creato utilizzando:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Scarica il modulo di esempio
Abbiamo un modulo di esempio da utilizzare e archiviato nel nostro bucket pubblico di esempi di Google Cloud Storage. Utilizza il seguente comando per scaricarlo nella tua directory di lavoro.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Verifica che il file sia stato scaricato su Cloudshell utilizzando il comando seguente:
ls -ltr form.pdf
7. Installa la libreria client
A questo punto, configura il codice nella directory di lavoro.
Inizializza un nuovo pacchetto Node.js:
npm init
Installa la libreria client di Document AI:
npm install @google-cloud/documentai
8. Invia una richiesta di documento di processo sincrono
In questo passaggio, effettuerai una chiamata ai documenti del processo utilizzando l'endpoint sincrono. Per elaborare grandi quantità di documenti contemporaneamente puoi anche utilizzare l'API asincrona. Per saperne di più sull'utilizzo delle API Analizzatore di moduli, consulta la guida qui.
Crea un file index.js
e incolla il codice seguente. Compila le variabili applicabili con le informazioni del tuo responsabile.
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;
});
Esegui ora il codice. Dovresti vedere il testo seguente stampato nella console.
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
Nei passaggi successivi, estrai i dati strutturati che possono essere archiviati più facilmente nei database o utilizzati in altre applicazioni.
9. Estrazione delle coppie chiave/valore del modulo
Ora puoi estrarre le coppie chiave-valore dal modulo e i punteggi di confidenza corrispondenti. L'oggetto risposta Document contiene un elenco di pagine del documento di input. Ogni oggetto page
contiene un elenco di campi del modulo e le relative posizioni nel testo.
Il seguente codice esegue l'iterazione in ogni pagina ed estrae ogni chiave, valore e punteggio di confidenza.
Aggiungi la funzione seguente al codice.
/**
* 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;
}
Aggiungi una chiamata alla funzione extractFormData()
dall'interno della funzione principale e stampa l'oggetto risultante come tabella.
/**
* 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);
}
Ora esegui il codice. Se utilizzi il nostro documento di esempio, dovresti visualizzare il seguente output:
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. Complimenti!
Complimenti, hai utilizzato correttamente l'API Document AI per estrarre i dati da un modulo scritto a mano. Ti invitiamo a provare altre immagini del modulo.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial:
- Nella console Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto e fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Scopri di più
- Il futuro dei documenti - Playlist di YouTube
- Documentazione di Document AI
- Riferimento per la libreria client Node.js di Document AI
- Esempi di Node.js di Document AI