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.
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.
Para reintentar las operaciones automáticamente
-
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.
-
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()