1. Présentation
Qu'est-ce que Document AI ?
Document AI est une solution de reconnaissance de documents qui exploite des données non structurées (par exemple, des documents, des e-mails, des factures, des formulaires, etc.) et en facilite la compréhension, l'analyse et l'utilisation. L'API fournit une structure via la classification de contenu, l'extraction d'entités, la recherche avancée, etc.
Dans cet atelier, vous allez apprendre à effectuer une reconnaissance optique des caractères à l'aide de l'API Document AI avec Python.
Nous allons utiliser un fichier PDF du roman classique "Winnie l'ourson" d'Alan Alexander Milne, qui est récemment entré dans le domaine public aux États-Unis. Ce fichier a été scanné et numérisé par Google Livres.
Points abordés
- Activer l'API Document AI
- Authentifier les requêtes API
- Installer la bibliothèque cliente pour Python
- Utiliser les API de traitement en ligne et par lot
- Analyser le texte d'un fichier PDF
Prérequis
- Un projet Google Cloud
- Un navigateur tel que Chrome ou Firefox
- Maîtrise de l'utilisation de Python (3.9+)
Enquête
Comment allez-vous utiliser ce tutoriel ?
Quel est votre niveau d'expérience avec Python ?
Quel est votre niveau d'expérience avec les services Google Cloud ?
<ph type="x-smartling-placeholder">2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud. (L'ID ci-dessus est déjà pris ; vous devez en trouver un autre). Vous devrez indiquer cet ID ultérieurement en tant que PROJECT_ID
.
- Vous devez ensuite activer la facturation dans la console Cloud pour pouvoir utiliser les ressources Google Cloud.
Veillez à suivre les instructions figurant dans la section "Effectuer un nettoyage". Cette section vous indique comment arrêter les ressources afin d'éviter qu'elles ne vous soient facturées au-delà de ce tutoriel. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que vous puissiez exécuter Google Cloud à distance depuis votre ordinateur portable, vous allez utiliser Google Cloud Shell, un environnement de ligne de commande exécuté dans le cloud, lors de cet atelier de programmation.
Activer Cloud Shell
- Dans la console Cloud, cliquez sur Activer Cloud Shell .
Si vous n'avez jamais démarré Cloud Shell auparavant, un écran intermédiaire s'affiche en dessous de la ligne de flottaison, décrivant de quoi il s'agit. Si tel est le cas, cliquez sur Continuer. Cet écran ne s'affiche qu'une seule fois. Voici à quoi il ressemble :
Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.
Cloud Shell vous permet d'accéder au terminal d'une machine virtuelle hébergée dans le cloud. La machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier de programmation dans un simple navigateur.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini avec votre ID de projet.
- Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
Résultat de la commande
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si vous obtenez un résultat différent, exécutez cette commande :
gcloud config set project <PROJECT_ID>
Résultat de la commande
Updated property [core/project].
3. Activer l'API Document AI
Avant de pouvoir utiliser Document AI, vous devez activer l'API. Pour ce faire, utilisez l'interface de ligne de commande gcloud
ou Cloud Console.
Utiliser la CLI gcloud
- Si vous n'utilisez pas Cloud Shell, suivez la procédure décrite dans Installer la CLI
gcloud
sur votre ordinateur local. - Les API peuvent être activées à l'aide des commandes
gcloud
suivantes.
gcloud services enable documentai.googleapis.com storage.googleapis.com
L'écran qui s'affiche devrait ressembler à ce qui suit :
Operation "operations/..." finished successfully.
Utiliser Cloud Console
Ouvrez la console Cloud dans votre navigateur.
- Dans la barre de recherche située en haut de la console, recherchez l'API Document AI, puis cliquez sur Activer pour utiliser l'API dans votre projet Google Cloud.
- Répétez l'étape précédente pour l'API Google Cloud Storage.
Vous pouvez maintenant utiliser Document AI.
4. Créer et tester un processeur
Vous devez d'abord créer une instance du processeur de reconnaissance optique des caractères dans les documents qui exécutera l'extraction. Pour ce faire, utilisez la console Cloud ou l'API de gestion des processeurs.
Console Cloud
- Dans la console, accédez à la page de présentation de la plate-forme Document AI.
- Cliquez sur Explorer les processeurs et sélectionnez Reconnaissance optique des caractères dans les documents
- Donnez-lui le nom
codelab-ocr
(ou un autre nom facile à mémoriser), puis sélectionnez la région la plus proche sur la liste. - Cliquez sur Créer pour créer le processeur.
- Copiez l'ID de votre processeur. Vous devrez l'utiliser ultérieurement dans votre code.
Vous pouvez tester votre processeur dans la console en important un document. Cliquez sur Importer un document de test, puis sélectionnez le document à analyser.
Vous pouvez télécharger le fichier PDF ci-dessous, qui contient les 3 premières pages de notre roman.
Votre résultat doit se présenter comme suit :
Bibliothèque cliente Python
Suivez l'atelier de programmation suivant pour apprendre à gérer les processeurs Document AI avec la bibliothèque cliente Python :
Gérer les processeurs Document AI avec Python (atelier de programmation)
5. Authentifier les requêtes API
Pour envoyer des requêtes à l'API Document AI, vous devez utiliser un compte de service. Ce compte de service appartient à votre projet. Il permet à la bibliothèque cliente Python d'envoyer des requêtes API. Comme tout autre compte utilisateur, un compte de service est représenté par une adresse e-mail. Dans cette section, vous allez utiliser le Cloud SDK pour créer un compte de service, puis créer les identifiants nécessaires pour vous authentifier en tant que compte de service.
Ouvrez d'abord Cloud Shell et définissez une variable d'environnement avec votre PROJECT_ID
que vous utiliserez tout au long de cet atelier de programmation :
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Créez ensuite un compte de service pour accéder à l'API Document AI à l'aide de la commande suivante :
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Accordez à votre compte de service l'autorisation d'accéder à Document AI et à Cloud Storage dans votre projet.
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"
Créez ensuite des identifiants permettant à votre code Python de se connecter avec ce nouveau compte de service, et enregistrez-les dans un fichier JSON ~/key.json
à l'aide de la commande suivante :
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Enfin, définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS, qui permet à la bibliothèque de rechercher vos identifiants. Pour en savoir plus sur ce type d'authentification, consultez ce guide. La variable d'environnement doit être définie sur le chemin d'accès complet au fichier JSON d'identifiants que vous avez créé, à l'aide de la commande suivante :
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Installer la bibliothèque cliente
Installez les bibliothèques clientes Python pour Document AI, Cloud Storage et la boîte à outils Document AI:
pip3 install --upgrade google-cloud-documentai
pip3 install --upgrade google-cloud-storage
pip3 install --upgrade google-cloud-documentai-toolbox
L'écran qui s'affiche devrait ressembler à ce qui suit :
... 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
Vous êtes maintenant prêt à utiliser l'API Document AI.
7. Télécharger l'exemple de PDF
Notre exemple de document contient les 3 premières pages du roman.
Vous pouvez télécharger le PDF à l'aide du lien suivant. Ensuite, importez-le dans l'instance cloudshell.
Vous pouvez également le télécharger depuis notre bucket public Google Cloud Storage en utilisant gsutil
.
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh_3_Pages.pdf .
8. Envoyer une requête de traitement en ligne
Au cours de cette étape, vous allez traiter les trois premières pages du roman en utilisant l'API (synchrone) de traitement en ligne. Cette méthode est particulièrement adaptée au documents peu volumineux stockés localement. Consultez la liste complète des processeurs pour voir le nombre de pages et la taille de fichier à ne pas dépasser pour chaque type de processeur.
Utilisez l'éditeur Cloud Shell ou un éditeur de texte sur votre ordinateur local pour créer un fichier nommé online_processing.py
et utilisez le code ci-dessous.
Remplacez YOUR_PROJECT_ID
, YOUR_PROJECT_LOCATION
, YOUR_PROCESSOR_ID
et le FILE_PATH
par les valeurs appropriées de votre environnement.
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}")
Exécutez le code, qui permet d'extraire le texte et de l'imprimer dans la console.
Si vous utilisez notre exemple de document, vous devriez obtenir le résultat suivant :
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. Envoyer une requête de traitement par lot
Supposons maintenant que vous souhaitiez lire le texte du roman dans son intégralité.
- Le traitement en ligne limite le nombre de pages et la taille des fichiers pouvant être envoyées. En outre, elle ne permet d'utiliser qu'un fichier de document par appel d'API.
- Le traitement par lot prend en charge des fichiers plus volumineux et en plus grand nombre grâce à une méthode asynchrone.
Au cours de cette étape, nous allons traiter l'intégralité du roman "Winnie l'ourson" avec l'API de traitement par lot Document AI et générer le texte dans un bucket Google Cloud Storage.
Le traitement par lot utilise des opérations de longue durée pour gérer les requêtes de manière asynchrone. Nous devons donc envoyer la requête et récupérer la sortie différemment qu'avec le traitement en ligne. Cependant, la sortie aura le même format d'objet Document
que nous utilisions le traitement en ligne ou par lot.
Cette étape indique comment fournir des documents spécifiques à Document AI pour qu'il les traite. Une étape ultérieure abordera comment traiter l'intégralité d'un répertoire de documents.
Importer un PDF dans Cloud Storage
La méthode batch_process_documents()
accepte actuellement les fichiers provenant de Google Cloud Storage. Pour en savoir plus sur la structure des objets, consultez la section documentai_v1.types.BatchProcessRequest
.
Dans cet exemple, vous pouvez lire le fichier directement depuis notre exemple de bucket.
Vous pouvez également copier le fichier dans votre bucket en utilisant gsutil
,
gsutil cp gs://cloud-samples-data/documentai/codelabs/ocr/Winnie_the_Pooh.pdf gs://YOUR_BUCKET_NAME/
ou télécharger l'exemple de fichier du roman à partir du lien ci-dessous et l'importer dans votre bucket.
Vous aurez également besoin d'un bucket GCS pour stocker la sortie de l'API.
Accédez à la documentation Cloud Storage pour apprendre à créer des buckets de stockage.
Utiliser la méthode batch_process_documents()
Créez un fichier appelé batch_processing.py
et utilisez le code ci-dessous.
Remplacez YOUR_PROJECT_ID
, YOUR_PROCESSOR_LOCATION
, YOUR_PROCESSOR_ID
, YOUR_INPUT_URI
et YOUR_OUTPUT_URI
par les valeurs appropriées pour votre environnement.
Assurez-vous que YOUR_INPUT_URI
pointe directement vers le fichier PDF, par exemple: 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,
)
Exécutez le code. Vous devriez obtenir le texte complet du roman, extrait et imprimé dans votre console.
Cela peut prendre un certain temps, car le fichier est beaucoup plus volumineux que l'exemple précédent. (D'accord...)
Toutefois, avec l'API de traitement par lot, vous recevrez un ID d'opération que vous pouvez utiliser pour obtenir la sortie de GCS une fois la tâche terminée.
Votre résultat doit se présenter comme suit :
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. Envoyer une requête de traitement par lot pour un répertoire
Dans certains cas, vous souhaiterez peut-être traiter l'intégralité d'un répertoire de documents, sans devoir indiquer chacun des documents. La méthode batch_process_documents()
prend en charge l'entrée d'une liste de documents spécifiques ou d'un chemin d'accès au répertoire.
Au cours de cette étape, vous apprendrez à traiter l'intégralité d'un répertoire de fichiers de document. La plupart du code fonctionne de la même manière que l'étape précédente. La seule différence est l'URI GCS envoyé avec BatchProcessRequest
.
Notre exemple de bucket contient un répertoire ayant plusieurs pages du roman dans des fichiers distincts.
gs://cloud-samples-data/documentai/codelabs/ocr/multi-document/
Vous pouvez lire les fichiers directement ou les copier dans votre propre bucket Cloud Storage.
Exécutez à nouveau le code de l'étape précédente, en remplaçant YOUR_INPUT_URI
par un répertoire dans Cloud Storage.
Exécutez le code. Vous devriez obtenir le texte extrait de tous les fichiers de document dans le répertoire Cloud Storage.
Votre résultat doit se présenter comme suit :
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. Gérer une réponse de traitement par lot avec la boîte à outils Document AI
Le traitement par lot nécessite un certain nombre d'étapes en raison de l'intégration à Cloud Storage. La sortie Document
peut également être "segmentée" en plusieurs fichiers .json
en fonction de la taille du document d'entrée.
Le SDK Python de la boîte à outils Document AI a été créé pour simplifier le post-traitement et d'autres tâches courantes avec Document AI. Cette bibliothèque est destinée à compléter la bibliothèque cliente Document AI, et non à la remplacer. Pour obtenir la spécification complète, consultez la documentation de référence.
Cette étape explique comment envoyer une requête de traitement par lot et récupérer le résultat à l'aide de la boîte à outils Document AI.
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. Félicitations
Vous avez utilisé Document AI pour extraire le texte d'un roman à l'aide du traitement en ligne, du traitement par lot et de la boîte à outils Document AI.
Nous vous encourageons à tester d'autres documents et à découvrir les autres processeurs disponibles sur la plate-forme.
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, procédez comme suit :
- Dans la console Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez votre projet, puis cliquez sur "Supprimer".
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur "Arrêter" pour supprimer le projet.
En savoir plus
Continuez à vous familiariser avec Document AI grâce aux ateliers de programmation suivants.
- Analyser des formulaires avec Document AI et Python
- Outils de traitement spécialisés avec Document AI et Python
- Gérer les processeurs Document AI avec Python
- Document AI : human-in-the-loop (avec intervention humaine)
Ressources
- The Future of Documents - YouTube Playlist
- Documentation Document AI
- Bibliothèque cliente Python pour Document AI
- Dépôt d'exemples Document AI
Licence
Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.