1. Übersicht
Was ist Document AI?
Document AI ist eine Lösung zum Verstehen von Dokumenten, die unstrukturierte Daten (z.B. Dokumente, E-Mails, Rechnungen, Formulare usw.) verwendet, um sie leichter zu verstehen, zu analysieren und zu nutzen. Die API bietet Struktur durch Inhaltsklassifizierung, Entitätsextraktion, erweiterte Suche und mehr.
In diesem Lab lernen Sie, wie Sie mithilfe der Document AI API und Python eine optische Zeichenerkennung durchführen.
Wir verwenden eine PDF-Datei des Romanklassikers „Winnie Puuh“. von A.A. Milne, die seit Kurzem Teil der Public Domain-Urheberrechte in den USA ist. Diese Datei wurde von Google Books gescannt und digitalisiert.
Aufgaben in diesem Lab
- Document AI API aktivieren
- API-Anfragen authentifizieren
- Clientbibliothek für Python installieren
- Online- und Batchverarbeitungs-APIs verwenden
- So parsen Sie Text aus einer PDF-Datei
Voraussetzungen
- Ein Google Cloud-Projekt
- Ein Browser, z. B. Chrome oder Firefox
- Python-Vorkenntnisse (3.9 und höher)
Umfrage
Wie möchten Sie diese Anleitung nutzen?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrung mit Python 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 Google Workspace-Konto haben, müssen Sie eines erstellen.
Notieren Sie sich die Projekt-ID, also einen eindeutigen Namen in allen Google Cloud-Projekten. (Die Projekt-ID 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 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. Document AI API aktivieren
Bevor Sie Document AI verwenden können, müssen Sie die API aktivieren. Das ist über die gcloud
-Befehlszeile oder die Cloud Console möglich.
gcloud
CLI verwenden
- Wenn Sie nicht Cloud Shell verwenden, folgen Sie der Anleitung unter
gcloud
-Befehlszeile auf Ihrem lokalen Computer installieren. - Die APIs können mit den folgenden
gcloud
-Befehlen aktiviert werden.
gcloud services enable documentai.googleapis.com storage.googleapis.com
Auf dem Bildschirm sollte Folgendes zu sehen sein:
Operation "operations/..." finished successfully.
Cloud Console verwenden
Öffnen Sie die Cloud Console in Ihrem Browser.
- Suchen Sie oben in der Console in der Suchleiste nach „Document AI API“ und klicken Sie dann auf Aktivieren, um die API in Ihrem Google Cloud-Projekt zu verwenden
- Wiederholen Sie den vorherigen Schritt für die Google Cloud Storage API.
Jetzt können Sie Document AI verwenden!
4. Prozessor erstellen und testen
Sie müssen zuerst eine Instanz des Document OCR-Prozessors erstellen, der die Extraktion durchführt. Dies kann über die Cloud Console oder die Processor Management API erfolgen.
Cloud Console
- Rufen Sie in der Console die Document AI Platform – Übersicht auf.
- Klicken Sie auf Prozessoren ansehen und wählen Sie Dokument-OCR aus.
- Geben Sie ihr den Namen
codelab-ocr
oder einen Namen, an den Sie sich erinnern, und wählen Sie die nächstgelegene Region aus der Liste aus. - Klicken Sie auf Erstellen, um den Prozessor zu erstellen.
- Kopieren Sie Ihre Prozessor-ID. Sie müssen diesen später in Ihrem Code verwenden.
Sie können den Prozessor in der Konsole testen, indem Sie ein Dokument hochladen. Klicken Sie auf Testdokument hochladen und wählen Sie ein Dokument zum Parsen aus.
Du kannst unten die PDF-Datei herunterladen, die die ersten drei Seiten unseres Romans enthält.
Die Ausgabe sollte so aussehen:
Python-Clientbibliothek
In diesem Codelab erfahren Sie, wie Sie Document AI-Prozessoren mit der Python-Clientbibliothek verwalten:
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 Python-Clientbibliothek 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.
Öffnen Sie zuerst Cloud Shell und legen Sie 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"
Als Nächstes erteilen Sie Ihrem Dienstkonto Berechtigungen für den Zugriff auf Document AI und Cloud Storage in Ihrem Projekt.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/documentai.admin"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/storage.admin"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
Erstellen Sie als Nächstes Anmeldedaten, mit denen Ihr Python-Code sich als neues Dienstkonto anmeldet. Erstellen Sie diese Anmeldedaten und speichern Sie sie mit dem folgenden Befehl als JSON-Datei ~/key.json
:
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 Form der Authentifizierung 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. Clientbibliothek installieren
Installieren Sie die Python-Clientbibliotheken für Document AI, Cloud Storage und Document AI Toolbox:
pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage
pip3 install --upgrade google-cloud-documentai-toolbox
Auf dem Bildschirm sollte Folgendes zu sehen sein:
... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-2.15.0 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-2.9.0 . . Installing collected packages: google-cloud-documentai-toolbox Successfully installed google-cloud-documentai-toolbox-0.6.0a0
Jetzt können Sie die Document AI API verwenden.
7. Beispiel-PDF herunterladen
Wir haben ein Beispieldokument, das die ersten drei Seiten des Romans enthält.
Sie können die PDF-Datei über den folgenden Link herunterladen. Laden Sie diese dann in die Cloud Shell-Instanz hoch.
Sie können sie auch mithilfe von gsutil
aus unserem öffentlichen Google Cloud Storage-Bucket herunterladen.
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .
8. Anfrage zur Onlineverarbeitung stellen
In diesem Schritt verarbeiten Sie die ersten drei Seiten des Romans mithilfe der synchronen API zur Onlineverarbeitung. Diese Methode eignet sich am besten für kleinere, lokal gespeicherte Dokumente. In der vollständigen Prozessorliste finden Sie die maximalen Seiten und Dateigrößen für jeden Prozessortyp.
Erstellen Sie mit dem Cloud Shell-Editor oder einem Texteditor auf Ihrem lokalen Computer eine Datei mit dem Namen online_processing.py
und verwenden Sie den Code unten.
Ersetzen Sie YOUR_PROJECT_ID
, YOUR_PROJECT_LOCATION
, YOUR_PROCESSOR_ID
und FILE_PATH
durch die entsprechenden Werte für Ihre Umgebung.
online_processing.py
from google.api_core.client_options import ClientOptions
from google.cloud import documentai
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "YOUR_PROJECT_LOCATION" # Format is 'us' or 'eu'
PROCESSOR_ID = "YOUR_PROCESSOR_ID" # Create processor in Cloud Console
# The local file in your current working directory
FILE_PATH = "Winnie_the_Pooh_3_Pages.pdf"
# Refer to https://cloud.google.com/document-ai/docs/file-types
# for supported file types
MIME_TYPE = "application/pdf"
# Instantiates a client
docai_client = documentai.DocumentProcessorServiceClient(
client_options=ClientOptions(api_endpoint=f"{LOCATION}-documentai.googleapis.com")
)
# 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
RESOURCE_NAME = docai_client.processor_path(PROJECT_ID, LOCATION, PROCESSOR_ID)
# Read the file into memory
with open(FILE_PATH, "rb") as image:
image_content = image.read()
# Load Binary Data into Document AI RawDocument Object
raw_document = documentai.RawDocument(content=image_content, mime_type=MIME_TYPE)
# Configure the process request
request = documentai.ProcessRequest(name=RESOURCE_NAME, raw_document=raw_document)
# Use the Document AI client to process the sample form
result = docai_client.process_document(request=request)
document_object = result.document
print("Document processing complete.")
print(f"Text: {document_object.text}")
Führen Sie den Code aus, um den Text zu extrahieren und an der Konsole auszugeben.
Sie sollten die folgende Ausgabe sehen, wenn Sie unser Beispieldokument verwenden:
Document processing complete. Text: CHAPTER I IN WHICH We Are Introduced to Winnie-the-Pooh and Some Bees, and the Stories Begin Here is Edward Bear, coming downstairs now, bump, bump, bump, on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs, but sometimes he feels that there really is another way, if only he could stop bumping for a moment and think of it. And then he feels that perhaps there isn't. Anyhow, here he is at the bottom, and ready to be introduced to you. Winnie-the-Pooh. When I first heard his name, I said, just as you are going to say, "But I thought he was a boy?" "So did I," said Christopher Robin. "Then you can't call him Winnie?" "I don't." "But you said " ... Digitized by Google
9. Stapelverarbeitungsanfrage stellen
Nehmen wir nun an, Sie möchten den Text aus dem gesamten Roman lesen.
- Bei der Onlineverarbeitung gelten Beschränkungen für die Anzahl der Seiten und die Dateigröße, die gesendet werden können. Außerdem ist nur eine Dokumentdatei pro API-Aufruf zulässig.
- Die Stapelverarbeitung ermöglicht die Verarbeitung größerer/mehrerer Dateien in einer asynchronen Methode.
In diesem Schritt verarbeiten wir den gesamten mit der Document AI Batch Processing API und geben den Text in einen Google Cloud Storage-Bucket aus.
Bei der Batchverarbeitung werden lang andauernde Vorgänge verwendet, um Anfragen asynchron zu verwalten. Daher müssen wir die Anfrage auf eine andere Weise stellen und die Ausgabe abrufen, als dies bei der Onlineverarbeitung der Fall ist. Die Ausgabe erfolgt jedoch im selben Document
-Objektformat, unabhängig davon, ob die Online- oder Batchverarbeitung verwendet wird.
In diesem Schritt wird gezeigt, wie bestimmte Dokumente für die Verarbeitung durch Document AI bereitgestellt werden. In einem späteren Schritt wird gezeigt, wie ein ganzes Dokumentverzeichnis verarbeitet wird.
PDF in Cloud Storage hochladen
Die Methode batch_process_documents()
akzeptiert derzeit Dateien aus Google Cloud Storage. Unter documentai_v1.types.BatchProcessRequest
finden Sie weitere Informationen zur Objektstruktur.
In diesem Beispiel können Sie die Datei direkt aus unserem Beispiel-Bucket lesen.
Sie können die Datei auch mit gsutil
in Ihren eigenen Bucket kopieren...
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://YOUR_BUCKET_NAME/
Oder Sie laden über den Link unten die Beispieldatei des Romans herunter und laden Sie sie in Ihren eigenen Bucket hoch.
Außerdem benötigen Sie einen GCS-Bucket, um die Ausgabe der API zu speichern.
In der Cloud Storage-Dokumentation finden Sie Informationen zum Erstellen von Storage-Buckets.
batch_process_documents()
-Methode verwenden
Erstellen Sie eine Datei mit dem Namen batch_processing.py
und verwenden Sie den Code unten.
Ersetzen Sie YOUR_PROJECT_ID
, YOUR_PROCESSOR_LOCATION
, YOUR_PROCESSOR_ID
, YOUR_INPUT_URI
und YOUR_OUTPUT_URI
durch die entsprechenden Werte für Ihre Umgebung.
YOUR_INPUT_URI
muss direkt auf die PDF-Datei verweisen. Beispiel: gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf
.
batch_processing.py
"""
Makes a Batch Processing Request to Document AI
"""
import re
from google.api_core.client_options import ClientOptions
from google.api_core.exceptions import InternalServerError
from google.api_core.exceptions import RetryError
from google.cloud import documentai
from google.cloud import storage
# TODO(developer): Fill these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_PROCESSOR_LOCATION" # Format is "us" or "eu"
processor_id = "YOUR_PROCESSOR_ID" # Create processor before running sample
gcs_output_uri = "YOUR_OUTPUT_URI" # Must end with a trailing slash `/`. Format: gs://bucket/directory/subdirectory/
processor_version_id = (
"YOUR_PROCESSOR_VERSION_ID" # Optional. Example: pretrained-ocr-v1.0-2020-09-23
)
# TODO(developer): If `gcs_input_uri` is a single file, `mime_type` must be specified.
gcs_input_uri = "YOUR_INPUT_URI" # Format: `gs://bucket/directory/file.pdf` or `gs://bucket/directory/`
input_mime_type = "application/pdf"
field_mask = "text,entities,pages.pageNumber" # Optional. The fields to return in the Document object.
def batch_process_documents(
project_id: str,
location: str,
processor_id: str,
gcs_input_uri: str,
gcs_output_uri: str,
processor_version_id: str = None,
input_mime_type: str = None,
field_mask: str = None,
timeout: int = 400,
):
# You must set the api_endpoint if you use a location other than "us".
opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
client = documentai.DocumentProcessorServiceClient(client_options=opts)
if not gcs_input_uri.endswith("/") and "." in gcs_input_uri:
# Specify specific GCS URIs to process individual documents
gcs_document = documentai.GcsDocument(
gcs_uri=gcs_input_uri, mime_type=input_mime_type
)
# Load GCS Input URI into a List of document files
gcs_documents = documentai.GcsDocuments(documents=[gcs_document])
input_config = documentai.BatchDocumentsInputConfig(gcs_documents=gcs_documents)
else:
# Specify a GCS URI Prefix to process an entire directory
gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=gcs_input_uri)
input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix)
# Cloud Storage URI for the Output Directory
gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
gcs_uri=gcs_output_uri, field_mask=field_mask
)
# Where to write results
output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)
if processor_version_id:
# The full resource name of the processor version, e.g.:
# projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}
name = client.processor_version_path(
project_id, location, processor_id, processor_version_id
)
else:
# The full resource name of the processor, e.g.:
# projects/{project_id}/locations/{location}/processors/{processor_id}
name = client.processor_path(project_id, location, processor_id)
request = documentai.BatchProcessRequest(
name=name,
input_documents=input_config,
document_output_config=output_config,
)
# BatchProcess returns a Long Running Operation (LRO)
operation = client.batch_process_documents(request)
# Continually polls the operation until it is complete.
# This could take some time for larger files
# Format: projects/{project_id}/locations/{location}/operations/{operation_id}
try:
print(f"Waiting for operation {operation.operation.name} to complete...")
operation.result(timeout=timeout)
# Catch exception when operation doesn"t finish before timeout
except (RetryError, InternalServerError) as e:
print(e.message)
# NOTE: Can also use callbacks for asynchronous processing
#
# def my_callback(future):
# result = future.result()
#
# operation.add_done_callback(my_callback)
# Once the operation is complete,
# get output document information from operation metadata
metadata = documentai.BatchProcessMetadata(operation.metadata)
if metadata.state != documentai.BatchProcessMetadata.State.SUCCEEDED:
raise ValueError(f"Batch Process Failed: {metadata.state_message}")
storage_client = storage.Client()
print("Output files:")
# One process per Input Document
for process in list(metadata.individual_process_statuses):
# output_gcs_destination format: gs://BUCKET/PREFIX/OPERATION_NUMBER/INPUT_FILE_NUMBER/
# The Cloud Storage API requires the bucket name and URI prefix separately
matches = re.match(r"gs://(.*?)/(.*)", process.output_gcs_destination)
if not matches:
print(
"Could not parse output GCS destination:",
process.output_gcs_destination,
)
continue
output_bucket, output_prefix = matches.groups()
# Get List of Document Objects from the Output Bucket
output_blobs = storage_client.list_blobs(output_bucket, prefix=output_prefix)
# Document AI may output multiple JSON files per source file
for blob in output_blobs:
# Document AI should only output JSON files to GCS
if blob.content_type != "application/json":
print(
f"Skipping non-supported file: {blob.name} - Mimetype: {blob.content_type}"
)
continue
# Download JSON File as bytes object and convert to Document Object
print(f"Fetching {blob.name}")
document = documentai.Document.from_json(
blob.download_as_bytes(), ignore_unknown_fields=True
)
# For a full list of Document object attributes, please reference this page:
# https://cloud.google.com/python/docs/reference/documentai/latest/google.cloud.documentai_v1.types.Document
# Read the text recognition output from the processor
print("The document contains the following text:")
print(document.text)
if __name__ == "__main__":
batch_process_documents(
project_id=project_id,
location=location,
processor_id=processor_id,
gcs_input_uri=gcs_input_uri,
gcs_output_uri=gcs_output_uri,
input_mime_type=input_mime_type,
field_mask=field_mask,
)
Führen Sie den Code aus. Der vollständige neue Text sollte extrahiert und in Ihrer Konsole gedruckt werden.
Dies kann einige Zeit in Anspruch nehmen, da die Datei viel größer als im vorherigen Beispiel ist. (Oh, machen...)
Mit der Batch Processing API erhalten Sie jedoch eine Vorgangs-ID, mit der Sie die Ausgabe von GCS abrufen können, sobald die Aufgabe abgeschlossen ist.
Die Ausgabe sollte in etwa so aussehen:
Waiting for operation projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_NUMBER to complete... Document processing complete. Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-0.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-1.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-10.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-11.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-12.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-13.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-14.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-15.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-16.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-17.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-18.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-2.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-3.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-4.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-5.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-6.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-7.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-8.json Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh-9.json This is a reproduction of a library book that was digitized by Google as part of an ongoing effort to preserve the information in books and make it universally accessible. TM Google books https://books.google.com ..... He nodded and went out ... and in a moment I heard Winnie-the-Pooh -bump, bump, bump-go-ing up the stairs behind him. Digitized by Google
10. Stapelverarbeitungsanfrage für ein Verzeichnis stellen
Manchmal möchten Sie vielleicht ein ganzes Verzeichnis von Dokumenten verarbeiten, ohne jedes Dokument einzeln auflisten zu müssen. Die Methode batch_process_documents()
unterstützt die Eingabe einer Liste bestimmter Dokumente oder eines Verzeichnispfads.
In diesem Schritt wird gezeigt, wie ein vollständiges Verzeichnis der Dokumentdateien verarbeitet wird. Der größte Teil des Codes funktioniert genauso wie im vorherigen Schritt. Der einzige Unterschied ist der GCS-URI, der mit der BatchProcessRequest
gesendet wird.
Wir haben ein Verzeichnis in unserer Beispiel-Gruppe, das mehrere Seiten des Romans in separaten Dateien enthält.
gs://cloud-samples-data/documentai/codelabs/ocr/multi-document/
Sie können die Dateien direkt lesen oder in Ihren eigenen Cloud Storage-Bucket kopieren.
Führen Sie den Code aus dem vorherigen Schritt noch einmal aus und ersetzen Sie YOUR_INPUT_URI
durch ein Verzeichnis in Cloud Storage.
Führen Sie den Code aus. Sie sollten den extrahierten Text aus allen Dokumentdateien im Cloud Storage-Verzeichnis sehen.
Die Ausgabe sollte in etwa so aussehen:
Waiting for operation projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_NUMBER to complete... Document processing complete. Fetching docai-output/OPERATION_NUMBER/0/Winnie_the_Pooh_Page_0-0.json Fetching docai-output/OPERATION_NUMBER/1/Winnie_the_Pooh_Page_1-0.json Fetching docai-output/OPERATION_NUMBER/2/Winnie_the_Pooh_Page_10-0.json Fetching docai-output/OPERATION_NUMBER/3/Winnie_the_Pooh_Page_12-0.json Fetching docai-output/OPERATION_NUMBER/4/Winnie_the_Pooh_Page_16-0.json Fetching docai-output/OPERATION_NUMBER/5/Winnie_the_Pooh_Page_7-0.json Introduction (I₂ F YOU happen to have read another book about Christopher Robin, you may remember th CHAPTER I IN WHICH We Are Introduced to Winnie-the-Pooh and Some Bees, and the Stories Begin HERE is 10 WINNIE-THE-POOH "I wonder if you've got such a thing as a balloon about you?" "A balloon?" "Yes, 12 WINNIE-THE-POOH and you took your gun with you, just in case, as you always did, and Winnie-the-P 16 WINNIE-THE-POOH this song, and one bee sat down on the nose of the cloud for a moment, and then g WE ARE INTRODUCED 7 "Oh, help!" said Pooh, as he dropped ten feet on the branch below him. "If only
11. Batchverarbeitungsantwort mit Document AI Toolbox verarbeiten
Die Batchverarbeitung erfordert aufgrund der Einbindung von Cloud Storage eine Reihe von Schritten. Die Document
-Ausgabe kann auch „fragmentiert“ sein in mehrere .json
-Dateien aufteilen, je nach Größe des Eingabedokuments.
Das Python SDK Document AI Toolbox wurde entwickelt, um die Nachbearbeitung und andere häufige Aufgaben mit Document AI zu vereinfachen. Diese Bibliothek ist eine Ergänzung der Document AI-Clientbibliothek und kein Ersatz. Die vollständige Spezifikation finden Sie in der Referenzdokumentation.
In diesem Schritt wird gezeigt, wie Sie eine Batchverarbeitungsanfrage stellen und die Ausgabe mit der Document AI Toolbox abrufen.
batch_processing_toolbox.py
"""
Makes a Batch Processing Request to Document AI using Document AI Toolbox
"""
from google.api_core.client_options import ClientOptions
from google.cloud import documentai
from google.cloud import documentai_toolbox
# TODO(developer): Fill these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_PROCESSOR_LOCATION" # Format is "us" or "eu"
processor_id = "YOUR_PROCESSOR_ID" # Create processor before running sample
gcs_output_uri = "YOUR_OUTPUT_URI" # Must end with a trailing slash `/`. Format: gs://bucket/directory/subdirectory/
processor_version_id = (
"YOUR_PROCESSOR_VERSION_ID" # Optional. Example: pretrained-ocr-v1.0-2020-09-23
)
# TODO(developer): If `gcs_input_uri` is a single file, `mime_type` must be specified.
gcs_input_uri = "YOUR_INPUT_URI" # Format: `gs://bucket/directory/file.pdf`` or `gs://bucket/directory/``
input_mime_type = "application/pdf"
field_mask = "text,entities,pages.pageNumber" # Optional. The fields to return in the Document object.
def batch_process_toolbox(
project_id: str,
location: str,
processor_id: str,
gcs_input_uri: str,
gcs_output_uri: str,
processor_version_id: str = None,
input_mime_type: str = None,
field_mask: str = None,
):
# You must set the api_endpoint if you use a location other than "us".
opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
client = documentai.DocumentProcessorServiceClient(client_options=opts)
if not gcs_input_uri.endswith("/") and "." in gcs_input_uri:
# Specify specific GCS URIs to process individual documents
gcs_document = documentai.GcsDocument(
gcs_uri=gcs_input_uri, mime_type=input_mime_type
)
# Load GCS Input URI into a List of document files
gcs_documents = documentai.GcsDocuments(documents=[gcs_document])
input_config = documentai.BatchDocumentsInputConfig(gcs_documents=gcs_documents)
else:
# Specify a GCS URI Prefix to process an entire directory
gcs_prefix = documentai.GcsPrefix(gcs_uri_prefix=gcs_input_uri)
input_config = documentai.BatchDocumentsInputConfig(gcs_prefix=gcs_prefix)
# Cloud Storage URI for the Output Directory
gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig(
gcs_uri=gcs_output_uri, field_mask=field_mask
)
# Where to write results
output_config = documentai.DocumentOutputConfig(gcs_output_config=gcs_output_config)
if processor_version_id:
# The full resource name of the processor version, e.g.:
# projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}
name = client.processor_version_path(
project_id, location, processor_id, processor_version_id
)
else:
# The full resource name of the processor, e.g.:
# projects/{project_id}/locations/{location}/processors/{processor_id}
name = client.processor_path(project_id, location, processor_id)
request = documentai.BatchProcessRequest(
name=name,
input_documents=input_config,
document_output_config=output_config,
)
# BatchProcess returns a Long Running Operation (LRO)
operation = client.batch_process_documents(request)
# Operation Name Format: projects/{project_id}/locations/{location}/operations/{operation_id}
documents = documentai_toolbox.document.Document.from_batch_process_operation(
location=location, operation_name=operation.operation.name
)
for document in documents:
# Read the text recognition output from the processor
print("The document contains the following text:")
# Truncated at 100 characters for brevity
print(document.text[:100])
if __name__ == "__main__":
batch_process_toolbox(
project_id=project_id,
location=location,
processor_id=processor_id,
gcs_input_uri=gcs_input_uri,
gcs_output_uri=gcs_output_uri,
input_mime_type=input_mime_type,
field_mask=field_mask,
)
12. Glückwunsch
Sie haben mithilfe von Document AI mithilfe von Onlineverarbeitung, Batchverarbeitung und der Document AI Toolbox Text aus einem Roman extrahiert.
Wir empfehlen Ihnen, mit anderen Dokumenten zu experimentieren und sich die anderen Prozessoren anzusehen, die auf der Plattform verfügbar sind.
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
In diesen Codelabs erfahren Sie mehr über Document AI.
- Formularanalyse mit Document AI (Python)
- Spezialisierte Prozessoren mit Document AI (Python)
- Document AI-Prozessoren mit Python verwalten
- Document AI: Human in the Loop
Ressourcen
- The Future of Documents – YouTube-Playlist
- Dokumentation zu Document AI
- Document AI-Clientbibliothek für Python
- Document AI-Beispiel-Repository
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.