Installare ed eseguire i contenitori
Questo contenuto si applica a: v3.0 (disponibilità generale) 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.
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:
- API REST
v3.0: 2022-08-31 (GA)
- API REST
v3.1: 2023-07-31 (GA)
- Destinazione delle librerie client
REST API v3.0: 2022-08-31 (GA)
- Destinazione delle librerie client
REST API v3.1: 2023-07-31 (GA)
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 docker comandi e della terminologia di base. |
Motore Docker installato |
|
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:
|
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. |
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:
- Servizio Azure Kubernetes.
- Istanze di Azure Container.
- Cluster Kubernetes distribuito in Azure Stack. Per altre informazioni, vedere Deploy Kubernetes to Azure Stack (Distribuire Kubernetes in Azure Stack).
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.
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.
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 comandodocker compose
odocker 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>
Sostituire i valori {ENDPOINT_URI} e {API_KEY} con l'URI dell'endpoint della risorsa e la chiave dalla pagina delle risorse di Azure.
Assicurarsi che il valore
EULA
sia impostato su accetta.I valori
EULA
,Billing
eApiKey
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.
- Lettura
- Documento generale
- Layout
- Fattura
- Ricevuta
- Documento di identità
- Biglietto da visita
- Personalizzazione
Oltre ai prerequisiti, è necessario eseguire le operazioni seguenti per elaborare un documento personalizzato:
- 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"
- 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"
Assegnare al file il nome con estensione env.
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"
Assegnare al file il nome nginx.conf.
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;
}
}
}
Assegnare al file il nome docker-compose.yml
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. Condocker compose
si usa un file YAML per configurare i servizi dell'applicazione. Con il comandodocker-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.
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 |
Sì | Accettazione della licenza. Esempio: Eula=accept |
Fatturazione | Sì | URI dell'endpoint di fatturazione della risorsa di Riconoscimento modulo |
ApiKey | Sì | 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à) | Sì | Consente di specificare l'URI del contenitore Lettura. Esempio: AzureCognitiveServiceReadHost=http://onprem-frread:5000 |
AzureCognitiveServiceLayoutHost (solo contenitori di tipo Documento, Fattura) | Sì | Consente di specificare l'URI del contenitore Layout. Esempio: AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000 |
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.
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"
}
}
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.
Per arrestare il contenitore, usare il comando seguente:
docker-compose down
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.
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.
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.
È 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.