Installare ed eseguire i contenitori

Questo contenuto si applica a: segno di spunta v3.0 (disponibilità generale) segno di spunta v3.1 (disponibilità generale)

Informazioni sui documenti di Azure AI è un servizio di Azure per intelligenza artificiale che consente di creare software di elaborazione dati automatica tramite la tecnologia di Machine Learning. Informazioni sui documenti consente di identificare ed estrarre testo, coppie chiave/valore, indicatori di selezione, dati di tabella e altro dai documenti. I risultati vengono recapitati come dati strutturati che .../includono le relazioni nel file originale. I contenitori elaborano solo i dati forniti e usano esclusivamente le risorse a cui sono autorizzati ad accedere. I contenitori non possono elaborare i dati da altre aree.

Questo articolo illustra come scaricare, installare ed eseguire contenitori di Document Intelligence. I contenitori consentono di eseguire il servizio Informazioni sui documenti nel proprio ambiente. I contenitori sono ottimi per requisiti specifici di sicurezza e governance dei dati.

  • I modelli di lettura, layout, ID documento, ricevuta e fattura sono supportati dai contenitori di Informazioni sui documenti v3.1.

  • I modelli Lettura, Layout, Documento generale, Biglietto da visita, Personalizzato sono supportati dai contenitori di Informazioni sui documenti v3.0.

Supporto versione

Il supporto per i contenitori è attualmente disponibile con la versione di Informazioni sui documenti v3.0: 2022-08-31 (GA) per tutti i modelli e v3.1 2023-07-31 (GA) per i modelli lettura, layout, documento ID, ricevuta e fattura:

Prerequisiti

Per iniziare, è necessario un account Azure attivo. Se non si ha un account, è possibile crearne uno gratuito.

Per usare i contenitori di Informazioni sui documenti sono necessari anche gli elementi seguenti:

Richiesto Scopo
Familiarità con Docker È opportuno avere una conoscenza di base dei concetti relativi a Docker, tra cui registri, repository, contenitori e immagini dei contenitori, nonché dei dockercomandi e della terminologia di base.
Motore Docker installato
  • È necessario il motore Docker installato in un computer host. Docker offre pacchetti per la configurazione dell'ambiente Docker in macOS, Windows e Linux. Per una panoramica dei concetti fondamentali relativi a Docker e ai contenitori, vedere Docker overview (Panoramica di Docker).
  • Docker deve essere configurato per consentire ai contenitori di connettersi ai dati di fatturazione e inviarli ad Azure.
  • In Windows è anche necessario configurare Docker per supportare i contenitori Linux.
Risorsa di Informazioni sui documenti Una risorsa Informazioni sui documenti di Azure AI a servizio singolo o multiservizio nel portale di Azure. Per usare i contenitori, è necessario avere la chiave associata e l'URI dell'endpoint. Entrambi i valori sono disponibili nella pagina Chiavi ed endpoint del portale di Azure:
  • {FORM_RECOGNIZER_KEY}: una delle due chiavi di risorsa disponibili.
  • {FORM_RECOGNIZER_ENDPOINT_URI}: l'endpoint per la risorsa usata per tenere traccia delle informazioni di fatturazione.
Facoltativo Scopo
Interfaccia della riga di comando di Azure L'interfaccia della riga di comando di Azure consente di usare un set di comandi online per creare e gestire le risorse di Azure. È disponibile per l'installazione in ambienti Windows, macOS e Linux e può essere eseguita in un contenitore Docker e in Azure Cloud Shell.

Requisiti per il computer host

L'host è un computer basato su x64 che esegue il contenitore Docker. Può essere un computer dell'ambiente locale o un servizio di hosting Docker in Azure, tra cui:

Nota

Tenere presente che il contenitore Studio non può essere distribuito ed eseguito nel servizio Azure Kubernetes. L'esecuzione del contenitore Studio è supportata solo su computer locali.

Indicazioni e requisiti per i contenitori

Contenitori di supporto necessari

Nella tabella seguente sono elencati uno o più contenitori di supporto per ogni contenitore di Informazioni sui documenti scaricato. Per altre informazioni, vedere la sezione Fatturazione.

Contenitore di funzionalità Supporto dei contenitori
Lettura Non obbligatorio
Layout Non obbligatorio
Biglietto da visita Lettura
Documento generale Layout
Fattura Layout
Ricevuta Lettura o layout
Documento di identità Lettura
Modello personalizzato Layout

Nota

I valori minimi e consigliati sono basati sui limiti di Docker e non sulle risorse del computer host.

Contenitori di Intelligence sui documenti
Contenitore Requisiti minimi Requisiti consigliati
Read 8 core, 10 GB di memoria 8 core, 24 GB di memoria
Layout 8 core, 16 GB di memoria 8 core, 24 GB di memoria
Business Card 8 core, 16 GB di memoria 8 core, 24 GB di memoria
General Document 8 core, 12 GB di memoria 8 core, 24 GB di memoria
ID Document 8 core, 8 GB di memoria 8 core, 24 GB di memoria
Invoice 8 core, 16 GB di memoria 8 core, 24 GB di memoria
Receipt 8 core, 11 GB di memoria 8 core, 24 GB di memoria
Custom Template 8 core, 16 GB di memoria 8 core, 24 GB di memoria
  • Ogni core deve essere di almeno 2,6 gigahertz (GHz) o superiore.
  • Core e memoria corrispondono alle impostazioni --cpus e --memory che vengono usate come parte del comando docker compose o docker run.

Suggerimento

È possibile usare il comando docker images per visualizzare l'elenco delle immagini dei contenitori scaricate. Ad esempio, il comando seguente visualizza l'ID, il repository e il tag di ogni immagine del contenitore scaricata, in formato tabella:

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

Eseguire il contenitore con il comando docker-compose up

  • Sostituire i valori {ENDPOINT_URI} e {API_KEY} con l'URI dell'endpoint della risorsa e la chiave dalla pagina delle risorse di Azure.

    Screenshot della pagina delle chiavi e dell'endpoint del portale di Azure.

  • Assicurarsi che il valore EULA sia impostato su accetta.

  • I valori EULA, Billing e ApiKey devono essere specificati. In caso contrario, il contenitore non potrà essere avviato.

Importante

Le chiavi vengono usate per accedere alla risorsa di Informazioni sui documenti. Non condividerle. Archiviarle in una posizione sicura, ad esempio usando Azure Key Vault. È inoltre consigliabile rigenerare queste chiavi regolarmente. Per effettuare una chiamata API è necessaria una sola chiave. Quando si rigenera la prima chiave, è possibile usare la seconda chiave per l'accesso continuato al servizio.

Oltre ai prerequisiti, è necessario eseguire le operazioni seguenti per elaborare un documento personalizzato:

Creare una cartella e archiviare i file seguenti

Creare una cartella e archiviare i dati di input

  • Assegnare alla cartella il nome files.
  • Si fa riferimento al percorso file per questa cartella come {FILE_MOUNT_PATH}.
  • Copiare il percorso file in una posizione comoda. È necessario aggiungerlo al file con estensione env. Ad esempio, se la cartella è denominata files e si trova nella stessa cartella del file docker-compose, la voce del file con estensione env è FILE_MOUNT_PATH="./files"

Creare una cartella per archiviare i log scritti dal servizio Informazioni sui documenti nel computer locale

  • Assegnare alla cartella il nome output.
  • Si fa riferimento al percorso file per questa cartella come {OUTPUT_MOUNT_PATH}.
  • Copiare il percorso file in una posizione comoda. È necessario aggiungerlo al file con estensione env. Ad esempio, se la cartella è denominata output e si trova nella stessa cartella del file docker-compose, la voce del file con estensione env è OUTPUT_MOUNT_PATH="./output"

Creare una cartella per archiviare l'elaborazione interna condivisa tra i contenitori

  • Assegnare alla cartella il nome shared.
  • Si fa riferimento al percorso file per questa cartella come {SHARED_MOUNT_PATH}.
  • Copiare il percorso file in una posizione comoda. È necessario aggiungerlo al file con estensione env. Ad esempio, se la cartella è denominata condivisa e si trova nella stessa cartella del file docker-compose, la voce del file con estensione env è SHARED_MOUNT_PATH="./shared"
  • Assegnare alla cartella il nome db.
  • Si fa riferimento al percorso file per questa cartella come {DB_MOUNT_PATH}.
  • Copiare il percorso file in una posizione comoda. È necessario aggiungerlo al file con estensione env. Ad esempio, se la cartella è denominata db e si trova nella stessa cartella del file docker-compose, la voce del file con estensione env è DB_MOUNT_PATH="./db"

Creare un file di ambiente

  1. Assegnare al file il nome con estensione env.

  2. Dichiarare le variabili di ambiente seguenti:

SHARED_MOUNT_PATH="./shared"
OUTPUT_MOUNT_PATH="./output"
FILE_MOUNT_PATH="./files"
DB_MOUNT_PATH="./db"
FORM_RECOGNIZER_ENDPOINT_URI="YourFormRecognizerEndpoint"
FORM_RECOGNIZER_KEY="YourFormRecognizerKey"
NGINX_CONF_FILE="./nginx.conf"

Creare un file nginx

  1. Assegnare al file il nome nginx.conf.

  2. Immettere la configurazione seguente:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;
    client_max_body_size 90M;
    upstream docker-custom {
        server azure-cognitive-service-custom-template:5000;
    }

    upstream docker-layout {
        server  azure-cognitive-service-layout:5000;
    }

    server {
        listen 5000;

        location = / {
            proxy_set_header Host $host:$server_port;
            proxy_set_header Referer $scheme://$host:$server_port;
            proxy_pass http://docker-custom/;
        }

        location /status {
            proxy_pass http://docker-custom/status;
        }

        location /test {
            return 200 $scheme://$host:$server_port;
        }

        location /ready {
            proxy_pass http://docker-custom/ready;
        }

        location /swagger {
            proxy_pass http://docker-custom/swagger;
        }

        location /formrecognizer/documentModels/prebuilt-layout {
            proxy_set_header Host $host:$server_port;
            proxy_set_header Referer $scheme://$host:$server_port;

            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
            add_header 'Access-Control-Expose-Headers' '*' always;

            if ($request_method = 'OPTIONS') {
                return 200;
            }

            proxy_pass http://docker-layout/formrecognizer/documentModels/prebuilt-layout;
        }

        location /formrecognizer/documentModels {
            proxy_set_header Host $host:$server_port;
            proxy_set_header Referer $scheme://$host:$server_port;

            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE' always;
            add_header 'Access-Control-Expose-Headers' '*' always;

            if ($request_method = 'OPTIONS') {
                return 200;
            }

            proxy_pass http://docker-custom/formrecognizer/documentModels;
        }

        location /formrecognizer/operations {
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE, PATCH' always;
            add_header 'Access-Control-Expose-Headers' '*' always;

            if ($request_method = OPTIONS ) {
                return 200;
            }

            proxy_pass http://docker-custom/formrecognizer/operations;
        }
    }
}

Creare un file docker compose

  1. Assegnare al file il nome docker-compose.yml

  2. L'esempio di codice seguente è un esempio di docker compose autonomo per eseguire insieme contenitori di modelli di Layout di Informazioni sui documenti, Studio e Personalizzato. Con docker compose si usa un file YAML per configurare i servizi dell'applicazione. Con il comando docker-compose up si creano e si avviano quindi tutti i servizi dalla configurazione.

version: '3.3'
services:
  nginx:
    image: nginx:alpine
    container_name: reverseproxy
    volumes:
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
    ports:
      - "5000:5000"
  layout:
    container_name: azure-cognitive-service-layout
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest
    environment:
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /shared
      Mounts:Shared: /shared
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /shared
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  custom-template:
    container_name: azure-cognitive-service-custom-template
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/custom-template-3.0:latest
    restart: always
    depends_on:
      - layout
    environment:
      AzureCognitiveServiceLayoutHost: http://azure-cognitive-service-layout:5000
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /shared
      Mounts:Shared: /shared
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /shared
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  studio:
    container_name: form-recognizer-studio
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/studio:3.0
    environment:
      ONPREM_LOCALFILE_BASEPATH: /onprem_folder
      STORAGE_DATABASE_CONNECTION_STRING: /onprem_db/Application.db
    volumes:
      - type: bind
        source: ${FILE_MOUNT_PATH} # path to your local folder
        target: /onprem_folder
      - type: bind
        source: ${DB_MOUNT_PATH} # path to your local folder
        target: /onprem_db
    ports:
      - "5001:5001"
    user: "1000:1000" # echo $(id -u):$(id -g)

Il contenitore modello personalizzato e il contenitore Layout possono usare code di Archiviazione di Azure o code in memoria. Le variabili di ambiente Storage:ObjectStore:AzureBlob:ConnectionString e queue:azure:connectionstring devono essere impostate solo se si usano code di Archiviazione di Azure. In caso di esecuzione in locale, eliminare queste variabili.

Assicurarsi che il servizio sia in esecuzione

Per assicurarsi che il servizio sia operativo e in esecuzione. Eseguire questi comandi in una shell Ubuntu.

$cd <folder containing the docker-compose file>

$source .env

$docker-compose up

I contenitori di modelli personalizzati richiedono alcune configurazioni diverse e supportano altre configurazioni facoltative.

Impostazione Obbligatorio Descrizione
EULA Accettazione della licenza. Esempio: Eula=accept
Fatturazione URI dell'endpoint di fatturazione della risorsa di Riconoscimento modulo
ApiKey La chiave di endpoint della risorsa di Riconoscimento modulo
Queue:Azure:ConnectionString No Stringa di connessione della coda di Azure
Storage:ObjectStore:AzureBlob:ConnectionString No Stringa di connessione BLOB di Azure
HealthCheck:MemoryUpperboundInMB No Soglia di memoria per la segnalazione di attività non integre. Impostazione predefinita: uguale alla memoria consigliata
StorageTimeToLiveInMinutes No Durata TTL per rimuovere tutti i file intermedi e finali. Impostazione predefinita: due giorni, TTL può impostare tra cinque minuti e sette giorni
Task:MaxRunningTimeSpanInMinutes No Tempo di esecuzione massimo per il trattamento della richiesta come timeout. Impostazione predefinita: 60 minuti
HTTP_PROXY_BYPASS_URLS No Consente di specificare gli URL per ignorare il proxy. Esempio: HTTP_PROXY_BYPASS_URLS = abc.com, xyz.com
AzureCognitiveServiceReadHost (solo contenitori di tipo Ricevuta, Documento di identità) Consente di specificare l'URI del contenitore Lettura. Esempio: AzureCognitiveServiceReadHost=http://onprem-frread:5000
AzureCognitiveServiceLayoutHost (solo contenitori di tipo Documento, Fattura) Consente di specificare l'URI del contenitore Layout. Esempio: AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000

Usare Document Intelligence Studio per eseguire il training di un modello

  • Raccogliere un set di almeno cinque moduli dello stesso tipo. Questi dati vengono usati per eseguire il training del modello e testare un modulo. È possibile usare un set di dati di esempio (scaricare ed estrarre il file sample_data.zip).

  • Dopo aver verificato che i contenitori siano in esecuzione, aprire un browser e passare all'endpoint in cui sono stati distribuiti i contenitori. Se questa distribuzione è il computer locale, l'endpoint è [http://localhost:5001](http://localhost:5001).

  • Selezionare il riquadro del modello di estrazione personalizzato.

  • Selezionare l'opzione Create project.

  • Specificare un nome di progetto e facoltativamente una descrizione

  • Nel passaggio "Configura la risorsa" specificare l'endpoint per il modello personalizzato. Se i contenitori sono stati distribuiti nel computer locale, usare questo URL [http://localhost:5000](http://localhost:5000).

  • Specificare una sottocartella per la posizione dei dati di training all'interno della cartella dei file.

  • Creare infine il progetto

A questo punto dovrebbe essere stato creato un progetto, pronto per l'etichettatura. Caricare i dati di training e iniziare a etichettare. Se non si ha familiarità con l'etichettatura, vedere Compilare ed eseguire il training di un modello personalizzato.

Uso dell'API per il training

Se si prevede di chiamare direttamente le API per eseguire il training di un modello, l'API di training del modello personalizzato richiede un file ZIP con codifica Base64 che corrisponde al contenuto del progetto di etichettatura. È possibile omettere i file PDF o di immagine e inviare solo i file JSON.

Dopo aver etichettato il set di dati e avere aggiunto i file *.ocr.json, *.labels.json e fields.json a un file ZIP, usare i comandi di PowerShell per generare la stringa con codifica Base64.

$bytes = [System.IO.File]::ReadAllBytes("<your_zip_file>.zip")
$b64String = [System.Convert]::ToBase64String($bytes, [System.Base64FormattingOptions]::None)

Usare l'API del modello di compilazione per pubblicare la richiesta.

POST http://localhost:5000/formrecognizer/documentModels:build?api-version=2023-07-31

{
    "modelId": "mymodel",
    "description": "test model",
    "buildMode": "template",

    "base64Source": "<Your base64 encoded string>",
    "tags": {
       "additionalProp1": "string",
       "additionalProp2": "string",
       "additionalProp3": "string"
     }
}

Verificare che il server sia in esecuzione

Per verificare se il contenitore è in esecuzione, sono disponibili diverse opzioni:

  • Il contenitore fornisce una home page all'indirizzo \ come convalida visiva dell'esecuzione del contenitore.

  • È possibile aprire il Web browser preferito e passare all'indirizzo IP esterno e alla porta esposta del contenitore in questione. Usare gli URL di richiesta elencati per verificare che il contenitore sia in esecuzione. Gli URL di richiesta di esempio elencati sono http://localhost:5000, ma il contenitore specifico può variare. Tenere presente che si sta passando all'Indirizzo IP esterno del contenitore e alla porta esposta.

    Richiesta URL Scopo
    http://localhost:5000/ Il contenitore fornisce un home page.
    http://localhost:5000/ready Questa richiesta, tramite un'operazione GET, verifica che il contenitore sia pronto per accettare una query sul modello. Questa richiesta può essere usata per i probe di attività e di idoneità di Kubernetes.
    http://localhost:5000/status Questa richiesta, tramite un'operazione GET, permette di verificare se la chiave API usata per avviare il contenitore è valida senza che sia necessaria una query endpoint. Questa richiesta può essere usata per i probe di attività e di idoneità di Kubernetes.
    http://localhost:5000/swagger Il contenitore fornisce un set completo di documentazione per gli endpoint e una funzionalità Prova. Con questa funzionalità, è possibile immettere le impostazioni in un modulo HTML basato sul Web ed eseguire la query senza scrivere codice. Dopo che la query restituisce il risultato, viene fornito un comando CURL di esempio per illustrare il formato richiesto per il corpo e le intestazioni HTTP.

Screenshot della pagina iniziale dei contenitori di Azure.

Arrestare i contenitori

Per arrestare il contenitore, usare il comando seguente:

docker-compose down

Fatturazione

I contenitori di Informazioni sui documenti inviano informazioni di fatturazione ad Azure usando una risorsa di Informazioni sui documenti nell'account Azure.

Le query sul contenitore vengono fatturate secondo il piano tariffario della risorsa di Azure usata per l’API Key. La fatturazione viene calcolata per ogni istanza del contenitore usata per elaborare documenti e immagini.

Se viene visualizzato l'errore seguente: Contenitore non è in uno stato valido. La convalida della sottoscrizione non è riuscita con lo stato "OutOfQuota" La chiave API ha superato la quota. È un indicatore che i contenitori non sono in comunicazione con l'endpoint di fatturazione.

Connect to Azure

Per eseguire il contenitore, sono necessari i valori dell'argomento di fatturazione. Questi valori consentono al contenitore di connettersi all'endpoint di fatturazione. Il contenitore segnala l'utilizzo ogni 10-15 minuti. Se il contenitore non si connette ad Azure entro la finestra temporale consentita, continuerà a essere eseguito ma non fornirà query finché l'endpoint di fatturazione non verrà ripristinato. Il tentativo di connessione viene effettuato 10 volte nello stesso intervallo di tempo di 10-15 minuti. Se non è possibile stabilire la connessione con l'endpoint di fatturazione dopo 10 tentativi, il contenitore non potrà più gestire le richieste. Per un esempio di informazioni inviate a Microsoft per la fatturazione, vedere le Domande frequenti sui contenitori di Azure AI.

Argomenti di fatturazione

Il comando docker-compose up avvia il contenitore quando vengono fornite tutte e tre le opzioni seguenti con valori validi:

Opzione Descrizione
ApiKey Chiave della risorsa dei servizi di intelligenza artificiale di Azure usata per tenere traccia delle informazioni di fatturazione.
Il valore di questa opzione deve essere impostato su una chiave per la risorsa di cui è stato effettuato il provisioning specificata in Billing.
Billing L'endpoint della risorsa di Servizi cognitivi usata per tenere traccia delle informazioni di fatturazione.
Il valore di questa opzione deve essere impostato sull'URI dell'endpoint di una risorsa di Azure di cui è stato effettuato il provisioning.
Eula Indica che è la licenza per il contenitore è stata accettata.
Il valore di questa opzione deve essere impostato su accept.

Per altre informazioni su queste opzioni, vedere Configurare i contenitori.

Riepilogo

È tutto! In questo articolo sono stati descritti i concetti e i flussi di lavoro per scaricare, installare ed eseguire i contenitori di Informazioni sui documenti. Riepilogo:

  • Informazioni sui documenti offre sette contenitori Linux per Docker.
  • Le immagini del contenitore vengono scaricate da mcr.
  • Le immagini dei contenitori vengono eseguite in Docker.
  • Le informazioni di fatturazione devono essere specificate quando si crea un'istanza di un contenitore.

Importante

I contenitori di Azure per intelligenza artificiale non sono concessi in licenza per l'esecuzione senza essere connessi ad Azure per la misurazione. I clienti devono consentire ai contenitori di comunicare sempre le informazioni di fatturazione al servizio di misurazione. I contenitori di Azure per intelligenza artificiale non inviano a Microsoft i dati dei clienti, ad esempio l'immagine o il testo analizzato.

Passaggi successivi