Sdílet prostřednictvím


Kurz: Zpracování uložených dokumentů pomocí Azure Functions a Pythonu

Funkce Document Intelligence je možné použít jako součást kanálu automatizovaného zpracování dat sestaveného pomocí azure Functions. V této příručce se dozvíte, jak pomocí Azure Functions zpracovávat dokumenty nahrané do kontejneru úložiště objektů blob v Azure. Tento pracovní postup extrahuje data tabulky z uložených dokumentů pomocí modelu rozložení Document Intelligence a uloží data tabulky do souboru .csv v Azure. Data pak můžete zobrazit pomocí Microsoft Power BI (tady nejsou uvedená).

Snímek obrazovky s diagramem pracovního postupu služby Azure

V tomto kurzu se naučíte:

  • Vytvořit účet služby Azure Storage
  • Vytvořte projekt Azure Functions.
  • Extrahujte data rozložení z nahraných formulářů.
  • Nahrání extrahovaných dat rozložení do Azure Storage

Požadavky

  • Bezplatné vytvoření předplatného - Azure

  • Prostředek Document Intelligence Jakmile budete mít předplatné Azure, vytvořte na webu Azure Portal prostředek Document Intelligence, abyste získali klíč a koncový bod. K vyzkoušení služby můžete použít cenovou úroveňF0 Free a později upgradovat na placenou úroveň pro produkční prostředí.

    • Po nasazení prostředku vyberte Přejít k prostředku. Klíč a koncový bod z prostředku, který vytvoříte, potřebujete k připojení aplikace k rozhraní DOCUMENT Intelligence API. Klíč a koncový bod vložíte do kódu níže v tomto kurzu:

      Snímek obrazovky s klíči a umístěním koncového bodu na webu Azure Portal

  • Python 3.6.x, 3.7.x, 3.8.x nebo 3.9.x (Python 3.10.x není pro tento projekt podporovaný).

  • Nejnovější verze editoru Visual Studio Code (VS Code) s nainstalovanými následujícími rozšířeními:

  • Průzkumník služby Azure Storage nainstalována.

  • Místní dokument PDF, který se má analyzovat. Pro tento projekt můžete použít náš ukázkový dokument PDF.

Vytvoření účtu služby Azure Storage

  1. Na webu Azure Portal vytvořte účet Azure Storage pro obecné účely verze 2. Pokud nevíte, jak vytvořit účet úložiště Azure s kontejnerem úložiště, postupujte podle těchto rychlých startů:

    • Vytvoření účtu úložiště Při vytváření účtu úložiště v poli Výkon podrobností instance>vyberte Výkon úrovně Standard.
    • Vytvořte kontejner. Při vytváření kontejneru nastavte úroveň veřejného přístupu na Kontejner (anonymní přístup pro čtení kontejnerů a souborů) v okně Nový kontejner.
  2. V levém podokně vyberte kartu Sdílení prostředků (CORS) a odeberte existující zásady CORS, pokud nějaké existují.

  3. Po nasazení účtu úložiště vytvořte dva prázdné kontejnery úložiště objektů blob s názvem vstup a výstup.

Vytvoření projektu služby Azure Functions

  1. Vytvořte novou složku s názvem functions-app , která bude obsahovat projekt, a zvolte Vybrat.

  2. Otevřete Visual Studio Code a otevřete paletu příkazů (Ctrl+Shift+P). Vyhledejte a zvolte interpret Python:Select → zvolte nainstalovaný interpret Pythonu, který je verze 3.6.x, 3.7.x, 3.8.x nebo 3.9.x. Tento výběr přidá cestu interpreta Pythonu, kterou jste vybrali do projektu.

  3. V levém navigačním podokně vyberte logo Azure.

    • Vaše existující prostředky Azure uvidíte v zobrazení Prostředky.

    • Vyberte předplatné Azure, které používáte pro tento projekt, a níže byste měli vidět aplikaci Funkcí Azure.

      Snímek obrazovky se seznamem zobrazující prostředky Azure v jednom sjednoceném zobrazení

  4. Vyberte oddíl Pracovní prostor (místní) umístěný pod vašimi uvedenými prostředky. Vyberte symbol plus a zvolte tlačítko Vytvořit funkci .

    Snímek obrazovky znázorňující, kde začít vytvářet funkci Azure

  5. Po zobrazení výzvy zvolte Vytvořit nový projekt a přejděte do adresáře aplikace funkcí. Zvolte Vybrat.

  6. Zobrazí se výzva ke konfiguraci několika nastavení:

    • Vyberte jazyk , → zvolte Python.

    • Výběrem interpreta Pythonu vytvořte virtuální prostředí → vyberte interpret, který jste nastavili jako výchozí dříve.

    • Vyberte šablonu → zvolte trigger služby Azure Blob Storage a dejte triggeru název nebo přijměte výchozí název. Potvrďte to stisknutím klávesy Enter .

    • V rozevírací nabídce vyberte nastavení → zvolte ➕Vytvořit nové nastavení místní aplikace.

    • Vyberte předplatné → zvolte předplatné Azure s účtem úložiště, který jste vytvořili → vyberte svůj účet úložiště → pak vyberte název vstupního kontejneru úložiště (v tomto případě input/{name}). Potvrďte to stisknutím klávesy Enter .

    • V rozevírací nabídce vyberte, jak chcete projekt otevřít → zvolte Otevřít projekt v aktuálním okně .

  7. Jakmile dokončíte tyto kroky, VS Code přidá nový projekt funkce Azure s skriptem __init__.py Pythonu. Tento skript se aktivuje při nahrání souboru do vstupního kontejneru úložiště:

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

Testování funkce

  1. Stisknutím klávesy F5 spusťte základní funkci. VS Code zobrazí výzvu k výběru účtu úložiště pro rozhraní.

  2. Vyberte účet úložiště, který jste vytvořili, a pokračujte.

  3. Otevřete Průzkumník služby Azure Storage a nahrajte ukázkový dokument PDF do vstupního kontejneru. Pak zkontrolujte terminál VS Code. Skript by měl protokolovat, že ho aktivoval nahrání PDF.

    Snímek obrazovky terminálu VS Code po nahrání nového dokumentu

  4. Před pokračováním zastavte skript.

Přidání kódu pro zpracování dokumentů

Dále do skriptu Pythonu přidáte vlastní kód, který zavolá službu Document Intelligence a parsuje nahrané dokumenty pomocí modelu rozložení Document Intelligence.

  1. Ve VS Code přejděte do souboru requirements.txt funkce. Tento soubor definuje závislosti pro váš skript. Do souboru přidejte následující balíčky Pythonu:

    cryptography
    azure-functions
    azure-storage-blob
    azure-identity
    requests
    pandas
    numpy
    
  2. Pak otevřete __init__.py skript. Přidejte následující příkazy import:

    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. Vygenerovanou main funkci můžete nechat tak, jak je. Do této funkce přidáte vlastní kód.

    # 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. Následující blok kódu volá rozhraní API pro analýzu analýzy dokumentů v nahraném dokumentu. Vyplňte hodnoty koncového bodu a klíče.

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

    Důležité

    Nezapomeňte klíč z kódu odebrat, až to budete hotovi, a nikdy ho veřejně neposílejte. V produkčním prostředí použijte bezpečný způsob ukládání přihlašovacích údajů a přístupu k vašim přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v tématu Zabezpečení služeb Azure AI.

  5. Dále přidejte kód pro dotazování služby a získejte vrácená data.

    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. Přidejte následující kód pro připojení k výstupnímu kontejneru Azure Storage. Jako název a klíč účtu úložiště zadejte vlastní hodnoty. Klíč můžete získat na kartě Přístupové klíče vašeho prostředku úložiště na webu Azure Portal.

    # 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")
    

    Následující kód analyzuje vrácenou odpověď Document Intelligence, vytvoří soubor .csv a nahraje ho do výstupního kontejneru.

    Důležité

    Tento kód budete pravděpodobně muset upravit tak, aby odpovídal struktuře vlastních dokumentů.

        # 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. Poslední blok kódu nakonec nahraje extrahovaná tabulka a textová data do elementu úložiště objektů 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)
    

Spuštění funkce

  1. Opětovným stisknutím klávesy F5 funkci spusťte.

  2. Pomocí Průzkumník služby Azure Storage nahrajte ukázkový formulář PDF do vstupního kontejneru úložiště. Tato akce by měla aktivovat spuštění skriptu a v výstupním kontejneru by se měl zobrazit výsledný soubor .csv (zobrazený jako tabulka).

Tento kontejner můžete připojit k Power BI a vytvořit bohaté vizualizace dat, která obsahuje.

Další kroky

V tomto kurzu jste se naučili používat funkci Azure Functions napsanou v Pythonu k automatickému zpracování nahraných dokumentů PDF a výstupu jejich obsahu v popisnějším formátu dat. Dále se dozvíte, jak pomocí Power BI zobrazit data.