Document AI-Prozessoren mit Python verwalten

Document AI-Prozessoren mit Python verwalten

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Mai 13, 2025
account_circleVerfasst von Laurent Picard

1. Übersicht

eb068aac182b95ea.png

Was ist Document AI?

Document AI ist eine Plattform, mit der Sie Erkenntnisse aus Ihren Dokumenten gewinnen können. Im Kern bietet es eine wachsende Liste von Dokumentenprozessoren (je nach Funktion auch als Parser oder Splitter bezeichnet).

Es gibt zwei Möglichkeiten, Document AI-Prozessoren zu verwalten:

  • manuell über die Webkonsole
  • programmgesteuert mit der Document AI API.

Hier ist ein Beispiel für einen Screenshot, der die Prozessorliste sowohl aus der Webkonsole als auch aus Python-Code zeigt:

def2392beb1f6fee.png

In diesem Lab geht es darum, Document AI-Prozessoren programmatisch mit der Python-Clientbibliothek zu verwalten.

Was wird angezeigt?

  • Umgebung einrichten
  • Prozessortypen abrufen
  • Prozessoren erstellen
  • Projektprozessoren auflisten
  • Verwendung von Prozessoren
  • Prozessoren aktivieren/deaktivieren
  • Prozessorversionen verwalten
  • Prozessoren löschen

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser, z. B. Chrome oder Firefox
  • Python-Kenntnisse

Umfrage

Wie möchten Sie diese Anleitung verwenden?

Wie würden Sie Ihre Erfahrung mit Python bewerten?

Wie würden Sie Ihre Erfahrung mit den Google Cloud-Diensten bewerten?

2. Einrichtung und Anforderungen

Einrichtung der Umgebung im eigenen Tempo

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. In der Regel spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (normalerweise als PROJECT_ID gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Konto ausprobieren und prüfen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs ist kostenlos oder kostet nur sehr wenig. Wenn Sie die Ressourcen deaktivieren möchten, um weitere Kosten nach Abschluss dieser Anleitung zu vermeiden, können Sie die von Ihnen erstellten Ressourcen oder das Projekt löschen. Neuen Google Cloud-Nutzern steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.

Cloud Shell starten

Sie können Google Cloud zwar per Fernzugriff von Ihrem Laptop aus nutzen, in diesem Lab verwenden Sie jedoch Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 853e55310c205094.png.

3c1dabeca90e44e5.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung angezeigt. Klicken Sie in diesem Fall auf Weiter.

9c92662c6a846a5c.png

Die Bereitstellung und Verbindung mit Cloud Shell sollte nur wenige Minuten dauern.

9f0e51b578fecce5.png

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht alle Aufgaben in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID festgelegt 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`
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
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. Umgebung einrichten

Bevor Sie mit Document AI arbeiten können, müssen Sie die Document AI API aktivieren. Führen Sie dazu den folgenden Befehl in Cloud Shell aus:

gcloud services enable documentai.googleapis.com

Auf dem Bildschirm sollte Folgendes zu sehen sein:

Operation "operations/..." finished successfully.

Sie können Document AI jetzt verwenden.

Rufen Sie Ihr Basisverzeichnis auf:

cd ~

Erstellen Sie eine virtuelle Python-Umgebung, um die Abhängigkeiten zu isolieren:

virtualenv venv-docai

Aktivieren Sie die virtuelle Umgebung:

source venv-docai/bin/activate

Installieren Sie IPython, die Document AI-Clientbibliothek und python-tabulate, mit der Sie die Anfrageergebnisse in einer ansprechenden Formatierung ausgeben können:

pip install ipython google-cloud-documentai tabulate

Auf dem Bildschirm sollte Folgendes zu sehen sein:

...
Installing collected packages: ..., tabulate, ipython, google-cloud-documentai
Successfully installed ... google-cloud-documentai-2.15.0 ...

Jetzt können Sie die Document AI-Clientbibliothek verwenden.

Legen Sie die folgenden Umgebungsvariablen fest:

export PROJECT_ID=$(gcloud config get-value core/project)
# Choose "us" or "eu"
export API_LOCATION="us"

Ab jetzt sollten alle Schritte in derselben Sitzung ausgeführt werden.

Prüfen Sie, ob Ihre Umgebungsvariablen richtig definiert sind:

echo $PROJECT_ID
echo $API_LOCATION

In den nächsten Schritten verwenden Sie den interaktiven Python-Interpreter IPython, den Sie gerade installiert haben. Starten Sie eine Sitzung, indem Sie in Cloud Shell ipython ausführen:

ipython

Auf dem Bildschirm sollte Folgendes zu sehen sein:

Python 3.12.3 (main, Feb  4 2025, 14:48:35) [GCC 13.3.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 9.1.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

import os
from typing import Iterator, MutableSequence, Optional, Sequence, Tuple

import google.cloud.documentai_v1 as docai
from tabulate import tabulate

PROJECT_ID = os.getenv("PROJECT_ID", "")
API_LOCATION = os.getenv("API_LOCATION", "")

assert PROJECT_ID, "PROJECT_ID is undefined"
assert API_LOCATION in ("us", "eu"), "API_LOCATION is incorrect"

# Test processors
document_ocr_display_name = "document-ocr"
form_parser_display_name = "form-parser"

test_processor_display_names_and_types = (
   
(document_ocr_display_name, "OCR_PROCESSOR"),
   
(form_parser_display_name, "FORM_PARSER_PROCESSOR"),
)

def get_client() -> docai.DocumentProcessorServiceClient:
   
client_options = {"api_endpoint": f"{API_LOCATION}-documentai.googleapis.com"}
   
return docai.DocumentProcessorServiceClient(client_options=client_options)

def get_parent(client: docai.DocumentProcessorServiceClient) -> str:
   
return client.common_location_path(PROJECT_ID, API_LOCATION)

def get_client_and_parent() -> Tuple[docai.DocumentProcessorServiceClient, str]:
   
client = get_client()
   
parent = get_parent(client)
   
return client, parent
   

Sie können jetzt Ihre erste Anfrage senden und die Prozessortypen abrufen.

4. Prozessortypen abrufen

Bevor Sie im nächsten Schritt einen Prozessor erstellen, rufen Sie die verfügbaren Prozessortypen ab. Sie können diese Liste mit fetch_processor_types abrufen.

Fügen Sie Ihrer IPython-Sitzung die folgenden Funktionen hinzu:

def fetch_processor_types() -> MutableSequence[docai.ProcessorType]:
   
client, parent = get_client_and_parent()
   
response = client.fetch_processor_types(parent=parent)

   
return response.processor_types

def print_processor_types(processor_types: Sequence[docai.ProcessorType]):
   
def sort_key(pt):
       
return (not pt.allow_creation, pt.category, pt.type_)

   
sorted_processor_types = sorted(processor_types, key=sort_key)
   
data = processor_type_tabular_data(sorted_processor_types)
   
headers = next(data)
   
colalign = next(data)

   
print(tabulate(data, headers, tablefmt="pretty", colalign=colalign))
   
print(f"→ Processor types: {len(sorted_processor_types)}")

def processor_type_tabular_data(
   
processor_types: Sequence[docai.ProcessorType],
) -> Iterator[Tuple[str, str, str, str]]:
   
def locations(pt):
       
return ", ".join(sorted(loc.location_id for loc in pt.available_locations))

   
yield ("type", "category", "allow_creation", "locations")
   
yield ("left", "left", "left", "left")
   
if not processor_types:
       
yield ("-", "-", "-", "-")
       
return
   
for pt in processor_types:
       
yield (pt.type_, pt.category, f"{pt.allow_creation}", locations(pt))
       

Listen Sie die Prozessortypen auf:

processor_types = fetch_processor_types()
print_processor_types(processor_types)

Die Ausgabe sollte in etwa so aussehen:

+--------------------------------------+-------------+----------------+-----------+
| type                                 | category    | allow_creation | locations |
+--------------------------------------+-------------+----------------+-----------+
| CUSTOM_CLASSIFICATION_PROCESSOR      | CUSTOM      | True           | eu, us    |
...
| FORM_PARSER_PROCESSOR                | GENERAL     | True           | eu, us    |
| LAYOUT_PARSER_PROCESSOR              | GENERAL     | True           | eu, us    |
| OCR_PROCESSOR                        | GENERAL     | True           | eu, us    |
| BANK_STATEMENT_PROCESSOR             | SPECIALIZED | True           | eu, us    |
| EXPENSE_PROCESSOR                    | SPECIALIZED | True           | eu, us    |
...
+--------------------------------------+-------------+----------------+-----------+
→ Processor types: 19

Sie haben jetzt alle Informationen, die Sie für den nächsten Schritt zum Erstellen von Prozessoren benötigen.

5. Prozessoren erstellen

Rufen Sie zum Erstellen eines Prozessors create_processor mit einem Anzeigenamen und einem Prozessortyp auf.

Fügen Sie die folgende Funktion hinzu:

def create_processor(display_name: str, type: str) -> docai.Processor:
   
client, parent = get_client_and_parent()
   
processor = docai.Processor(display_name=display_name, type_=type)

   
return client.create_processor(parent=parent, processor=processor)
   

Erstellen Sie die Testprozessoren:

separator = "=" * 80
for display_name, type in test_processor_display_names_and_types:
   
print(separator)
   
print(f"Creating {display_name} ({type})...")
   
try:
       
create_processor(display_name, type)
   
except Exception as err:
       
print(err)
print(separator)
print("Done")

Sie sollten Folgendes sehen:

================================================================================
Creating document-ocr (OCR_PROCESSOR)...
================================================================================
Creating form-parser (FORM_PARSER_PROCESSOR)...
================================================================================
Done

Sie haben neue Prozessoren erstellt.

Als Nächstes erfahren Sie, wie Sie die Prozessoren auflisten.

6. Projektprozessoren auflisten

list_processors gibt die Liste aller Prozessoren zurück, die zu Ihrem Projekt gehören.

Fügen Sie die folgenden Funktionen hinzu:

def list_processors() -> MutableSequence[docai.Processor]:
   
client, parent = get_client_and_parent()
   
response = client.list_processors(parent=parent)

   
return list(response.processors)

def print_processors(processors: Optional[Sequence[docai.Processor]] = None):
   
def sort_key(processor):
       
return processor.display_name

   
if processors is None:
       
processors = list_processors()
   
sorted_processors = sorted(processors, key=sort_key)
   
data = processor_tabular_data(sorted_processors)
   
headers = next(data)
   
colalign = next(data)

   
print(tabulate(data, headers, tablefmt="pretty", colalign=colalign))
   
print(f"→ Processors: {len(sorted_processors)}")

def processor_tabular_data(
   
processors: Sequence[docai.Processor],
) -> Iterator[Tuple[str, str, str]]:
   
yield ("display_name", "type", "state")
   
yield ("left", "left", "left")
   
if not processors:
       
yield ("-", "-", "-")
       
return
   
for processor in processors:
       
yield (processor.display_name, processor.type_, processor.state.name)
       

Rufen Sie die Funktionen auf:

processors = list_processors()
print_processors(processors)

Sie sollten Folgendes sehen:

+--------------+-----------------------+---------+
| display_name | type                  | state   |
+--------------+-----------------------+---------+
| document-ocr | OCR_PROCESSOR         | ENABLED |
| form-parser  | FORM_PARSER_PROCESSOR | ENABLED |
+--------------+-----------------------+---------+
→ Processors: 2

Wenn Sie einen Zahlungsabwickler anhand seines Anzeigenamens abrufen möchten, fügen Sie die folgende Funktion hinzu:

def get_processor(
   
display_name: str,
   
processors: Optional[Sequence[docai.Processor]] = None,
) -> Optional[docai.Processor]:
   
if processors is None:
       
processors = list_processors()
   
for processor in processors:
       
if processor.display_name == display_name:
           
return processor
   
return None
   

Die Funktion testen:

processor = get_processor(document_ocr_display_name, processors)

assert processor is not None
print(processor)

Auf dem Bildschirm sollte Folgendes zu sehen sein:

name: "projects/PROJECT_NUM/locations/LOCATION/processors/PROCESSOR_ID"
type_: "OCR_PROCESSOR"
display_name: "document-ocr"
state: ENABLED
...

Jetzt wissen Sie, wie Sie Ihre Projektprozessoren auflisten und anhand ihrer Anzeigenamen abrufen. Als Nächstes erfahren Sie, wie Sie einen Prozessor verwenden.

7. Prozessoren verwenden

Dokumente können auf zwei Arten verarbeitet werden:

  • Synchron: Rufen Sie process_document auf, um ein einzelnes Dokument zu analysieren und die Ergebnisse direkt zu verwenden.
  • Asynchron: Rufen Sie batch_process_documents auf, um eine Batchverarbeitung für mehrere oder große Dokumente zu starten.

Ihr Testdokument ( PDF) ist ein gescannter Fragebogen mit handschriftlichen Antworten. Laden Sie sie direkt aus Ihrer IPython-Sitzung in Ihr Arbeitsverzeichnis herunter:

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

Prüfen Sie den Inhalt Ihres Arbeitsverzeichnisses:

!ls

Sie sollten Folgendes haben:

...  form.pdf  ...  venv-docai  ...

Sie können die synchrone process_document-Methode verwenden, um eine lokale Datei zu analysieren. Fügen Sie die folgende Funktion hinzu:

def process_file(
   
processor: docai.Processor,
   
file_path: str,
   
mime_type: str,
) -> docai.Document:
   
client = get_client()
   
with open(file_path, "rb") as document_file:
       
document_content = document_file.read()
   
document = docai.RawDocument(content=document_content, mime_type=mime_type)
   
request = docai.ProcessRequest(raw_document=document, name=processor.name)

   
response = client.process_document(request)

   
return response.document
   

Da es sich bei Ihrem Dokument um einen Fragebogen handelt, wählen Sie den Formular-Parser aus. Neben dem Extrahieren von Text (gedruckt und handgeschrieben), was alle Prozessoren tun, erkennt dieser allgemeine Prozessor auch Formularfelder.

Dokument analysieren:

processor = get_processor(form_parser_display_name)
assert processor is not None

file_path = "./form.pdf"
mime_type = "application/pdf"

document = process_file(processor, file_path, mime_type)

Alle Prozessoren führen eine erste optische Zeichenerkennung (OCR) auf dem Dokument aus. Überprüfen Sie den durch die OCR-Karte/-Ticket erkannten Text:

document.text.split("\n")

Die Ausgabe sollte etwa so aussehen:

['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.',
 'Date:',
 '9/14/19',
 'Name:',
 'Sally Walker',
 'DOB: 09/04/1986',
 'Address: 24 Barney Lane',
 'City: Towaco',
 'State: NJ Zip: 07082',
 'Email: Sally, walker@cmail.com',
 '_Phone #: (906) 917-3486',
 'Gender: F',
 'Marital Status:',
  ...
]

Fügen Sie die folgenden Funktionen hinzu, um die erkannten Formularfelder auszugeben:

def print_form_fields(document: docai.Document):
   
sorted_form_fields = form_fields_sorted_by_ocr_order(document)
   
data = form_field_tabular_data(sorted_form_fields, document)
   
headers = next(data)
   
colalign = next(data)

   
print(tabulate(data, headers, tablefmt="pretty", colalign=colalign))
   
print(f"→ Form fields: {len(sorted_form_fields)}")

def form_field_tabular_data(
   
form_fields: Sequence[docai.Document.Page.FormField],
   
document: docai.Document,
) -> Iterator[Tuple[str, str, str]]:
   
yield ("name", "value", "confidence")
   
yield ("right", "left", "right")
   
if not form_fields:
       
yield ("-", "-", "-")
       
return
   
for form_field in form_fields:
       
name_layout = form_field.field_name
       
value_layout = form_field.field_value
       
name = text_from_layout(name_layout, document)
       
value = text_from_layout(value_layout, document)
       
confidence = value_layout.confidence
       
yield (name, value, f"{confidence:.1%}")
       

Fügen Sie auch diese Dienstfunktionen hinzu:

def form_fields_sorted_by_ocr_order(
   
document: docai.Document,
) -> MutableSequence[docai.Document.Page.FormField]:
   
def sort_key(form_field):
       
# Sort according to the field name detected position
       
text_anchor = form_field.field_name.text_anchor
       
return text_anchor.text_segments[0].start_index if text_anchor else 0

   
fields = (field for page in document.pages for field in page.form_fields)

   
return sorted(fields, key=sort_key)


def text_from_layout(
   
layout: docai.Document.Page.Layout,
   
document: docai.Document,
) -> str:
   
full_text = document.text
   
segs = layout.text_anchor.text_segments
   
text = "".join(full_text[seg.start_index : seg.end_index] for seg in segs)
   
if text.endswith("\n"):
       
text = text[:-1]

   
return text
   

Drucken Sie die erkannten Formularfelder:

print_form_fields(document)

Sie sollten einen Ausdruck erhalten, der in etwa so aussieht:

+-----------------+-------------------------+------------+
|            name | value                   | confidence |
+-----------------+-------------------------+------------+
|           Date: | 9/14/19                 |      83.0% |
|           Name: | Sally Walker            |      87.3% |
|            DOB: | 09/04/1986              |      88.5% |
|        Address: | 24 Barney Lane          |      82.4% |
|           City: | Towaco                  |      90.0% |
|          State: | NJ                      |      89.4% |
|            Zip: | 07082                   |      91.4% |
|          Email: | Sally, walker@cmail.com |      79.7% |
|       _Phone #: | walker@cmail.com        |      93.2% |
|                 | (906                    |            |
|         Gender: | F                       |      88.2% |
| Marital Status: | Single                  |      85.2% |
|     Occupation: | Software Engineer       |      81.5% |
|    Referred By: | None                    |      76.9% |
...
+-----------------+-------------------------+------------+
→ Form fields: 17

Prüfen Sie die erkannten Feldnamen und -werte ( PDF). Hier ist die obere Hälfte des Fragebogens:

db1a2be576a5576f.png

Sie haben ein Formular analysiert, das sowohl gedruckten als auch handgeschriebenen Text enthält. Außerdem haben Sie die Felder mit hoher Wahrscheinlichkeit erkannt. Ihre Pixel wurden in strukturierte Daten umgewandelt.

8. Prozessoren aktivieren und deaktivieren

Mit disable_processor und enable_processor können Sie festlegen, ob ein Prozessor verwendet werden kann.

Fügen Sie die folgenden Funktionen hinzu:

def update_processor_state(processor: docai.Processor, enable_processor: bool):
   
client = get_client()
   
if enable_processor:
       
request = docai.EnableProcessorRequest(name=processor.name)
       
operation = client.enable_processor(request)
   
else:
       
request = docai.DisableProcessorRequest(name=processor.name)
       
operation = client.disable_processor(request)
   
operation.result()  # Wait for operation to complete

def enable_processor(processor: docai.Processor):
   
update_processor_state(processor, True)

def disable_processor(processor: docai.Processor):
   
update_processor_state(processor, False)
   

Deaktivieren Sie den Formularparser-Prozessor und prüfen Sie den Status Ihrer Prozessoren:

processor = get_processor(form_parser_display_name)
assert processor is not None

disable_processor(processor)
print_processors()

Sie sollten Folgendes sehen:

+--------------+-----------------------+----------+
| display_name | type                  | state    |
+--------------+-----------------------+----------+
| document-ocr | OCR_PROCESSOR         | ENABLED  |
| form-parser  | FORM_PARSER_PROCESSOR | DISABLED |
+--------------+-----------------------+----------+
→ Processors: 2

Aktivieren Sie den Formularparser-Prozessor wieder:

enable_processor(processor)
print_processors()

Sie sollten Folgendes sehen:

+--------------+-----------------------+---------+
| display_name | type                  | state   |
+--------------+-----------------------+---------+
| document-ocr | OCR_PROCESSOR         | ENABLED |
| form-parser  | FORM_PARSER_PROCESSOR | ENABLED |
+--------------+-----------------------+---------+
→ Processors: 2

Als Nächstes erfahren Sie, wie Sie Prozessorversionen verwalten.

9. Prozessorversionen verwalten

Prozessoren können in mehreren Versionen verfügbar sein. Weitere Informationen zur Verwendung der Methoden list_processor_versions und set_default_processor_version

Fügen Sie die folgenden Funktionen hinzu:

def list_processor_versions(
   
processor: docai.Processor,
) -> MutableSequence[docai.ProcessorVersion]:
   
client = get_client()
   
response = client.list_processor_versions(parent=processor.name)

   
return list(response)


def get_sorted_processor_versions(
   
processor: docai.Processor,
) -> MutableSequence[docai.ProcessorVersion]:
   
def sort_key(processor_version: docai.ProcessorVersion):
       
return processor_version.name

   
versions = list_processor_versions(processor)

   
return sorted(versions, key=sort_key)


def print_processor_versions(processor: docai.Processor):
   
versions = get_sorted_processor_versions(processor)
   
default_version_name = processor.default_processor_version
   
data = processor_versions_tabular_data(versions, default_version_name)
   
headers = next(data)
   
colalign = next(data)

   
print(tabulate(data, headers, tablefmt="pretty", colalign=colalign))
   
print(f"→ Processor versions: {len(versions)}")


def processor_versions_tabular_data(
   
versions: Sequence[docai.ProcessorVersion],
   
default_version_name: str,
) -> Iterator[Tuple[str, str, str]]:
   
yield ("version", "display name", "default")
   
yield ("left", "left", "left")
   
if not versions:
       
yield ("-", "-", "-")
       
return
   
for version in versions:
       
mapping = docai.DocumentProcessorServiceClient.parse_processor_version_path(
           
version.name
       
)
       
processor_version = mapping["processor_version"]
       
is_default = "Y" if version.name == default_version_name else ""
       
yield (processor_version, version.display_name, is_default)
       

Listen Sie die verfügbaren Versionen für den OCR-Prozessor auf:

processor = get_processor(document_ocr_display_name)
assert processor is not None
print_processor_versions(processor)

Sie erhalten die folgenden Prozessorversionen:

+--------------------------------+--------------------------+---------+
| version                        | display name             | default |
+--------------------------------+--------------------------+---------+
| pretrained-ocr-v1.0-2020-09-23 | Google Stable            |         |
| pretrained-ocr-v1.1-2022-09-12 | Google Release Candidate |         |
| pretrained-ocr-v1.2-2022-11-10 | Google Release Candidate |         |
| pretrained-ocr-v2.0-2023-06-02 | Google Stable            | Y       |
| pretrained-ocr-v2.1-2024-08-07 | Google Release Candidate |         |
+--------------------------------+--------------------------+---------+
→ Processor versions: 5

Fügen Sie nun eine Funktion hinzu, um die Standardversion des Prozessors zu ändern:

def set_default_processor_version(processor: docai.Processor, version_name: str):
   
client = get_client()
   
request = docai.SetDefaultProcessorVersionRequest(
       
processor=processor.name,
       
default_processor_version=version_name,
   
)

   
operation = client.set_default_processor_version(request)
   
operation.result()  # Wait for operation to complete
   

Wechseln Sie zur neuesten Prozessorversion:

processor = get_processor(document_ocr_display_name)
assert processor is not None
versions = get_sorted_processor_versions(processor)

new_version = versions[-1]  # Latest version
set_default_processor_version(processor, new_version.name)

# Update the processor info
processor = get_processor(document_ocr_display_name)
assert processor is not None
print_processor_versions(processor)

Sie erhalten die Konfiguration der neuen Version:

+--------------------------------+--------------------------+---------+
| version                        | display name             | default |
+--------------------------------+--------------------------+---------+
| pretrained-ocr-v1.0-2020-09-23 | Google Stable            |         |
| pretrained-ocr-v1.1-2022-09-12 | Google Release Candidate |         |
| pretrained-ocr-v1.2-2022-11-10 | Google Release Candidate |         |
| pretrained-ocr-v2.0-2023-06-02 | Google Stable            |         |
| pretrained-ocr-v2.1-2024-08-07 | Google Release Candidate | Y       |
+--------------------------------+--------------------------+---------+
→ Processor versions: 5

Als Nächstes folgt die ultimative Methode zur Prozessorverwaltung: das Löschen.

10. Prozessoren löschen

Sehen Sie sich abschließend an, wie Sie die Methode delete_processor verwenden.

Fügen Sie die folgende Funktion hinzu:

def delete_processor(processor: docai.Processor):
   
client = get_client()
   
operation = client.delete_processor(name=processor.name)
   
operation.result()  # Wait for operation to complete
   

So löschen Sie Testprozessoren:

processors_to_delete = [dn for dn, _ in test_processor_display_names_and_types]
print("Deleting processors...")

for processor in list_processors():
   
if processor.display_name not in processors_to_delete:
       
continue
   
print(f"  Deleting {processor.display_name}...")
   
delete_processor(processor)

print("Done\n")
print_processors()

Sie sollten Folgendes sehen:

Deleting processors...
  Deleting form-parser...
  Deleting document-ocr...
Done

+--------------+------+-------+
| display_name | type | state |
+--------------+------+-------+
| -            | -    | -     |
+--------------+------+-------+
→ Processors: 0

Sie haben alle Methoden zur Prozessorverwaltung kennengelernt. Sie sind fast fertig…

11. Glückwunsch!

eb068aac182b95ea.png

Sie haben gelernt, wie Sie Document AI-Prozessoren mit Python verwalten.

Bereinigen

So bereinigen Sie Ihre Entwicklungsumgebung in Cloud Shell:

  • Wenn Sie sich noch in der IPython-Sitzung befinden, kehren Sie zur Shell zurück: exit
  • Beenden Sie die Verwendung der virtuellen Python-Umgebung: deactivate
  • Löschen Sie den Ordner der virtuellen Umgebung: cd ~ ; rm -rf ./venv-docai.

So löschen Sie Ihr Google Cloud-Projekt in Cloud Shell:

  • Rufen Sie Ihre aktuelle Projekt-ID ab: PROJECT_ID=$(gcloud config get-value core/project)
  • Prüfen Sie, ob es sich dabei um das Projekt handelt, das Sie löschen möchten: echo $PROJECT_ID
  • Projekt löschen: gcloud projects delete $PROJECT_ID

Weitere Informationen

Lizenz

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