Usa Document AI per elaborare in modo intelligente i tuoi moduli scritti a mano (Node.js)

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

  • Un progetto Google Cloud
  • Un browser, ad esempio Chrome o Firefox
  • Conoscenza di Node.js

Sondaggio

Come utilizzerai questo tutorial?

Solo lettura Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con Node.js?

Principiante Livello intermedio Eccellente

Come giudichi la tua esperienza di utilizzo dei servizi Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. 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.

  1. 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

  1. Dalla console Cloud, fai clic su Attiva Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LXZ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

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:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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.

  1. 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.

  1. Fai clic sul menu di navigazione PUBLISHER > API e Servizi > Raccolta. API Search
  2. 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.

  1. Nella console, vai a Document AI Platform Overview
  2. Fai clic su Crea processore e seleziona Analizzatore moduliProcessori
  3. Specifica un nome del processore e seleziona la tua regione dall'elenco.
  4. Fai clic su Crea per creare il tuo processore
  5. 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.

Modulo sanitario

L'output dovrebbe avere questo aspetto: Modulo analizzato

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ù

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.