View a markdown version of this page

Gestión de errores de conexión - Amazon Textract

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Gestión de errores de conexión

Una operación de Amazon Textract puede fallar si superas el número máximo de transacciones por segundo (TPS), lo que provoca que el servicio limite tu aplicación o que tu conexión se interrumpa. Por ejemplo, si realiza demasiadas llamadas a las operaciones de Amazon Textract en un período corto de tiempo, las limita y envía un ProvisionedThroughputExceededException error en la respuesta de la operación. Para obtener información sobre las cuotas de TPS de Amazon Textract, consulte Amazon Textract Quotas. Para cambiar un límite, puede acceder a la opción Amazon Textract en la Service Quotas consola.

Puede gestionar la aceleración y las conexiones interrumpidas reintentando automáticamente la operación. Puede especificar el número de reintentos incluyendo el Config parámetro al crear el cliente Amazon Textract. Se recomienda un recuento de reintentos de 5. El AWS SDK vuelve a intentar una operación el número de veces especificado antes de fallar y generar una excepción. Para obtener más información, consulte Reintentos de error y retardo exponencial en AWS.

nota

Los reintentos automáticos funcionan tanto para operaciones sincrónicas como asíncronas. Antes de especificar los reintentos automáticos, asegúrese de tener la versión más reciente del SDK de AWS. Para obtener más información, consulte Paso 2: configurar el AWS CLI and AWS SDK.

En el siguiente ejemplo, se muestra cómo volver a intentar automáticamente las operaciones de Amazon Textract cuando se procesan varios documentos.

Requisitos previos
Para reintentar las operaciones automáticamente
  1. Cargue varias imágenes de documentos a su bucket de S3 para ejecutar el ejemplo de Synchronous. Cargue un documento de varias páginas en su bucket de S3 y ejecútelo para ejecutar StartDocumentTextDetection el ejemplo asíncrono.

    Para ver las instrucciones, consulte Carga de objetos en Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

  2. Los siguientes ejemplos muestran cómo utilizar el Config parámetro para volver a intentar una operación automáticamente. El ejemplo sincrónico llama a la DetectDocumentText operación, mientras que el ejemplo asíncrono llama a la operación. GetDocumentTextDetection

    Sync Example

    Utilice los siguientes ejemplos para llamar a la DetectDocumentText operación en los documentos de su bucket de Amazon S3. Enmain, cambia el valor de bucket a tu bucket de S3. Cambie el valor de por documents los nombres de las imágenes del documento que cargó en el paso 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

    Consulte los siguientes ejemplos para llamar a la operación GetDocumentTextDetection. Se supone que ya consultó StartDocumentTextDetection los documentos de su bucket de Amazon S3 y obtuvo unJobId. Enmain, cambia el valor de bucket a tu bucket de S3 y el valor roleArn a Arn asignado a tu rol de Textract. También tendrás que cambiar el valor de por el nombre de document tu documento de varias páginas en tu bucket de Amazon S3. Por último, sustituye el valor de region_name por el nombre de tu región y proporciona a la GetResults función el nombre de tu jobId región.

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