기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Textract 비동기 작업 호출
Amazon Textract는 PDF 또는 TIFF 형식으로 여러 페이지 문서를 처리하는 데 사용할 수 있는 비동기 API를 제공합니다. 비동기 작업을 사용하여 JPEG, PNG, TIFF 또는 PDF 형식의 단일 페이지 문서를 처리할 수도 있습니다.
이 주제의 정보는 텍스트 감지 작업을 사용하여 Amazon Textract 비동기 작업을 사용하는 방법을 보여줍니다. StartDocumentAnalysis 및 GetDocumentAnalysis의 텍스트 분석 작업과 동일한 접근 방식을 사용할 수 있습니다. StartExpenseAnalysis 및 GetExpenseAnalysis에서도 동일하게 작동합니다.
예제는 다중 페이지 문서에서 텍스트 감지 또는 분석 섹션을 참조하세요.
대출 문서를 분석하는 경우 StartLendingAnalysis 작업을 사용하여 문서 페이지를 분류하고 분류된 페이지를 Amazon Textract 분석 작업으로 보낼 수 있습니다. 페이지는 할당된 클래스에 따라 분석 작업으로 라우팅됩니다.
GetLendingAnalysis 작업을 사용하여 개별 페이지의 결과를 검색하거나를 사용하여 분석 요약을 검색할 수 있습니다GetLendingAnalysisSummary.
Amazon Textract는 Amazon S3 버킷에 저장된 문서를 비동기적으로 처리합니다. StartDocumentTextDetection과 같은 Start 작업을 호출하여 처리를 시작합니다. 동영상 분석 작업의 완료 상태는 Amazon Simple Notification Service(SNS) 주제에 게시됩니다. Amazon SNS 주제에서 완료 상태를 가져오려면 Amazon Simple Queue Service(Amazon SQS) 대기열 또는 AWS Lambda 함수를 사용할 수 있습니다. 완료 상태가 되면 GetDocumentTextDetection과 같은 Get 작업을 호출하여 요청 결과를 가져옵니다.
비동기 호출의 결과는 작업의 OutputConfig 인수를 사용하여 Amazon S3 버킷을 지정하지 않는 한 기본적으로 암호화되어 Amazon Textract 소유 버킷에 7일 동안 저장됩니다. Amazon Textract가 암호화된 문서를 Amazon S3 버킷으로 전송하도록 하는 방법에 대한 자세한 내용은 섹션을 참조하세요출력 구성에 대한 권한.
다음 표에는 Amazon Textract에서 지원하는 다양한 유형의 비동기 처리에 해당하는 시작 및 가져오기 작업이 나와 있습니다.
| 처리 유형 | API 시작 | API 가져오기 |
|---|---|---|
| 텍스트 감지 | StartDocumentTextDetection | GetDocumentTextDetection |
| 텍스트 분석 | StartDocumentAnalysis | GetDocumentAnalysis |
| 비용 분석 | StartExpenseAnalysis | GetExpenseAnalysis |
| 대출 분석 | StartLendingAnalysis | GetLendingAnalysis, GetLendingAnalysisSummary |
AWS Lambda 함수를 사용하는 예제는 Amazon Textract를 사용한 대규모 문서 처리를
다음 다이어그램은 Amazon S3 버킷에 저장된 문서 이미지에서 문서 텍스트를 감지하는 프로세스를 보여줍니다. 다이어그램에서 Amazon SQS 대기열은 Amazon SNS 주제의 완료 상태를 가져옵니다.
앞선 다이어그램에 표시된 프로세스는 텍스트 및 인보이스/영수증을 분석하는 데 동일합니다. StartDocumentAnalysis를 호출하여 텍스트 분석을 시작하고 StartExpenseAnalysis를 호출하여 인보이스/영수증 분석을 시작합니다. GetDocumentAnalysis 또는 GetExpenseAnalysisGetExpenseAnalysis를 각각 호출하여 결과를 얻습니다.
텍스트 감지 시작
StartDocumentTextDetection을 호출하여 Amazon Textract 텍스트 감지 요청을 시작합니다. 다음은 StartDocumentTextDetection으로 전달되는 JSON 요청의 예입니다.
{ "DocumentLocation": { "S3Object": { "Bucket": "bucket", "Name": "image.pdf" } }, "ClientRequestToken": "DocumentDetectionToken", "NotificationChannel": { "SNSTopicArn": "arn:aws:sns:us-east-1:nnnnnnnnnn:topic", "RoleArn": "arn:aws:iam::nnnnnnnnnn:role/roleTopic" }, "JobTag": "Receipt" }
입력 파라미터는 문서 파일 이름과 이를 검색할 Amazon S3 버킷을 DocumentLocation 제공합니다. 에는 Amazon Textract가 텍스트 감지 요청이 완료되면 알리는 Amazon SNS 주제의 Amazon 리소스 이름(ARN)이 NotificationChannel 포함되어 있습니다. Amazon SNS 주제는 호출 중인 Amazon Textract 엔드포인트와 동일한 AWS 리전에 있어야 합니다. 에는 Amazon Textract가 Amazon SNS 주제에 게시할 수 있도록 허용하는 역할에 대한 ARNNotificationChannel도 포함되어 있습니다. IAM 서비스 역할을 생성하여 Amazon SNS 주제에 대한 게시 권한을 Amazon Textract에 부여합니다. 자세한 내용은 비동기 작업을 위한 Amazon Textract 구성 단원을 참조하십시오.
Amazon SNS 주제에 게시된 완료 상태에서 작업 또는 작업 그룹을 JobTag식별할 수 있는 선택적 입력 파라미터를 지정할 수도 있습니다. 예를 들어 JobTag를 사용하여 세금 양식 또는 영수증과 같이 처리 중인 문서 유형을 식별할 수 있습니다.
분석 작업이 실수로 중복되지 않도록 idempotent 토큰 ClientRequestToken을 선택적으로 제공할 수 있습니다. 에 값을 입력하면 ClientRequestToken Start 작업은와 같이 Start 작업에 JobId 대한 여러 개의 동일한 호출에 대해 동일한를 반환합니다StartDocumentTextDetection. ClientRequestToken 토큰은 수명이 7일입니다. 7일 후에 다시 사용할 수 있습니다. 토큰 수명 기간 동안 토큰을 재사용할 경우 다음과 같은 현상이 생깁니다.
-
동일한
Start작업과 동일한 입력 파라미터로 토큰을 다시 사용할 경우 동일한JobId가 반환됩니다. 작업이 다시 수행되지 않고 Amazon Textract는 등록된 Amazon SNS 주제에 완료 상태를 보내지 않습니다. -
동일한
Start작업에서 약간의 입력 파라미터를 변경하여 토큰을 재사용할 경우idempotentparametermismatchexception(HTTP 상태 코드: 400) 예외가 표시됩니다. -
다른
Start작업에 토큰을 재사용할 경우 작업이 진행됩니다.
사용 가능한 또 다른 선택적 파라미터는 이며OutputConfig, 이를 통해 출력 위치를 조정할 수 있습니다. 기본적으로 Amazon Textract는 결과를 내부적으로 저장하며 API 가져오기 작업에서만 액세스할 수 있습니다. 를 OutputConfig 활성화하면 출력이 전송될 버킷의 이름과 결과를 다운로드할 수 있는 결과의 파일 접두사를 설정할 수 있습니다. 또한 KMSKeyID 파라미터를 고객 관리형 키로 설정하여 출력을 암호화할 수 있습니다. 이 파라미터 세트가 없으면 Amazon Textract는 Amazon S3 AWS 관리형 키 용를 사용하여 서버 측을 암호화합니다.
참고
이 파라미터를 사용하기 전에 출력 버킷에 대한 PutObject 권한이 있는지 확인합니다. 또한 키를 사용하기로 결정한 경우 AWS KMS 키에 대한 Decrypt, ReEncrypt, GenerateDataKey 및 DescribeKey 권한이 있는지 확인합니다.
StartDocumentTextDetection 작업에 대한 응답은 작업 식별자입니다(JobId). Amazon Textract가 Amazon SNS 주제에 완료 상태를 게시한 후 요청을 JobId 추적하고 분석 결과를 가져오는 데 사용합니다. 다음은 예제입니다.
{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}
너무 많은 작업을 동시에 시작하는 경우는 동시에 실행되는 작업 수가 Amazon Textract 서비스 한도 미만이 될 때까지를 호출하여 LimitExceededException 예외(HTTP 상태 코드: 400)를 StartDocumentTextDetection 발생시킵니다.
활동 버스트로 인해 LimitExceededException 예외가 발생하는 경우 Amazon SQS 대기열을 사용하여 수신 요청을 관리하는 것이 좋습니다. Amazon SQS 대기열에서 평균 동시 요청 수를 관리할 수 없고 여전히 LimitExceededException 예외가 발생하는 경우 Support에 문의 AWS 하세요.
Amazon Textract 분석 요청의 완료 상태 가져오기
Amazon Textract는 등록된 Amazon SNS 주제에 분석 완료 알림을 보냅니다. 알림에는 JSON 문자열 형태의 작업 완료 상태와 작업 식별자가 포함됩니다. 텍스트 감지 요청이 성공하면 SUCCEEDED 상태가 됩니다. 예를 들어 다음 결과는 텍스트 감지 작업의 성공적인 처리를 보여줍니다.
{ "JobId": "642492aea78a86a40665555dc375ee97bc963f342b29cd05030f19bd8fd1bc5f", "Status": "SUCCEEDED", "API": "StartDocumentTextDetection", "JobTag": "Receipt", "Timestamp": 1543599965969, "DocumentLocation": { "S3ObjectName": "document", "S3Bucket": "bucket" } }
자세한 내용은 Amazon Textract 결과 알림 단원을 참조하십시오.
Amazon Textract에서 Amazon SNS 주제에 게시한 상태 정보를 가져오려면 다음 옵션 중 하나를 사용합니다.
-
AWS Lambda - Amazon SNS 주제에 기록하는 AWS Lambda 함수를 구독할 수 있습니다. Amazon Textract가 Amazon SNS 주제에 요청이 완료되었음을 알릴 때 함수가 호출됩니다. 서버 측 코드가 텍스트 감지 요청의 결과를 처리하도록 하려면 Lambda 함수를 사용합니다. 예를 들어, 클라이언트 애플리케이션에 정보를 반환하기 전에 서버 측 코드를 사용하여 이미지에 주석을 달거나 감지된 텍스트에 대한 보고서를 생성할 수 있습니다.
-
Amazon SQS - Amazon SQS 대기열에서 Amazon SNS 주제를 구독할 수 있습니다. 그런 다음 텍스트 감지 요청이 완료되면 Amazon SQS 대기열을 폴링하여 Amazon Textract에서 게시한 완료 상태를 검색합니다. 자세한 내용은 다중 페이지 문서에서 텍스트 감지 또는 분석 단원을 참조하십시오. 클라이언트 애플리케이션에서만 Amazon Textract 작업을 호출하려면 Amazon SQS 대기열을 사용합니다.
중요
Amazon Textract Get 작업을 반복적으로 호출하여 요청 완료 상태를 가져오지 않는 것이 좋습니다. 이는 요청이 너무 많을 경우 Amazon Textract가 Get 작업을 제한하기 때문입니다. 여러 문서를 동시에 처리하는 경우 각 작업의 상태에 대해 Amazon Textract를 개별적으로 폴링하는 것보다 완료 알림에 대해 하나의 SQS 대기열을 모니터링하는 것이 더 간단하고 효율적입니다.
Amazon Simple Notification Service(Amazon SNS) 주제 또는 Amazon SQS 대기열을 통해 결과 알림을 받도록 계정을 구성한 경우 Amazon Textract의 액세스 범위를 사용 중인 리소스로만 제한하여 계정이 안전한지 확인해야 합니다. 이는 IAM 서비스 역할에 신뢰 정책을 추가하는 것으로 수행할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 교차 서비스 혼동된 대리자 방지를 참조하세요.
Amazon Textract 텍스트 감지 결과 가져오기
텍스트 감지 요청의 결과를 가져오려면 먼저 Amazon SNS 주제에서 검색된 완료 상태가 인지 확인합니다SUCCEEDED. 그런 다음 GetDocumentTextDetection을 호출하면 이에 의해 StartDocumentTextDetection에서 반환된 JobId 값이 통과됩니다. 요청 JSON은 다음 예제와 비슷합니다.
{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3", "MaxResults": 10, "SortBy": "TIMESTAMP" }
JobId는 텍스트 감지 작업의 식별자입니다. 텍스트 감지는 대량의 데이터를 생성할 수 있으므로 MaxResults를 사용하여 단일 Get작업으로 반환할 최대 결과 수를 지정합니다. 의 기본값은 1,000MaxResults입니다. 1,000보다 큰 값을 지정하면 1,000개의 결과만 반환됩니다. 작업이 모든 결과를 반환하지 않으면 다음 페이지에 대한 페이지 매김 토큰이 반환됩니다. 결과의 다음 페이지를 가져오려면 NextToken 파라미터에 토큰을 지정합니다.
참고
결과는 최대 7일의 작업 초기화 시간 동안만 검색할 수 있습니다.
GetDocumentTextDetection 작업 응답 JSON은 다음과 유사합니다. 감지된 총 페이지 수는에 반환됩니다DocumentMetadata. 감지된 텍스트가 Blocks 배열에 반환됩니다. Block 객체에 대한 자세한 내용은 단원을 참조하십시오텍스트 감지 및 문서 분석 응답 객체.
{ "DocumentMetadata": { "Pages": 1 }, "JobStatus": "SUCCEEDED", "Blocks": [ { "BlockType": "PAGE", "Geometry": { "BoundingBox": { "Width": 1.0, "Height": 1.0, "Left": 0.0, "Top": 0.0 }, "Polygon": [ { "X": 0.0, "Y": 0.0 }, { "X": 1.0, "Y": 0.0 }, { "X": 1.0, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "64533157-c47e-401a-930e-7ca1bb3ac3fa", "Relationships": [ { "Type": "CHILD", "Ids": [ "4297834d-dcb1-413b-8908-3b96866ebbb5", "1d85ba24-2877-4d09-b8b2-393833d769e9", "193e9c47-fd87-475a-ba09-3fda210d8784", "bd8aeb62-961b-4b47-b78a-e4ed9eeecd0f" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 53.301639556884766, "Text": "ellooworio", "Geometry": { "BoundingBox": { "Width": 0.9999999403953552, "Height": 0.5365243554115295, "Left": 0.0, "Top": 0.46347561478614807 }, "Polygon": [ { "X": 0.0, "Y": 0.46347561478614807 }, { "X": 0.9999999403953552, "Y": 0.46347561478614807 }, { "X": 0.9999999403953552, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "4297834d-dcb1-413b-8908-3b96866ebbb5", "Relationships": [ { "Type": "CHILD", "Ids": [ "170c3eb9-5155-4bec-8c44-173bba537e70" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 89.15632629394531, "Text": "He llo,", "Geometry": { "BoundingBox": { "Width": 0.33642634749412537, "Height": 0.49159330129623413, "Left": 0.13885067403316498, "Top": 0.17169663310050964 }, "Polygon": [ { "X": 0.13885067403316498, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.6632899641990662 }, { "X": 0.13885067403316498, "Y": 0.6632899641990662 } ] }, "Id": "1d85ba24-2877-4d09-b8b2-393833d769e9", "Relationships": [ { "Type": "CHILD", "Ids": [ "516ae823-3bab-4f9a-9d74-ad7150d128ab", "6bcf4ea8-bbe8-4686-91be-b98dd63bc6a6" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 82.44834899902344, "Text": "worlo", "Geometry": { "BoundingBox": { "Width": 0.33182239532470703, "Height": 0.3766750991344452, "Left": 0.5091826915740967, "Top": 0.23131252825260162 }, "Polygon": [ { "X": 0.5091826915740967, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.607987642288208 }, { "X": 0.5091826915740967, "Y": 0.607987642288208 } ] }, "Id": "193e9c47-fd87-475a-ba09-3fda210d8784", "Relationships": [ { "Type": "CHILD", "Ids": [ "ed135c3b-35dd-4085-8f00-26aedab0125f" ] } ], "Page": 1 }, { "BlockType": "LINE", "Confidence": 88.50325775146484, "Text": "world", "Geometry": { "BoundingBox": { "Width": 0.35004907846450806, "Height": 0.19635874032974243, "Left": 0.527581512928009, "Top": 0.30100569128990173 }, "Polygon": [ { "X": 0.527581512928009, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.49736443161964417 }, { "X": 0.527581512928009, "Y": 0.49736443161964417 } ] }, "Id": "bd8aeb62-961b-4b47-b78a-e4ed9eeecd0f", "Relationships": [ { "Type": "CHILD", "Ids": [ "9e28834d-798e-4a62-8862-a837dfd895a6" ] } ], "Page": 1 }, { "BlockType": "WORD", "Confidence": 53.301639556884766, "Text": "ellooworio", "Geometry": { "BoundingBox": { "Width": 1.0, "Height": 0.5365243554115295, "Left": 0.0, "Top": 0.46347561478614807 }, "Polygon": [ { "X": 0.0, "Y": 0.46347561478614807 }, { "X": 1.0, "Y": 0.46347561478614807 }, { "X": 1.0, "Y": 1.0 }, { "X": 0.0, "Y": 1.0 } ] }, "Id": "170c3eb9-5155-4bec-8c44-173bba537e70", "Page": 1 }, { "BlockType": "WORD", "Confidence": 88.46246337890625, "Text": "He", "Geometry": { "BoundingBox": { "Width": 0.15350718796253204, "Height": 0.29955607652664185, "Left": 0.13885067403316498, "Top": 0.21856294572353363 }, "Polygon": [ { "X": 0.13885067403316498, "Y": 0.21856294572353363 }, { "X": 0.292357861995697, "Y": 0.21856294572353363 }, { "X": 0.292357861995697, "Y": 0.5181190371513367 }, { "X": 0.13885067403316498, "Y": 0.5181190371513367 } ] }, "Id": "516ae823-3bab-4f9a-9d74-ad7150d128ab", "Page": 1 }, { "BlockType": "WORD", "Confidence": 89.8501968383789, "Text": "llo,", "Geometry": { "BoundingBox": { "Width": 0.17724157869815826, "Height": 0.49159327149391174, "Left": 0.2980354428291321, "Top": 0.17169663310050964 }, "Polygon": [ { "X": 0.2980354428291321, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.17169663310050964 }, { "X": 0.47527703642845154, "Y": 0.6632899045944214 }, { "X": 0.2980354428291321, "Y": 0.6632899045944214 } ] }, "Id": "6bcf4ea8-bbe8-4686-91be-b98dd63bc6a6", "Page": 1 }, { "BlockType": "WORD", "Confidence": 82.44834899902344, "Text": "worlo", "Geometry": { "BoundingBox": { "Width": 0.33182239532470703, "Height": 0.3766750991344452, "Left": 0.5091826915740967, "Top": 0.23131252825260162 }, "Polygon": [ { "X": 0.5091826915740967, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.23131252825260162 }, { "X": 0.8410050868988037, "Y": 0.607987642288208 }, { "X": 0.5091826915740967, "Y": 0.607987642288208 } ] }, "Id": "ed135c3b-35dd-4085-8f00-26aedab0125f", "Page": 1 }, { "BlockType": "WORD", "Confidence": 88.50325775146484, "Text": "world", "Geometry": { "BoundingBox": { "Width": 0.35004907846450806, "Height": 0.19635874032974243, "Left": 0.527581512928009, "Top": 0.30100569128990173 }, "Polygon": [ { "X": 0.527581512928009, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.30100569128990173 }, { "X": 0.8776305913925171, "Y": 0.49736443161964417 }, { "X": 0.527581512928009, "Y": 0.49736443161964417 } ] }, "Id": "9e28834d-798e-4a62-8862-a837dfd895a6", "Page": 1 } ] }
어댑터 사용
Amazon Textract를 사용하면 StartDocumentAnalysis 작업을 호출할 때 어댑터를 사용할 수 있습니다. 어댑터를 사용하려면 먼저 Amazon Textract 콘솔을 사용하여 어댑터를 생성하고 훈련시켜야 합니다. 어댑터를 적용하려면 StartDocumentAnalysis API 작업을 호출할 때 해당 ID를 제공합니다. StartDocumentAnalysis 작업을 호출할 때 페이지당 최대 하나의 어댑터를 사용할 수 있습니다.
"AdaptersConfig": { "Adapters": [ { "AdapterId": "2e9bf1c4aa31", "Version": "1", "Pages": [ "1" ] } ] }