Qu'est-ce que Document AI ?
L'API Document AI est une solution de reconnaissance de documents qui exploite des données non structurées, telles que des documents et des e-mails, 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 ce tutoriel, vous allez vous concentrer sur l'utilisation de l'API Document AI avec Python. Ce tutoriel explique comment analyser un simple formulaire d'admission médicale.
Points abordés
- Activer l'API Document AI
- Authentifier les requêtes API
- Installer la bibliothèque cliente pour Python
- Analyser des données à partir d'un formulaire scanné
Prérequis
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 ?
Configuration de l'environnement au rythme de chacun
- Connectez-vous à Cloud Console, puis créez un projet ou réutilisez un projet existant. (Si vous n'avez pas encore de compte Gmail ou G Suite, 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. (Le nom 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 Cloud Console 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 gratuit 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 Cloud Console, 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 intègre 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 dans un simple navigateur ou sur votre Chromebook.
Une fois connecté à Cloud Shell, vous êtes en principe authentifié et le projet est 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].
Avant de pouvoir utiliser Document AI, vous devez activer l'API. Ouvrez Cloud Console dans votre navigateur.
- Cliquez sur le menu de navigation ☰ > API et services > Bibliothèque.
- Recherchez "API Document AI", puis cliquez sur Activer pour utiliser l'API dans votre projet Google Cloud.
Vous devez d'abord créer une instance du processeur de l'analyseur de formulaires à utiliser dans la plate-forme Document AI lors de ce tutoriel.
- Dans la console, accédez à la page de présentation de la plate-forme Document AI.
- Cliquez sur Create Processor (Créer un processeur), puis sélectionnez Form Parser (Analyseur de formulaires).
- Spécifiez un nom de processeur, puis sélectionnez votre région dans la liste.
- Cliquez sur Créer pour créer le processeur.
- Copiez votre ID de processeur. Vous devrez l'utiliser ultérieurement dans votre code.
(Facultatif) Vous pouvez tester votre processeur dans la console en important un document. Cliquez sur Upload Document (Importer un document), puis sélectionnez un formulaire à analyser. Vous pouvez télécharger et utiliser cet exemple de formulaire si vous n'en avez pas.
Votre résultat doit se présenter comme suit :
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 de Google 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 SDK Cloud pour créer un compte de service, puis créer les identifiants nécessaires pour vous authentifier en tant que compte de service.
Commencez par définir 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"
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 l'authentification de ce formulaire, 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"
Un exemple de formulaire à utiliser est stocké dans Google Cloud Storage. Exécutez la commande suivante pour le télécharger dans votre répertoire de travail.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Vérifiez que le fichier a bien été téléchargé dans Cloud Shell à l'aide de la commande suivante :
ls -ltr form.pdf
Installez la bibliothèque cliente :
pip3 install --upgrade google-cloud-documentai pip3 install --upgrade google-cloud-storage
Ce type de message s'affiche :
... Installing collected packages: google-cloud-documentai Successfully installed google-cloud-documentai-0.3.0 . . Installing collected packages: google-cloud-storage Successfully installed google-cloud-storage-1.35.0
Vous êtes maintenant prêt à utiliser l'API Document AI !
Démarrer Python en mode interactif
Dans ce tutoriel, vous allez utiliser un interpréteur Python interactif, appelé IPython. Démarrez une session en exécutant ipython
dans Cloud Shell. Cette commande exécute l'interpréteur Python dans une session interactive.
ipython
Ce type de message s'affiche :
Python 3.7.3 (default, Jul 25 2020, 13:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Au cours de cette étape, vous allez effectuer un appel de traitement de document à l'aide du point de terminaison synchrone. Pour traiter des volumes importants de documents à la fois, vous pouvez également utiliser l'API asynchrone. Pour en savoir plus sur l'utilisation des API de l'analyseur de formulaires, cliquez ici.
Copiez le code suivant dans votre session iPython :
project_id= 'YOUR_PROJECT_ID'
location = 'YOUR_PROJECT_LOCATION' # Format is 'us' or 'eu'
processor_id = 'YOUR_PROCESSOR_ID' # Create processor in Cloud Console
file_path = 'form.pdf' # The local file in your current working directory
from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage
def process_document(
project_id=project_id, location=location, processor_id=processor_id, file_path=file_path
):
# Instantiates a client
client = documentai.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
name = f"projects/{project_id}/locations/{location}/processors/{processor_id}"
with open(file_path, "rb") as image:
image_content = image.read()
# Read the file into memory
document = {"content": image_content, "mime_type": "application/pdf"}
# Configure the process request
request = {"name": name, "document": document}
# Use the Document AI client to process the sample form
result = client.process_document(request=request)
document = result.document
document_text = document.text
print("Document processing complete.")
print("Text: {}".format(document_text))
Exécutez votre code maintenant. Le texte extrait doit s'afficher dans votre console. Au cours des prochaines étapes, vous allez extraire les données structurées pouvant être plus facilement stockées dans des bases de données ou utilisées dans d'autres applications.
Appelez la fonction :
process_document()
Vous pouvez à présent extraire les paires clé/valeur du formulaire et les scores de confiance correspondants. L'objet de réponse Document contient une liste de pages du document d'entrée. Chaque objet page
contient une liste de champs de formulaire et leur emplacement dans le texte.
Le code suivant parcourt chaque page, puis extrait et imprime l'ensemble des clés, valeurs et scores de confiance.
Au bas de votre fonction processDocument(), collez le code ci-dessous :
document_pages = document.pages
for page in document_pages:
print("Page Number:{}".format(page.page_number))
for form_field in page.form_fields:
fieldName=get_text(form_field.field_name,document)
nameConfidence = round(form_field.field_name.confidence,4)
fieldValue = get_text(form_field.field_value,document)
valueConfidence = round(form_field.field_value.confidence,4)
print(fieldName+fieldValue +" (Confidence Scores: "+str(nameConfidence)+", "+str(valueConfidence)+")")
def get_text(doc_element: dict, document: dict):
"""
Document AI identifies form fields by their offsets
in document text. This function converts offsets
to text snippets.
"""
response = ""
# If a text segment spans several lines, it will
# be stored in different text segments.
for segment in doc_element.text_anchor.text_segments:
start_index = (
int(segment.start_index)
if segment in doc_element.text_anchor.text_segments
else 0
)
end_index = int(segment.end_index)
response += document.text[start_index:end_index]
return response
Exécutez maintenant votre code et appelez la fonction suivante :
process_document()
Si vous utilisez notre exemple de document, vous devriez obtenir le résultat suivant :
Document processing complete.
Page Number:1
Marital Status: Single (Confidence Scores: 1.0000, 1.0000)
DOB: 09/04/1986 (Confidence Scores: 0.9999, 0.9999)
City: Towalo (Confidence Scores: 0.9996, 0.9996)
Address: 24 Barney Lane (Confidence Scores: 0.9994, 0.9994)
Referred By: None (Confidence Scores: 0.9968, 0.9968)
Phone #: (906) 917-3486 (Confidence Scores: 0.9961, 0.9961)
State: NJ (Confidence Scores: 0.9960, 0.9960)
Emergency Contact Phone: (906) 334-8926 (Confidence Scores: 0.9924, 0.9924)
Name: Sally Walker (Confidence Scores: 0.9922, 0.9922)
Félicitations, vous avez bien extrait des données d'un formulaire manuscrit à l'aide de l'API Document AI. Nous vous invitons à tester d'autres images de formulaire.
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 Cloud Console, 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.