Mit Document AI handschriftliche Formulare (Node.js) intelligent verarbeiten

1. Übersicht

Was ist Document AI?

Die Document AI API ist eine Lösung zum Verständnis von Dokumenten, die unstrukturierte Daten wie Dokumente, E-Mails usw. aufnimmt, um sie leichter zu verstehen, zu analysieren und zu nutzen. Die API bietet Struktur durch Inhaltsklassifizierung, Entitätsextraktion, erweiterte Suche und mehr.

In dieser Anleitung konzentrieren Sie sich auf die Verwendung der Document AI API mit Node.js. Das Tutorial zeigt, wie ein einfaches medizinisches Aufnahmeformular geparst wird.

Aufgaben in diesem Lab

  • Document AI API aktivieren
  • API-Anfragen authentifizieren
  • Clientbibliothek für Node.js installieren
  • So parsen Sie Daten aus einem gescannten Formular

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser, z. B. Chrome oder Firefox
  • Kenntnisse in Node.js

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie würden Sie Ihre Erfahrung mit Node.js bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud-Diensten bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie ein Konto erstellen.

Notieren Sie sich die Projekt-ID, also einen eindeutigen Namen in allen Google Cloud-Projekten. (Ihr Name oben ist bereits vergeben und funktioniert leider nicht.) Sie müssen diese ID später als PROJECT_ID angeben.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen verwenden zu können.

Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . In diesem Abschnitt wird beschrieben, wie Sie Ressourcen herunterfahren, damit über diese Anleitung hinaus keine weiteren Kosten anfallen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.

Cloud Shell starten

Mit Google Cloud können Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen. In diesem Codelab wird jedoch Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtZWQFrF.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Wenn Sie Cloud Shell noch nie gestartet haben, wird ein Zwischenbildschirm (below the fold) angezeigt, in dem beschrieben wird, worum es sich bei Cloud Shell handelt. Klicken Sie in diesem Fall auf Weiter. Der Chat wird nie wieder angezeigt. So sieht dieser einmalige Bildschirm aus:

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

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Cloud Shell bietet Ihnen Terminalzugriff auf eine virtuelle Maschine, die in der Cloud gehostet wird. Die virtuelle Maschine enthält alle Entwicklungstools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können Sie ganz einfach mit einem Browser oder Ihrem Chromebook erledigen.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. Cloud Document AI API aktivieren

Bevor Sie Document AI verwenden können, müssen Sie die API aktivieren. Öffnen Sie die Cloud Console in Ihrem Browser.

  1. Klicke auf das Navigationsmenü 😃 > APIs und Dienste > Bibliothek: Search API
  2. Suchen Sie nach „Document AI API“. Klicken Sie dann auf Aktivieren, um die API in Ihrem Google Cloud-Projekt zu verwenden

4. Prozessor erstellen und testen

Sie müssen zuerst eine Instanz des Formularparser-Prozessors erstellen, der in der Document AI Platform für diese Anleitung verwendet werden soll.

  1. Rufen Sie in der Console die Document AI Platform – Übersicht auf.
  2. Klicken Sie auf Create Processor (Prozessor erstellen) und wählen Sie Form Parser (Formularparser) aus.Prozessoren
  3. Geben Sie einen Prozessornamen an und wählen Sie Ihre Region aus der Liste aus.
  4. Klicken Sie auf Erstellen, um den Prozessor zu erstellen.
  5. Kopieren Sie Ihre Prozessor-ID. Sie müssen sie später in Ihrem Code verwenden.

(Optional) Sie können den Prozessor in der Konsole testen, indem Sie ein Dokument hochladen. Klicken Sie auf Dokument hochladen und wählen Sie ein Formular zum Parsen aus. Sie können dieses Beispielformular herunterladen und verwenden, falls Sie keins haben.

Gesundheitsformular

Die Ausgabe sollte so aussehen: Geparste Form

5. API-Anfragen authentifizieren

Für Anfragen an die Document AI API benötigen Sie ein Dienstkonto. Ein Dienstkonto gehört zu Ihrem Projekt und wird von der Google Client Node.js-Bibliothek für API-Anfragen verwendet. Wie jedes andere Nutzerkonto wird auch ein Dienstkonto durch eine E-Mail-Adresse repräsentiert. In diesem Abschnitt verwenden Sie das Cloud SDK, um ein Dienstkonto zu erstellen. Anschließend erstellen Sie Anmeldedaten, die Sie als Dienstkonto authentifizieren müssen.

Legen Sie zuerst mit PROJECT_ID eine Umgebungsvariable fest, die Sie in diesem Codelab verwenden werden:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

Erstellen Sie als Nächstes ein neues Dienstkonto, um mit folgendem Befehl auf die Document AI API zuzugreifen:

gcloud iam service-accounts create my-docai-sa \
  --display-name "my-docai-service-account"

Erstellen Sie als Nächstes Anmeldedaten, mit denen Ihr Node.js-Code sich als neues Dienstkonto anmeldet. Erstellen Sie diese Anmeldedaten und speichern Sie sie als JSON-Datei „~/key.json“. indem Sie den folgenden Befehl verwenden:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Legen Sie abschließend die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS fest, mit der die Bibliothek Ihre Anmeldedaten ermittelt. Weitere Informationen zu dieser Formularauthentifizierung finden Sie im Leitfaden. Die Umgebungsvariable sollte auf den vollständigen Pfad der JSON-Datei mit den Anmeldedaten festgelegt werden, indem Sie Folgendes verwenden:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"

6. Beispielformular herunterladen

In unserem öffentlichen Google Cloud Storage-Beispiel-Bucket finden Sie ein Beispielformular, das Sie verwenden können. Verwenden Sie den folgenden Befehl, um sie in Ihr Arbeitsverzeichnis herunterzuladen.

gsutil cp gs://cloud-samples-data/documentai/form.pdf .

Prüfen Sie mit dem folgenden Befehl, ob die Datei in Cloud Shell heruntergeladen wurde:

ls -ltr form.pdf

7. Clientbibliothek installieren

Als Nächstes richten Sie den Code in Ihrem Arbeitsverzeichnis ein.

Initialisieren Sie ein neues Node.js-Paket:

npm init

Installieren Sie die Document AI-Clientbibliothek:

npm install @google-cloud/documentai

8. Dokumentanfrage für synchronen Prozess stellen

In diesem Schritt führen Sie mit dem synchronen Endpunkt einen Prozessdokumentaufruf aus. Wenn Sie große Mengen an Dokumenten gleichzeitig verarbeiten möchten, können Sie auch die asynchrone API verwenden. Weitere Informationen zur Verwendung der Form Parser APIs finden Sie in diesem Leitfaden.

Erstellen Sie eine index.js-Datei und fügen Sie den folgenden Code ein. Geben Sie die entsprechenden Variablen mit den Informationen des Prozessors ein.

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;
});

Führen Sie den Code jetzt aus. Der folgende Text sollte in der Konsole angezeigt werden.

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

In den nächsten Schritten extrahieren Sie strukturierte Daten, die einfacher in Datenbanken gespeichert oder in anderen Anwendungen verwendet werden können.

9. Schlüssel/Wert-Paare des Formulars extrahieren

Jetzt können Sie die Schlüssel/Wert-Paare und die zugehörigen Konfidenzwerte aus dem Formular extrahieren. Das Document-Antwortobjekt enthält eine Liste der Seiten aus dem Eingabedokument. Jedes page-Objekt enthält eine Liste von Formularfeldern und deren Positionen im Text.

Der folgende Code durchläuft jede Seite und extrahiert jeden Schlüssel, Wert und Konfidenzwert.

Fügen Sie Ihrem Code die folgende Funktion hinzu.

/**
 * 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;
}

Fügen Sie der Funktion extractFormData() aus der Hauptfunktion einen Aufruf hinzu und geben Sie das resultierende Objekt als Tabelle aus.

/**
 * 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);
}

Führen Sie jetzt Ihren Code aus. Sie sollten die folgende Ausgabe sehen, wenn Sie unser Beispieldokument verwenden:

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. Glückwunsch!

Herzlichen Glückwunsch! Sie haben mithilfe der Document AI API erfolgreich Daten aus einem handschriftlichen Formular extrahiert. Wir empfehlen Ihnen, mit anderen Formularbildern zu experimentieren.

Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

  • Rufen Sie in der Cloud Console die Seite Ressourcen verwalten auf.
  • Wählen Sie Ihr Projekt in der Projektliste aus und klicken Sie auf „Löschen“.
  • Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie dann auf „Beenden“, um das Projekt zu löschen.

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.