Tutoriel : Utiliser Azure Functions et Python pour traiter les documents stockés
Vous pouvez utiliser Azure AI Intelligence documentaire dans le cadre d’un pipeline de traitement de données automatisé créé avec Azure Functions. Ce guide vous montre comment utiliser Azure Functions pour traiter les documents chargés dans un conteneur Stockage Blob Azure. Ce workflow extrait des données de tableau depuis des documents stockés à l’aide du modèle de disposition d’Azure AI Intelligence documentaire, puis enregistre les données de tableau dans un fichier.csv au sein d’Azure. Vous pouvez ensuite afficher les données à l’aide de Microsoft Power BI (non abordé ici).
Dans ce tutoriel, vous allez apprendre à :
- Création d’un compte Azure Storage.
- Créez un projet Azure Functions.
- Extraire des données de disposition à partir de formulaires chargés.
- Charger des données de disposition extraites vers le service Stockage Azure.
Prérequis
Abonnement Azure - Créez-en un gratuitement
Une ressource Azure AI Intelligence documentaire. Une fois que vous avez votre abonnement Azure, créez une ressource Azure AI Intelligence documentaire dans le Portail Azure pour obtenir votre clé et votre point de terminaison. Vous pouvez utiliser le niveau tarifaire Gratuit (
F0
) pour tester le service, puis passer par la suite à un niveau payant pour la production.Après le déploiement de votre ressource, sélectionnez Accéder à la ressource. Vous avez besoin de la clé et du point de terminaison de la ressource que vous créez pour connecter votre application à l’API Azure AI Intelligence documentaire. Vous collerez votre clé et votre point de terminaison dans le code ci-dessous plus loin dans le tutoriel :
Python 3.6.x, 3.7.x, 3.8.x ou 3.9.x (Python 3.10.x n’est pas pris en charge pour ce projet).
La dernière version de Visual Studio Code (VS Code) avec les extensions suivantes installées :
Extension Azure Functions. Une fois l’extension installée, vous devez voir le logo Azure dans le volet de navigation de gauche.
Azure Functions Core Tools version 3.x (la version 4.x n’est pas prise en charge pour ce projet).
Extension Python pour Visual Studio Code. Pour plus d’informations, consultez Bien démarrer avec Python dans VS Code.
Explorateur Stockage Azure installé.
Un document PDF local à analyser. Vous pouvez utiliser notre exemple de document pdf pour ce projet.
Créer un compte de stockage Azure
Créez un compte Stockage Azure v2 universel dans le portail Azure. Si vous ignorez comment créer un compte de stockage Azure avec un conteneur de stockage, suivez les démarrages rapides suivants :
- Créer un compte de stockage. Lorsque vous créez votre compte de stockage, sélectionnez les performances Standard dans le champ Détails de l’instance>Performance.
- Créer un conteneur. Lors de la création de votre conteneur, définissez le champ Niveau d’accès public sur Conteneur (accès en lecture anonyme pour les conteneurs et les fichiers) dans la fenêtre Nouveau conteneur.
Dans le volet gauche, sélectionnez l’onglet Partage des ressources Cross-Origin (CORS), puis supprimez la stratégie CORS existante, le cas échéant.
Une fois votre compte de stockage déployé, créez deux conteneurs Stockage Blob vides, nommés input (entrée) et output (sortie).
Créer un projet Azure Functions
Créez un dossier nommé functions-app destiné à contenir le projet, puis choisissez Sélectionner.
Ouvrez Visual Studio Code, puis la palette de commandes (Ctrl+Maj+P). Recherchez et choisissez Python:Select Interpreter (Python:Sélectionner l’interpréteur) → choisissez un interpréteur Python installé correspondant à la version 3.6.x, 3.7.x, 3.8.x ou 3.9.x. Ce choix permet d’ajouter le chemin de l’interpréteur Python que vous avez sélectionné pour votre projet.
Sélectionnez le logo Azure dans le volet de navigation de gauche.
Vous voyez vos ressources Azure existantes dans la vue Ressources.
Sélectionnez l’abonnement Azure que vous utilisez pour ce projet. Vous devez voir ci-dessous l’application Azure Functions.
Sélectionnez la section Espace de travail (local) située sous les ressources listées. Sélectionnez le symbole du signe plus, puis choisissez le bouton Créer une fonction.
Quand vous y êtes invité, choisissez Créer un projet, puis accédez au répertoire function-app. Choisissez Sélectionner.
Vous êtes invité à configurer plusieurs paramètres :
Sélectionnez un langage → choisissez Python.
Sélectionnez un interpréteur Python pour créer un environnement virtuel → sélectionnez l’interpréteur que vous avez défini par défaut.
Sélectionnez un modèle → choisissez Déclencheur Stockage Blob Azure, puis donnez un nom au déclencheur, ou acceptez le nom par défaut. Appuyez sur Entrée pour confirmer.
Sélectionnez le paramètre → choisissez ➕Créer un paramètre d’application local dans le menu déroulant.
Sélectionnez l’abonnement → choisissez votre abonnement Azure avec le compte de stockage que vous avez créé → sélectionnez votre compte de stockage → sélectionnez ensuite le nom du conteneur d’entrée du stockage (dans le cas présent,
input/{name}
). Appuyez sur Entrée pour confirmer.Sélectionnez la façon dont vous voulez ouvrir votre projet → choisissez Ouvrir le projet dans la fenêtre actuelle dans le menu déroulant.
Une fois que vous avez effectué ces étapes, VS Code ajoute un nouveau projet Azure Functions avec un script Python __init__.py. Ce script se déclenche quand un fichier est chargé dans le conteneur de stockage input :
import logging
import azure.functions as func
def main(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {myblob.name}\n"
f"Blob Size: {myblob.length} bytes")
Tester la fonction
Appuyez sur F5 pour exécuter la fonction de base. VS Code vous invite à sélectionner un compte de stockage destiné à servir d’interface.
Sélectionnez le compte de stockage que vous avez créé et continuez.
Ouvrez l’Explorateur Stockage Azure et chargez l’exemple de document PDF dans le conteneur input. Consultez ensuite le terminal VS Code. Le script doit indiquer qu’il a été déclenché par le chargement du document PDF.
Arrêtez le script avant de continuer.
Ajouter du code de traitement de document
Vous allez ensuite ajouter votre propre code au script Python pour appeler le service Azure AI Intelligence documentaire et analyser les documents chargés à l’aide du modèle de disposition d’Azure AI Intelligence documentaire.
Dans VS Code, accédez au fichier requirements.txt de la fonction. Ce fichier définit les dépendances de votre script. Ajoutez les packages Python suivants au fichier :
cryptography azure-functions azure-storage-blob azure-identity requests pandas numpy
Ouvrez ensuite le script __init__.py. Ajoutez les instructions
import
suivantes :import logging from azure.storage.blob import BlobServiceClient import azure.functions as func import json import time from requests import get, post import os import requests from collections import OrderedDict import numpy as np import pandas as pd
Vous pouvez laisser la fonction
main
générée telle quelle. Vous ajouterez votre code personnalisé à l’intérieur de cette fonction.# This part is automatically generated def main(myblob: func.InputStream): logging.info(f"Python blob trigger function processed blob \n" f"Name: {myblob.name}\n" f"Blob Size: {myblob.length} bytes")
Le bloc de code suivant appelle l’API Analyser la disposition d’Azure AI Intelligence documentaire sur le document chargé. Renseignez vos valeurs de point de terminaison et de clé.
# This is the call to the Document Intelligence endpoint endpoint = r"Your Document Intelligence Endpoint" apim_key = "Your Document Intelligence Key" post_url = endpoint + "/formrecognizer/v2.1/layout/analyze" source = myblob.read() headers = { # Request headers 'Content-Type': 'application/pdf', 'Ocp-Apim-Subscription-Key': apim_key, } text1=os.path.basename(myblob.name)
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Si vous souhaitez en savoir plus, veuillez consulter la rubriqueSécurité Azure AI services.
Ensuite, ajoutez du code pour interroger le service et obtenir les données retournées.
resp = requests.post(url=post_url, data=source, headers=headers) if resp.status_code != 202: print("POST analyze failed:\n%s" % resp.text) quit() print("POST analyze succeeded:\n%s" % resp.headers) get_url = resp.headers["operation-location"] wait_sec = 25 time.sleep(wait_sec) # The layout API is async therefore the wait statement resp = requests.get(url=get_url, headers={"Ocp-Apim-Subscription-Key": apim_key}) resp_json = json.loads(resp.text) status = resp_json["status"] if status == "succeeded": print("POST Layout Analysis succeeded:\n%s") results = resp_json else: print("GET Layout results failed:\n%s") quit() results = resp_json
Ajoutez le code suivant pour vous connecter au conteneur output du service Stockage Azure. Renseignez vos propres valeurs pour le nom et la clé du compte de stockage. Vous trouverez la clé sous l’onglet Clés d’accès de votre ressource de stockage dans le portail Azure.
# This is the connection to the blob storage, with the Azure Python SDK blob_service_client = BlobServiceClient.from_connection_string("DefaultEndpointsProtocol=https;AccountName="Storage Account Name";AccountKey="storage account key";EndpointSuffix=core.windows.net") container_client=blob_service_client.get_container_client("output")
Le code suivant analyse la réponse d’Azure AI Intelligence documentaire retournée, construit un fichier .csv, puis le charge dans le conteneur output.
Important
Vous allez probablement devoir modifier ce code pour qu’il corresponde à la structure de vos propres documents.
# The code below extracts the json format into tabular data. # Please note that you need to adjust the code below to your form structure. # It probably won't work out-of-the-box for your specific form. pages = results["analyzeResult"]["pageResults"] def make_page(p): res=[] res_table=[] y=0 page = pages[p] for tab in page["tables"]: for cell in tab["cells"]: res.append(cell) res_table.append(y) y=y+1 res_table=pd.DataFrame(res_table) res=pd.DataFrame(res) res["table_num"]=res_table[0] h=res.drop(columns=["boundingBox","elements"]) h.loc[:,"rownum"]=range(0,len(h)) num_table=max(h["table_num"]) return h, num_table, p h, num_table, p= make_page(0) for k in range(num_table+1): new_table=h[h.table_num==k] new_table.loc[:,"rownum"]=range(0,len(new_table)) row_table=pages[p]["tables"][k]["rows"] col_table=pages[p]["tables"][k]["columns"] b=np.zeros((row_table,col_table)) b=pd.DataFrame(b) s=0 for i,j in zip(new_table["rowIndex"],new_table["columnIndex"]): b.loc[i,j]=new_table.loc[new_table.loc[s,"rownum"],"text"] s=s+1
Pour finir, le dernier bloc de code charge les données de table et de texte extraites dans votre élément de stockage de blob.
# Here is the upload to the blob storage tab1_csv=b.to_csv(header=False,index=False,mode='w') name1=(os.path.splitext(text1)[0]) +'.csv' container_client.upload_blob(name=name1,data=tab1_csv)
Exécuter la fonction
Appuyez sur F5 pour réexécuter la fonction.
Utilisez l’Explorateur Stockage Azure pour charger un exemple de formulaire PDF dans le conteneur de stockage input. Cette action doit déclencher l’exécution du script. Vous devriez alors voir le fichier .csv qui en résulte (affiché sous forme de table) dans le conteneur output.
Vous pouvez connecter ce conteneur à Power BI afin de créer des visualisations riches des données qu’il contient.
Étapes suivantes
Dans ce tutoriel, vous avez découvert comment utiliser une fonction Azure écrite en Python pour traiter automatiquement des documents PDF chargés, et générer leur contenu dans un format plus convivial. Maintenant, découvrez comment utiliser Power BI pour afficher les données.
- Qu’est-ce qu’Azure AI Intelligence documentaire ?
- En savoir plus sur le modèle de disposition