Partage via


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).

Capture d’écran du diagramme de workflow du service Azure

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 :

      Capture d’écran de l’emplacement des clés et des points de terminaison dans le Portail Azure.

  • 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 :

  • 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

  1. 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.
  2. 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.

  3. 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

  1. Créez un dossier nommé functions-app destiné à contenir le projet, puis choisissez Sélectionner.

  2. 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.

  3. 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.

      Capture d’écran d’une liste montrant vos ressources Azure dans une seule vue unifiée.

  4. 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.

    Capture d’écran montrant par où commencer la création d’une fonction Azure.

  5. Quand vous y êtes invité, choisissez Créer un projet, puis accédez au répertoire function-app. Choisissez Sélectionner.

  6. 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.

  7. 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

  1. Appuyez sur F5 pour exécuter la fonction de base. VS Code vous invite à sélectionner un compte de stockage destiné à servir d’interface.

  2. Sélectionnez le compte de stockage que vous avez créé et continuez.

  3. 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.

    Capture d’écran du terminal VS Code après le chargement d’un nouveau document.

  4. 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.

  1. 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
    
  2. 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
    
  3. 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")
    
  4. 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.

  5. 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
    
    
  6. 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
    
    
  7. 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

  1. Appuyez sur F5 pour réexécuter la fonction.

  2. 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.