View a markdown version of this page

Tratamento de erros de conexão - Amazon Textract

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tratamento de erros de conexão

Uma operação do Amazon Textract pode falhar se você exceder o número máximo de transações por segundo (TPS), fazendo com que o serviço restrinja seu aplicativo ou quando sua conexão cai. Por exemplo, se você fizer muitas chamadas para as operações do Amazon Textract em um curto período de tempo, ele limitará suas chamadas e enviará um ProvisionedThroughputExceededException erro na resposta da operação. Para obter informações sobre as cotas de TPS do Amazon Textract, consulte Cotas do Amazon Textract. Para alterar um limite, você pode acessar a opção Amazon Textract no Service Quotas console.

Você pode gerenciar a limitação e a queda de conexões repetindo a operação automaticamente. Você pode especificar o número de novas tentativas incluindo o Config parâmetro ao criar o cliente Amazon Textract. Recomendamos uma contagem de repetições de 5. O AWS SDK repete uma operação o número especificado de vezes antes de falhar e gerar uma exceção. Para obter mais informações, consulte Novas tentativas e recuo exponencial na AWS.

nota

As novas tentativas automáticas funcionam para operações síncronas e assíncronas. Antes de especificar novas tentativas automáticas, verifique se você tem a versão mais recente do AWS SDK. Para obter mais informações, consulte Etapa 2: configurar o AWS CLI and AWS SDKs.

O exemplo a seguir mostra como repetir automaticamente as operações do Amazon Textract ao processar vários documentos.

Pré-requisitos
Para repetir automaticamente as operações
  1. Faça upload de várias imagens de documentos em seu bucket do S3 para executar o exemplo síncrono. Faça upload de um documento de várias páginas em seu bucket do S3 e execute-o para executar StartDocumentTextDetection o exemplo assíncrono.

    Para obter instruções, consulte Como fazer upload de objetos no Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

  2. Os exemplos a seguir demonstram como usar o Config parâmetro para repetir automaticamente uma operação. O exemplo síncrono chama a DetectDocumentText operação, enquanto o exemplo assíncrono chama a operação. GetDocumentTextDetection

    Sync Example

    Use os exemplos a seguir para chamar a DetectDocumentText operação nos documentos em seu bucket do Amazon S3. Emmain, altere o valor de bucket para seu bucket do S3. Altere o valor de documents para os nomes das imagens do documento que você carregou na etapa 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

    Use os exemplos a seguir para chamar a operação GetDocumentTextDetection. Ele pressupõe que você já tenha acessado StartDocumentTextDetection os documentos em seu bucket do Amazon S3 e obtido um. JobId Emmain, altere o valor de bucket para seu bucket do S3 e o valor de roleArn para o Arn atribuído à sua função do Textract. Você também precisará alterar o valor de document para o nome do seu documento de várias páginas no bucket do Amazon S3. Por fim, substitua o valor de region_name pelo nome da sua região e forneça à GetResults função o nome da suajobId.

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