View a markdown version of this page

Chiamare le operazioni asincrone di Amazon Textract - Amazon Textract

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Chiamare le operazioni asincrone di Amazon Textract

Amazon Textract fornisce un'API asincrona che puoi utilizzare per elaborare documenti multipagina in formato PDF o TIFF. Puoi anche utilizzare operazioni asincrone per elaborare documenti a pagina singola in formato JPEG, PNG, TIFF o PDF.

Le informazioni contenute in questo argomento utilizzano le operazioni di rilevamento del testo per mostrare come utilizzare le operazioni asincrone di Amazon Textract. Puoi usare lo stesso approccio con le operazioni di analisi del testo di e. StartDocumentAnalysisGetDocumentAnalysis Funziona allo stesso modo anche con StartExpenseAnalysise GetExpenseAnalysis.

Per vedere un esempio, consulta Rilevamento o analisi del testo in un documento multipagina.

Se stai analizzando i documenti di prestito, puoi utilizzare l'StartLendingAnalysisoperazione per classificare le pagine dei documenti e inviare le pagine classificate a un'operazione di analisi Amazon Textract. Le pagine vengono indirizzate alle operazioni di analisi in base alla classe assegnata.

È possibile recuperare i risultati per singole pagine utilizzando l'GetLendingAnalysisoperazione o recuperare un riepilogo dell'analisi con. GetLendingAnalysisSummary

Amazon Textract elabora in modo asincrono un documento archiviato in un bucket Amazon S3. L'elaborazione viene avviata chiamando un'operazione, ad esempio. Start StartDocumentTextDetection Lo stato di completamento della richiesta è pubblicato in un argomento Amazon Simple Notification Service (Amazon SNS). Per conoscere lo stato di completamento dell'argomento Amazon SNS, puoi utilizzare una coda o una funzione di Amazon Simple Queue Service (Amazon SQS). AWS Lambda Dopo aver acquisito lo stato di completamento, chiama un'operazione Get, come ad esempio GetDocumentTextDetection, per ottenere i risultati della richiesta.

Per impostazione predefinita, i risultati delle chiamate asincrone vengono crittografati e archiviati per 7 giorni in un bucket di proprietà di Amazon Textract, a meno che non si specifichi un bucket Amazon S3 utilizzando l'argomento di un'operazione. OutputConfig Per informazioni su come consentire ad Amazon Textract di inviare documenti crittografati al tuo bucket Amazon S3, consulta. Autorizzazioni per la configurazione dell'output

La tabella seguente mostra le operazioni Start e Get corrispondenti per i diversi tipi di elaborazione asincrona supportati da Amazon Textract:

Start/Get Operazioni API per operazioni asincrone di Amazon Textract
Tipo di elaborazione Avvia API Ottieni l'API
Rilevamento del testo StartDocumentTextDetection GetDocumentTextDetection
Analisi del testo StartDocumentAnalysis GetDocumentAnalysis
Analisi delle spese StartExpenseAnalysis GetExpenseAnalysis
Analisi dei prestiti StartLendingAnalysis GetLendingAnalysis, GetLendingAnalysisSummary

Per un esempio che utilizza AWS Lambda le funzioni, consulta Elaborazione di documenti su larga scala con Amazon Textract.

Il diagramma seguente mostra il processo di rilevamento del testo del documento in un'immagine del documento archiviata in un bucket Amazon S3. Nel diagramma, una coda Amazon SQS ottiene lo stato di completamento dall'argomento Amazon SNS.

Diagramma che mostra un flusso di lavoro di Amazon Textract con i passaggi chiave: avvio e restituzione dell'ID del lavoro, elaborazione del documento nel bucket S3, pubblicazione dello stato di completamento sull'argomento SNS, monitoraggio dello stato di completamento della coda SQS, chiamata per ottenere risultati di analisi. GetDocumentTextDetection

Il processo visualizzato nel diagramma precedente è lo stesso per l'analisi del testo e. invoices/receipts Si inizia ad analizzare il testo chiamando StartDocumentAnalysise si inizia ad analizzare chiamando StartExpenseAnalysisSi ottengono i risultati invoices/receipts chiamando o rispettivamente. GetDocumentAnalysisGetExpenseAnalysis

Avvio del rilevamento del testo

Puoi avviare una richiesta di rilevamento del testo di Amazon Textract chiamando. StartDocumentTextDetection Di seguito è riportato un esempio di una richiesta JSON passata da StartDocumentTextDetection.

{ "DocumentLocation": { "S3Object": { "Bucket": "bucket", "Name": "image.pdf" } }, "ClientRequestToken": "DocumentDetectionToken", "NotificationChannel": { "SNSTopicArn": "arn:aws:sns:us-east-1:nnnnnnnnnn:topic", "RoleArn": "arn:aws:iam::nnnnnnnnnn:role/roleTopic" }, "JobTag": "Receipt" }

Il parametro di input DocumentLocation fornisce il nome del file del documento e il bucket Amazon S3 da cui recuperarlo. NotificationChannelcontiene l'Amazon Resource Name (ARN) dell'argomento Amazon SNS che Amazon Textract notifica al termine della richiesta di rilevamento del testo. L'argomento Amazon SNS deve trovarsi nella stessa regione AWS dell'endpoint Amazon Textract che stai chiamando. NotificationChannelcontiene anche l'ARN per un ruolo che consente ad Amazon Textract di pubblicare sull'argomento Amazon SNS. Concedi le autorizzazioni di pubblicazione di Amazon Textract per i tuoi argomenti di Amazon SNS creando un ruolo di servizio IAM. Per ulteriori informazioni, consulta Configurazione di Amazon Textract per operazioni asincrone.

Puoi anche specificare un parametro di input opzionaleJobTag, che ti consente di identificare il lavoro, o i gruppi di lavori, nello stato di completamento pubblicato nell'argomento Amazon SNS. Ad esempio, puoi utilizzarlo JobTag per identificare il tipo di documento da elaborare, ad esempio un modulo fiscale o una ricevuta.

Per evitare la duplicazione accidentale dei processi di analisi, puoi facoltativamente fornire un token idempotente, ClientRequestToken. Se si fornisce un valore perClientRequestToken, l'Startoperazione restituisce lo stesso JobId per più chiamate identiche all'Startoperazione, ad esempioStartDocumentTextDetection. Un token ClientRequestToken ha un ciclo di vita di 7 giorni. Dopo 7 giorni, puoi riutilizzarlo. Se riutilizzi il token durante il suo ciclo di vita, si verifica quanto segue:

  • Se riutilizzi il token con la stessa operazione Start e gli stessi parametri di input, viene restituito lo stesso JobId. Il processo non viene eseguito nuovamente e Amazon Textract non invia lo stato di completamento all'argomento registrato di Amazon SNS.

  • Se riutilizzi il token con la stessa operazione Start e un parametro di input secondario viene modificato, viene sollevata un'eccezione idempotentparametermismatchexception (codice di stato HTTP: 400).

  • Se riutilizzi il token con un'altra operazione Start, l'operazione va a buon fine.

Un altro parametro opzionale disponibile èOutputConfig, che consente di regolare la posizione dell'output. Per impostazione predefinita, Amazon Textract archivia i risultati internamente ed è accessibile solo dalle operazioni Get API. Se OutputConfig abilitato, puoi impostare il nome del bucket a cui verrà inviato l'output e il prefisso del file dei risultati, da cui scaricare i risultati. Inoltre, puoi impostare il KMSKeyID parametro su una chiave gestita dal cliente per crittografare l'output. Senza questo parametro impostato, Amazon Textract crittograferà il lato server utilizzando per Amazon S3 Chiave gestita da AWS

Nota

Prima di utilizzare questo parametro, assicurati di disporre dell' PutObject autorizzazione per il bucket di output. Inoltre, assicurati di disporre dei DescribeKey permessi Decrypt, ReEncrypt GenerateDataKey, e per la AWS KMS chiave se decidi di usarla.

La risposta all'operazione StartDocumentTextDetection è un identificatore del processo (JobId). JobIdUtilizzalo per tenere traccia delle richieste e ottenere i risultati dell'analisi dopo che Amazon Textract ha pubblicato lo stato di completamento nell'argomento Amazon SNS. Di seguito è riportato un esempio:

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

Se avvii troppi lavori contemporaneamente, chiama per StartDocumentTextDetection generare un'LimitExceededExceptioneccezione (codice di stato HTTP: 400) fino a quando il numero di lavori in esecuzione contemporaneamente non scende al di sotto del limite del servizio Amazon Textract.

Se scopri che LimitExceededException le eccezioni vengono sollevate a seguito di picchi di attività, prendi in considerazione l'utilizzo di una coda Amazon SQS per gestire le richieste in entrata. Contatta l' AWS assistenza se scopri che il numero medio di richieste simultanee non può essere gestito da una coda Amazon SQS e continui a ricevere eccezioni. LimitExceededException

Ottenere lo stato di completamento di una richiesta di analisi Amazon Textract

Amazon Textract invia una notifica di completamento dell'analisi all'argomento registrato di Amazon SNS. La notifica include l'identificatore del processo e lo stato di completamento dell'operazione in una stringa JSON. Una richiesta di rilevamento del testo riuscita ha uno SUCCEEDED stato. Ad esempio, il risultato seguente mostra la corretta elaborazione di un processo di rilevamento del testo.

{ "JobId": "642492aea78a86a40665555dc375ee97bc963f342b29cd05030f19bd8fd1bc5f", "Status": "SUCCEEDED", "API": "StartDocumentTextDetection", "JobTag": "Receipt", "Timestamp": 1543599965969, "DocumentLocation": { "S3ObjectName": "document", "S3Bucket": "bucket" } }

Per ulteriori informazioni, consulta Notifica dei risultati di Amazon Textract.

Per ottenere le informazioni sullo stato pubblicate sull'argomento Amazon SNS da Amazon Textract, utilizza una delle seguenti opzioni:

  • AWS Lambda - Puoi sottoscrivere una funzione AWS Lambda scritta in un argomento Amazon SNS. La funzione viene chiamata quando Amazon Textract notifica all'argomento Amazon SNS che la richiesta è stata completata. Usa una funzione Lambda se desideri che il codice lato server elabori i risultati di una richiesta di rilevamento del testo. Ad esempio, potresti voler utilizzare il codice lato server per annotare l'immagine o creare un rapporto sul testo rilevato prima di restituire le informazioni a un'applicazione client.

  • Amazon SQS: puoi sottoscrivere una coda Amazon SQS a un argomento di Amazon SNS. Quindi esegui il polling nella coda di Amazon SQS per recuperare lo stato di completamento pubblicato da Amazon Textract al termine di una richiesta di rilevamento del testo. Per ulteriori informazioni, consulta Rilevamento o analisi del testo in un documento multipagina. Utilizza una coda Amazon SQS se desideri chiamare le operazioni di Amazon Textract solo da un'applicazione client.

Importante

Non è consigliabile ottenere lo stato di completamento della richiesta chiamando ripetutamente l'operazione Amazon TextractGet. Questo perché Amazon Textract rallenta l'Getoperazione se vengono fatte troppe richieste. Se stai elaborando più documenti contemporaneamente, è più semplice ed efficiente monitorare una coda SQS per la notifica di completamento piuttosto che interrogare Amazon Textract per lo stato di ogni lavoro singolarmente.

Se hai configurato il tuo account per ricevere una notifica dei risultati da un argomento di Amazon Simple Notification Service (Amazon SNS) o tramite una coda Amazon SQS, devi assicurarti che il tuo account sia sicuro limitando l'ambito di accesso di Amazon Textract alle sole risorse che stai utilizzando. Questo può essere fatto associando una policy di attendibilità al ruolo di servizio IAM. Per informazioni su come eseguire questa operazione, consulta Confused Deputy Prevention. Cross-service

Ottenere i risultati del rilevamento del testo di Amazon Textract

Per ottenere i risultati di una richiesta di rilevamento del testo, assicurati innanzitutto che lo stato di completamento recuperato dall'argomento Amazon SNS sia. SUCCEEDED Quindi chiama GetDocumentTextDetection che trasferisce il valore JobId restituito da StartDocumentTextDetection. La struttura JSON della richiesta è simile all'esempio riportato di seguito:

{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3", "MaxResults": 10, "SortBy": "TIMESTAMP" }

JobIdè l'identificatore per l'operazione di rilevamento del testo. Poiché il rilevamento del testo può generare grandi quantità di dati, viene utilizzato MaxResults per specificare il numero massimo di risultati da restituire in una singola Get operazione. Il valore predefinito per MaxResults è 1.000. Se si specifica un valore maggiore di 1.000, vengono restituiti solo 1.000 risultati. Se l'operazione non restituisce tutti i risultati, viene restituito un token di impaginazione per la pagina successiva. Per visualizzare la pagina successiva dei risultati, specificate il token nel NextToken parametro.

Nota

I risultati possono essere recuperati solo fino a 7 giorni dall'inizializzazione del processo.

La risposta GetDocumentTextDetection dell'operazione JSON è simile alla seguente. Il numero totale di pagine rilevate viene restituito inDocumentMetadata. Il testo rilevato viene restituito nell'Blocksarray. Per informazioni sugli Block oggetti, vedereOggetti di risposta per il rilevamento del testo e l'analisi dei documenti.

{ "DocumentMetadata": { "Pages": 1 }, "JobStatus": "SUCCEEDED", "Blocks": [ { "BlockType": "PAGE", "Geometry": { "BoundingBox": { "Width": 1.0, "Height": 1.0, "Left": 0.0, "Top": 0.0 }, "Polygon": [ { "X": 0.0, "Y": 0.0 }, { "X": 1.0, "Y": 0.0 }, { "X": 1.0, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "64533157-c47e-401a-930e-7ca1bb3ac3fa", "Relationships": [ { "Type": "CHILD", "Ids": [ "4297834d-dcb1-413b-8908-3b96866ebbb5", "1d85ba24-2877-4d09-b8b2-393833d769e9", "193e9c47-fd87-475a-ba09-3fda210d8784", "bd8aeb62-961b-4b47-b78a-e4ed9eeecd0f" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 53.301639556884766, "Text": "ellooworio", "Geometry": { "BoundingBox": { "Width": 0.9999999403953552, "Height": 0.5365243554115295, "Left": 0.0, "Top": 0.46347561478614807 }, "Polygon": [ { "X": 0.0, "Y": 0.46347561478614807 }, { "X": 0.9999999403953552, "Y": 0.46347561478614807 }, { "X": 0.9999999403953552, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "4297834d-dcb1-413b-8908-3b96866ebbb5", "Relationships": [ { "Type": "CHILD", "Ids": [ "170c3eb9-5155-4bec-8c44-173bba537e70" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 89.15632629394531, "Text": "He llo,", "Geometry": { "BoundingBox": { "Width": 0.33642634749412537, "Height": 0.49159330129623413, "Left": 0.13885067403316498, "Top": 0.17169663310050964 }, "Polygon": [ { "X": 0.13885067403316498, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.6632899641990662 }, { "X": 0.13885067403316498, "Y": 0.6632899641990662 } ] }, "Id": "1d85ba24-2877-4d09-b8b2-393833d769e9", "Relationships": [ { "Type": "CHILD", "Ids": [ "516ae823-3bab-4f9a-9d74-ad7150d128ab", "6bcf4ea8-bbe8-4686-91be-b98dd63bc6a6" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 82.44834899902344, "Text": "worlo", "Geometry": { "BoundingBox": { "Width": 0.33182239532470703, "Height": 0.3766750991344452, "Left": 0.5091826915740967, "Top": 0.23131252825260162 }, "Polygon": [ { "X": 0.5091826915740967, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.607987642288208 }, { "X": 0.5091826915740967, "Y": 0.607987642288208 } ] }, "Id": "193e9c47-fd87-475a-ba09-3fda210d8784", "Relationships": [ { "Type": "CHILD", "Ids": [ "ed135c3b-35dd-4085-8f00-26aedab0125f" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 88.50325775146484, "Text": "world", "Geometry": { "BoundingBox": { "Width": 0.35004907846450806, "Height": 0.19635874032974243, "Left": 0.527581512928009, "Top": 0.30100569128990173 }, "Polygon": [ { "X": 0.527581512928009, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.49736443161964417 }, { "X": 0.527581512928009, "Y": 0.49736443161964417 } ] }, "Id": "bd8aeb62-961b-4b47-b78a-e4ed9eeecd0f", "Relationships": [ { "Type": "CHILD", "Ids": [ "9e28834d-798e-4a62-8862-a837dfd895a6" ] } ], "Page": 1 }, { "BlockType": "WORD", "Confidence": 53.301639556884766, "Text": "ellooworio", "Geometry": { "BoundingBox": { "Width": 1.0, "Height": 0.5365243554115295, "Left": 0.0, "Top": 0.46347561478614807 }, "Polygon": [ { "X": 0.0, "Y": 0.46347561478614807 }, { "X": 1.0, "Y": 0.46347561478614807 }, { "X": 1.0, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "170c3eb9-5155-4bec-8c44-173bba537e70", "Page": 1 }, { "BlockType": "WORD", "Confidence": 88.46246337890625, "Text": "He", "Geometry": { "BoundingBox": { "Width": 0.15350718796253204, "Height": 0.29955607652664185, "Left": 0.13885067403316498, "Top": 0.21856294572353363 }, "Polygon": [ { "X": 0.13885067403316498, "Y": 0.21856294572353363 }, { "X": 0.292357861995697, "Y": 0.21856294572353363 }, { "X": 0.292357861995697, "Y": 0.5181190371513367 }, { "X": 0.13885067403316498, "Y": 0.5181190371513367 } ] }, "Id": "516ae823-3bab-4f9a-9d74-ad7150d128ab", "Page": 1 }, { "BlockType": "WORD", "Confidence": 89.8501968383789, "Text": "llo,", "Geometry": { "BoundingBox": { "Width": 0.17724157869815826, "Height": 0.49159327149391174, "Left": 0.2980354428291321, "Top": 0.17169663310050964 }, "Polygon": [ { "X": 0.2980354428291321, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.6632899045944214 }, { "X": 0.2980354428291321, "Y": 0.6632899045944214 } ] }, "Id": "6bcf4ea8-bbe8-4686-91be-b98dd63bc6a6", "Page": 1 }, { "BlockType": "WORD", "Confidence": 82.44834899902344, "Text": "worlo", "Geometry": { "BoundingBox": { "Width": 0.33182239532470703, "Height": 0.3766750991344452, "Left": 0.5091826915740967, "Top": 0.23131252825260162 }, "Polygon": [ { "X": 0.5091826915740967, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.607987642288208 }, { "X": 0.5091826915740967, "Y": 0.607987642288208 } ] }, "Id": "ed135c3b-35dd-4085-8f00-26aedab0125f", "Page": 1 }, { "BlockType": "WORD", "Confidence": 88.50325775146484, "Text": "world", "Geometry": { "BoundingBox": { "Width": 0.35004907846450806, "Height": 0.19635874032974243, "Left": 0.527581512928009, "Top": 0.30100569128990173 }, "Polygon": [ { "X": 0.527581512928009, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.49736443161964417 }, { "X": 0.527581512928009, "Y": 0.49736443161964417 } ] }, "Id": "9e28834d-798e-4a62-8862-a837dfd895a6", "Page": 1 } ] }

Utilizzo di un adattatore

Con Amazon Textract, puoi utilizzare un adattatore per chiamare l'StartDocumentAnalysisoperazione. Per utilizzare un adattatore, devi prima creare e addestrare un adattatore utilizzando la console Amazon Textract. Per applicare l'adattatore, fornisci il suo ID quando chiami l'operazione StartDocumentAnalysisAPI. Quando si chiama l'StartDocumentAnalysisoperazione, è possibile utilizzare fino a un adattatore per pagina.

"AdaptersConfig": { "Adapters": [ { "AdapterId": "2e9bf1c4aa31", "Version": "1", "Pages": [ "1" ] } ] }