Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Penanganan Throttled Call dan Dropped Connections
Operasi Amazon Textract Texact dapat gagal jika Anda melebihi jumlah maksimum transaksi per detik (TPS), yang menyebabkan layanan untuk throttle aplikasi Anda, atau ketika koneksi Anda turun. Misalnya, jika Anda membuat terlalu banyak panggilan ke operasi Amazon Texact dalam waktu singkat, panggilan akan mengurangi panggilan Anda dan mengirimProvisionedThroughputExceededException
kesalahan dalam respon operasi. Untuk informasi selengkapnya tentang kuota Amazon Textract TPS, lihatAmazon Textract.
Anda dapat mengelola throttling dan drop koneksi dengan secara otomatis mencoba kembali operasi. Anda dapat menentukan jumlah retries dengan memasukkanConfig
parameter saat Anda membuat klien Amazon Textract. Kami merekomendasikan hitungan coba lagi dari 5. ParameterAWSSDK mencoba ulang operasi jumlah tertentu kali sebelum gagal dan melempar pengecualian. Untuk informasi selengkapnya, lihatPengulangan Kesalahan dan Backoff Eksponensial di AWS.
Coba ulang otomatis bekerja untuk operasi sinkron dan asinkron. Sebelum menentukan percobaan ulang otomatis, pastikan Anda memiliki SDK AWS versi terbaru. Untuk informasi selengkapnya, lihat Langkah 2: MenyiapkanAWS CLIdanAWSSDK.
Contoh berikut menunjukkan cara mencoba ulang operasi Amazon Textract secara otomatis saat Anda memproses beberapa dokumen.
Untuk secara otomatis mencoba lagi operasi
-
Unggah beberapa gambar dokumen ke bucket S3 Anda untuk menjalankan contoh Synchronous. Unggah dokumen multi-halaman ke bucket S3 Anda dan jalankanStartDocumentTextDetection
di atasnya untuk menjalankan contoh Asynchronous.
Untuk instruksi, lihatMengunggah Objek ke Amazon S3di dalamPanduan Pengguna Amazon Simple Storage.
-
Contoh-contoh berikut ini menunjukkan cara menggunakanConfig
parameter untuk secara otomatis mencoba lagi operasi. Contoh Synchronous memanggilDetectDocumentText
operasi, sedangkan contoh Asynchronous memanggilGetDocumentTextDetection
operasi.
- Sync Example
-
Gunakan contoh berikut untuk memanggilDetectDocumentText
operasi pada dokumen dalam bucket Amazon S3. Masukmain
, mengubah nilaibucket
ke bucket S3 Anda. Ubah nilaidocuments
untuk nama-nama gambar dokumen yang Anda upload pada langkah 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
-
Gunakan contoh berikut untuk memanggil operasi GetDocumentTextDetection
. Ini mengasumsikan Anda telah meneleponStartDocumentTextDetection
pada dokumen di bucket Amazon S3 dan memperolehJobId
. Masukmain
, mengubah nilaibucket
bucket S3 Anda dan nilairoleArn
ke Arn ditugaskan untuk peran Textract Anda. Anda juga harus mengubah nilaidocument
dengan nama dokumen multi-halaman di bucket Amazon S3. Akhirnya, ganti nilairegion_name
dengan nama wilayah Anda dan memberikanGetResults
berfungsi dengan namajobId
.
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()