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
Umfrage
Wie möchten Sie diese Anleitung nutzen?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrung mit Node.js bewerten?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud-Diensten bewerten?
<ph type="x-smartling-placeholder">2. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte Lernen einrichten
- 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.
- 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
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren .
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:
Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.
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.
- 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.
- Klicke auf das Navigationsmenü 😃 > APIs und Dienste > Bibliothek:
- 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.
- Rufen Sie in der Console die Document AI Platform – Übersicht auf.
- Klicken Sie auf Create Processor (Prozessor erstellen) und wählen Sie Form Parser (Formularparser) aus.
- Geben Sie einen Prozessornamen an und wählen Sie Ihre Region aus der Liste aus.
- Klicken Sie auf Erstellen, um den Prozessor zu erstellen.
- 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.
Die Ausgabe sollte so aussehen:
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
- The Future of Documents – YouTube-Playlist
- Dokumentation zu Document AI
- Referenz zur Node.js-Clientbibliothek von Document AI
- Node.js-Beispiele für Document AI