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à.
Gestione degli errori di connessione
Un'operazione Amazon Textract può fallire se superi il numero massimo di transazioni al secondo (TPS), causando un rallentamento dell'applicazione da parte del servizio o quando la connessione si interrompe. Ad esempio, se effettui troppe chiamate alle operazioni di Amazon Textract in un breve periodo di tempo, le chiamate vengono limitate e viene inviato un ProvisionedThroughputExceededException errore nella risposta dell'operazione. Per informazioni sulle quote TPS di Amazon Textract, consulta Amazon Textract Quotas. Per modificare un limite, puoi accedere all'opzione Amazon Textract nella Quote di servizio console.
Puoi gestire le limitazioni e le interruzioni delle connessioni ritentando automaticamente l'operazione. Puoi specificare il numero di nuovi tentativi includendo il Config parametro quando crei il client Amazon Textract. Consigliamo un numero di tentativi pari a 5. L' AWS SDK ritenta un'operazione il numero di volte specificato prima di fallire e generare un'eccezione. Per ulteriori informazioni, consulta Ripetizione dei tentativi in caso di errore e backoff esponenziale in AWS.
I nuovi tentativi automatici funzionano sia per le operazioni sincrone che asincrone. Prima di specificare nuovi tentativi automatici, assicurati di disporre della versione più recente dell'SDK AWS. Per ulteriori informazioni, consulta Passaggio 2: configura il AWS CLI and AWS SDK.
L'esempio seguente mostra come riprovare automaticamente le operazioni di Amazon Textract quando elabori più documenti.
Per riprovare automaticamente le operazioni
-
Carica più immagini di documenti nel tuo bucket S3 per eseguire l'esempio Synchronous. Carica un documento composto da più pagine nel tuo bucket S3 ed eseguilo per eseguire l'esempio StartDocumentTextDetection Asynchronous.
Per le istruzioni, consulta Caricamento di oggetti in Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.
-
Gli esempi seguenti mostrano come utilizzare il Config parametro per riprovare automaticamente un'operazione. L'esempio Synchronous chiama l'DetectDocumentTextoperazione, mentre l'esempio Asynchronous chiama l'operazione. GetDocumentTextDetection
- Sync Example
-
Usa i seguenti esempi per richiamare l'DetectDocumentTextoperazione sui documenti nel tuo bucket Amazon S3. Nelmain, modifica il valore di nel tuo bucket bucket S3. Cambia il valore documents di nei nomi delle immagini del documento che hai caricato nel passaggio 2.
import boto3
from botocore.client import Config
# Documents
def process_multiple_documents(bucket, documents):
config = Config(retries = dict(max_attempts = 5))
# Amazon Textract client
textract = boto3.client('textract', config=config)
for documentName in documents:
print("\nProcessing: {}\n==========================================".format(documentName))
# Call Amazon Textract
response = textract.detect_document_text(
Document={
'S3Object': {
'Bucket': bucket,
'Name': documentName
}
})
# Print detected text
for item in response["Blocks"]:
if item["BlockType"] == "LINE":
print ('\033[94m' + item["Text"] + '\033[0m')
def main():
bucket = ""
documents = ["document-image-1.png",
"document-image-2.png", "document-image-3.png",
"document-image-4.png", "document-image-5.png" ]
process_multiple_documents(bucket, documents)
if __name__ == "__main__":
main()
- Async Example
-
Utilizzare i seguenti esempi per richiamare l'operazione GetDocumentTextDetection. Si presuppone che tu abbia già richiamato StartDocumentTextDetection i documenti nel tuo bucket Amazon S3 e ottenuto un. JobId Nelmain, modifica il valore del bucket tuo bucket S3 e il valore dell'Arn assegnato roleArn al tuo ruolo Textract. Dovrai anche modificare il valore di document inserendo il nome del documento multipagina nel tuo bucket Amazon S3. Infine, sostituisci il valore di region_name con il nome della tua regione e fornisci alla GetResults funzione il nome della tua. jobId
import boto3
from botocore.client import Config
class DocumentProcessor:
jobId = ''
region_name = ''
roleArn = ''
bucket = ''
document = ''
sqsQueueUrl = ''
snsTopicArn = ''
processType = ''
def __init__(self, role, bucket, document, region):
self.roleArn = role
self.bucket = bucket
self.document = document
self.region_name = region
self.config = Config(retries = dict(max_attempts = 5))
self.textract = boto3.client('textract', region_name=self.region_name, config=self.config)
self.sqs = boto3.client('sqs')
self.sns = boto3.client('sns')
# Display information about a block
def DisplayBlockInfo(self, block):
print("Block Id: " + block['Id'])
print("Type: " + block['BlockType'])
if 'EntityTypes' in block:
print('EntityTypes: {}'.format(block['EntityTypes']))
if 'Text' in block:
print("Text: " + block['Text'])
if block['BlockType'] != 'PAGE':
print("Confidence: " + "{:.2f}".format(block['Confidence']) + "%")
print('Page: {}'.format(block['Page']))
if block['BlockType'] == 'CELL':
print('Cell Information')
print('\tColumn: {} '.format(block['ColumnIndex']))
print('\tRow: {}'.format(block['RowIndex']))
print('\tColumn span: {} '.format(block['ColumnSpan']))
print('\tRow span: {}'.format(block['RowSpan']))
if 'Relationships' in block:
print('\tRelationships: {}'.format(block['Relationships']))
print('Geometry')
print('\tBounding Box: {}'.format(block['Geometry']['BoundingBox']))
print('\tPolygon: {}'.format(block['Geometry']['Polygon']))
if block['BlockType'] == 'SELECTION_ELEMENT':
print(' Selection element detected: ', end='')
if block['SelectionStatus'] == 'SELECTED':
print('Selected')
else:
print('Not selected')
def GetResults(self, jobId):
maxResults = 1000
paginationToken = None
finished = False
while finished == False:
response = None
if paginationToken == None:
response = self.textract.get_document_text_detection(JobId=jobId,
MaxResults=maxResults)
else:
response = self.textract.get_document_text_detection(JobId=jobId,
MaxResults=maxResults,
NextToken=paginationToken)
blocks = response['Blocks']
print('Detected Document Text')
print('Pages: {}'.format(response['DocumentMetadata']['Pages']))
# Display block information
for block in blocks:
self.DisplayBlockInfo(block)
print()
print()
if 'NextToken' in response:
paginationToken = response['NextToken']
else:
finished = True
def main():
roleArn = 'role-arn'
bucket = 'bucket-name'
document = 'document-name'
region_name = 'region-name'
analyzer = DocumentProcessor(roleArn, bucket, document, region_name)
analyzer.GetResults("job-id")
if __name__ == "__main__":
main()