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.
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.
Para repetir automaticamente as operações
-
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.
-
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()