Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menangani Kesalahan Koneksi
Operasi Amazon Textract dapat gagal jika Anda melebihi jumlah maksimum transaksi per detik (TPS), menyebabkan layanan menghambat aplikasi Anda, atau ketika koneksi Anda turun. Misalnya, jika Anda melakukan terlalu banyak panggilan ke operasi Amazon Textract dalam waktu singkat, itu membatasi panggilan Anda dan mengirimkan ProvisionedThroughputExceededException kesalahan dalam respons operasi. Untuk informasi tentang kuota TPS Amazon Textract, lihat Kuota Amazon Textract. Untuk mengubah batas, Anda dapat mengakses opsi Amazon Textract di konsol. Service Quotas
Anda dapat mengelola pelambatan dan koneksi terputus dengan mencoba kembali operasi secara otomatis. Anda dapat menentukan jumlah percobaan ulang dengan menyertakan Config parameter saat Anda membuat klien Amazon Textract. Kami merekomendasikan hitungan coba lagi 5. AWS SDK mencoba ulang operasi beberapa kali yang ditentukan sebelum gagal dan melempar pengecualian. Untuk informasi selengkapnya, lihat Error Retries dan Exponential Backoff di AWS.
Percobaan ulang otomatis berfungsi untuk operasi sinkron dan asinkron. Sebelum menentukan percobaan ulang otomatis, pastikan Anda memiliki AWS SDK versi terbaru. Untuk informasi selengkapnya, lihat Langkah 2: Siapkan AWS CLI and AWS SDK.
Contoh berikut menunjukkan cara mencoba ulang operasi Amazon Textract secara otomatis saat Anda memproses beberapa dokumen.
Untuk secara otomatis mencoba kembali operasi
-
Unggah beberapa gambar dokumen ke bucket S3 Anda untuk menjalankan contoh Synchronous. Unggah dokumen multi-halaman ke bucket S3 Anda dan jalankan StartDocumentTextDetection di atasnya untuk menjalankan contoh Asynchronous.
Untuk petunjuk, lihat Mengunggah Objek ke Amazon S3 di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.
-
Contoh berikut menunjukkan cara menggunakan Config parameter untuk mencoba kembali operasi secara otomatis. Contoh Synchronous memanggil DetectDocumentText operasi, sedangkan contoh Asynchronous memanggil operasi. GetDocumentTextDetection
- Sync Example
-
Gunakan contoh berikut untuk memanggil DetectDocumentText operasi pada dokumen di bucket Amazon S3 Anda. Dimain, ubah nilai bucket ke bucket S3 Anda. Ubah nilai documents menjadi nama gambar dokumen yang Anda unggah di 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 memanggil dokumen StartDocumentTextDetection di ember Amazon S3 Anda dan memperoleh file. JobId Dimain, ubah nilai bucket bucket S3 Anda dan nilai Arn yang ditetapkan roleArn ke peran Textract Anda. Anda juga harus mengubah nilai ke nama dokumen multi-halaman Anda di bucket Amazon S3 Anda. document Terakhir, ganti nilai region_name dengan nama wilayah Anda dan berikan GetResults fungsi dengan nama AndajobId.
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()