Amazon Textract 비동기 작업 호출 - Amazon Textract

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Textract 비동기 작업 호출

Amazon Textract Textract는 PDF 또는 TIFF 형식으로 여러 페이지 문서를 처리하는 데 사용할 수 있는 비동기 API를 제공합니다. 비동기 작업을 사용하여 JPEG, PNG, TIFF 또는 PDF 형식의 단일 페이지 문서를 처리할 수도 있습니다.

이 주제의 정보는 텍스트 검색 작업을 사용하여 Amazon Textract 비동기 작업을 사용하는 방법을 보여줍니다. 동일한 접근 방식이 텍스트 분석 작업에서 작동합니다.StartDocumentAnalysisGetDocumentAnalysis. 또한 에서 동일하게 작동합니다.StartExpenseAnalysisGetExpenseAnalysis.

문제 해결 예는 다중 페이지 문서에서 텍스트 감지 또는 분석을(를) 참조하십시오.

Amazon Textract S3 버킷에 저장된 문서를 비동기식으로 처리합니다. a를 호출하여 처리를 시작합니다.Start다음과 같은 작업StartDocumentTextDetection. 요청 완료 상태가 Amazon Simple Notification Service (Amazon SNS) 주제에 게시됩니다. Amazon SNS 주제에서 완료 상태를 가져오려면 Amazon Simple Queue Service (Amazon SQS) 대기열 또는AWS Lambda함수. 완료 상태가 되면 GetDocumentTextDetection 같은 Get 작업을 불러와 요청 결과를 가져옵니다.

작업을 사용하여 Amazon S3 버킷을 지정하지 않는 한 비동기 호출 결과는 기본적으로 Amazon Textract 소유 버킷에 7일 동안 암호화되어 저장됩니다.OutputConfig인수.

다음 표에는 Amazon Textract Textract에서 지원하는 다양한 유형의 비동기 처리에 대한 해당 시작 및 Get 작업이 나와 있습니다.

Amazon Textract 비동기 작업을 위한 API 작업 시작/가져오기
처리 유형 API 시작 API 가져오기
텍스트 감지 StartDocumentTextDetection GetDocumentTextDetection
텍스트 분석 StartDocumentAnalysis GetDocumentAnalysis
비용 분석 시작익스텐스분석 GetExpense분석

를 사용하는 예제의 경우AWS Lambda함수, 참조Amazon Textract Textract를 사용한 대규모 문서 처리.

다음 그림은 Amazon S3 버킷에 저장된 문서 이미지에서 문서 텍스트를 감지하는 프로세스를 보여줍니다. 이 다이어그램에서 Amazon SQS 대기열은 Amazon SNS 주제의 완료 상태를 가져옵니다.

위 다이어그램에서 표시하는 프로세스는 텍스트 및 송장/영수증을 분석할 때 동일합니다. 호출하여 텍스트 분석을 시작합니다.StartDocumentAnalysis전화를 통해 인보이스/영수증 분석을 시작합니다.StartExpenseAnalysis호출하여 결과를 얻을 수 있습니다.GetDocumentAnalysis또는GetExpenseAnalysis각각.

텍스트 감지 시작

을 불러와 Amazon Textract 텍스트 감지 요청을 시작합니다.StartDocumentTextDetection. 다음은 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" }

입력 파라미터DocumentLocation에서는 문서 파일 이름과 파일을 검색할 수 있는 Amazon S3 버킷을 제공합니다.NotificationChannel텍스트 검색 요청이 완료될 때 Amazon Textract가 통지하는 Amazon SNS 주제의 Amazon 리소스 이름 (ARN) 이 포함됩니다. Amazon SNS 주제는 호출하는 Amazon Textract 엔드포인트와 동일한 AWS 리전에 있어야 합니다.NotificationChannel또한 Amazon Textract SNS 주제에 게시할 때 사용할 수 있는 역할의 ARN도 있습니다. Amazon Textract Textract는 IAM 서비스 역할을 생성하여 Amazon SNS 주제에 Amazon Textract의 게시 권한을 줍니다. 자세한 정보는 비동기 작업을 위한 Amazon Textract 구성을 참조하십시오.

선택적 입력 파라미터를 지정할 수도 있습니다.JobTag이렇게 하면 Amazon SNS 주제에 게시된 완료 상태에서 작업 또는 작업 그룹을 식별할 수 있습니다. 예를 들어 를 사용할 수 있습니다.JobTag세금 양식 또는 영수증과 같이 처리되는 문서의 유형을 식별합니다.

분석 작업이 실수로 중복되지 않도록 idempotent 토큰 ClientRequestToken을 선택적으로 제공할 수 있습니다. 에 대한 값을 제공하는 경우ClientRequestToken,Start작업이 동일하게 반환됩니다.JobId여러 개의 동일한 호출에 대해Start다음과 같은 작업StartDocumentTextDetection. ClientRequestToken 토큰은 수명이 7일입니다. 7일 후에 다시 사용할 수 있습니다. 토큰 수명 기간 동안 토큰을 재사용할 경우 다음과 같은 현상이 생깁니다.

  • 동일한 Start 작업과 동일한 입력 파라미터로 토큰을 다시 사용할 경우 동일한 JobId가 반환됩니다. 이 작업은 다시 실행되지 않으며 Amazon Textract TExtract는 등록된 Amazon SNS 주제에 완료 상태를 전송하지 않습니다.

  • 동일한 Start 작업에서 약간의 입력 파라미터를 변경하여 토큰을 재사용할 경우 idempotentparametermismatchexception(HTTP 상태 코드: 400) 예외가 표시됩니다.

  • 다른 Start 작업에 토큰을 재사용할 경우 작업이 진행됩니다.

사용 가능한 또 다른 선택적 매개 변수는OutputConfig를 사용하면 출력 위치를 조정할 수 있습니다. 기본적으로 Amazon Textract Textract는 결과를 내부적으로 저장하며 Get API 작업에서만 액세스할 수 있습니다. 다음으로 바꿉니다.OutputConfig활성화하면 출력이 전송될 버킷의 이름과 결과를 다운로드할 수 있는 결과의 파일 접두사를 설정할 수 있습니다. 또한 를 설정할 수 있습니다.KMSKeyID고객 관리 키에 대한 매개 변수를 사용하여 출력을 암호화합니다. 이 매개 변수를 설정하지 않으면 Amazon Textract Textract는 다음을 사용하여 서버 측을 암호화합니다.AWS 관리형 키Amazon S3용

참고

이 매개 변수를 사용하기 전에 출력 버킷에 대한 PutObject 권한이 있는지 확인하십시오. 또한, 에 대한 암호 해독, ReEncrypt, GenerateDataKey 및 DescribeKey 권한이 있는지 확인합니다.AWS KMS키를 사용하기로 결정한 경우.

StartDocumentTextDetection 작업에 대한 응답은 작업 식별자입니다(JobId). 사용JobId을 사용하여 Amazon Textract가 Amazon SNS 주제에 완료 상태를 게시한 후에 요청을 추적하고 분석 결과를 가져옵니다. 다음은 그 한 예입니다.

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

너무 많은 작업을 동시에 시작하는 경우StartDocumentTextDetection를 올리십시오LimitExceededException동시 실행 작업의 수가 Amazon Textract 서비스 제한 미만이 될 때까지 예외 (HTTP 상태 코드: 400) 입니다.

다수의 작업으로 인해 LimitExceededException 예외가 발생하는 경우에는 Amazon SQS 대기열을 사용하여 수신되는 요청을 관리하는 것이 좋습니다. 연락처AWSAmazon SQS 대기열로도 평균 동시 요청 수를 관리하지 못하여 계속 수신할 경우에는 SupportLimitExceededException예외.

Amazon Textract 분석 요청의 완료 상태 가져오기

Amazon Textract Textract는 등록된 Amazon SNS 주제로 분석 완료 알림을 보냅니다. 알림에는 JSON 문자열 형태의 작업 완료 상태와 작업 식별자가 포함됩니다. 성공적인 텍스트 감지 요청에는SUCCEEDED상태가 됩니다. 예를 들어, 다음 결과는 텍스트 감지 작업의 성공적인 처리를 보여줍니다.

{ "JobId": "642492aea78a86a40665555dc375ee97bc963f342b29cd05030f19bd8fd1bc5f", "Status": "SUCCEEDED", "API": "StartDocumentTextDetection", "JobTag": "Receipt", "Timestamp": 1543599965969, "DocumentLocation": { "S3ObjectName": "document", "S3Bucket": "bucket" } }

자세한 정보는 Amazon Textract TextractResults 알림을 참조하십시오.

Amazon Textract가 Amazon SNS 주제에 게시한 상태 정보를 가져오려면 다음 옵션 중 하나를 사용합니다.

  • AWS Lambda— 구독할 수 있습니다AWS LambdaAmazon SNS 주제에 기록하는 함수입니다. 이 함수는 Amazon Textract Textract가 Amazon SNS 주제에 요청 완료 사실을 알릴 때 호출됩니다. 서버 측 코드로 텍스트 감지 요청 결과를 처리하도록 하려면 Lambda 함수를 사용합니다. 예를 들어, 서버 측 코드를 사용하여 이미지에 주석을 달거나 감지된 텍스트에 관한 보고서를 생성한 후에 정보를 클라이언트 애플리케이션으로 반환해야 하는 경우가 있을 수 있습니다.

  • Amazon SQS— Amazon SQS 대기열에서 Amazon SNS 주제를 구독할 수 있습니다. 그런 다음 Amazon SQS 대기열을 폴링하여 텍스트 검색 요청이 완료될 때 Amazon Textract Textract가 게시한 완료 상태를 검색합니다. 자세한 정보는 다중 페이지 문서에서 텍스트 감지 또는 분석을 참조하십시오. Amazon Textract 작업을 클라이언트 애플리케이션에서만 불러와야 할 경우에는 Amazon SQS 대기열을 사용합니다.

중요

Amazon Textract 을 반복해서 불러와 요청 완료 상태를 가져오는 것은 권장하지 않습니다.Get작업을 사용합니다. 이는 Amazon Textract Textract가Get요청이 너무 많을 경우 작업을 수행합니다. 여러 문서를 동시에 처리할 경우에는 Amazon Textract Textract가 각 작업의 상태를 개별적으로 확인하기 위해 폴링하는 것보다는 하나의 SQS 대기열을 완료 알림을 모니터링하는 것이 더 효율적이고 간단합니다.

Amazon Textract 텍스트 탐지 결과 얻기

텍스트 탐지 요청의 결과를 가져오려면 먼저 Amazon SNS 주제에서 검색된 완료 상태가 인지 확인합니다.SUCCEEDED. 그런 다음 GetDocumentTextDetection을 호출하면 이에 의해 StartDocumentTextDetection에서 반환된 JobId 값이 통과됩니다. 요청 JSON은 다음 예제와 비슷합니다.

{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3", "MaxResults": 10, "SortBy": "TIMESTAMP" }

JobId는 텍스트 감지 작업의 식별자입니다. 텍스트 감지는 대량의 데이터를 생성할 수 있으므로MaxResults단일 결과로 반환할 최대 결과 수를 지정합니다.Get작업을 사용합니다. 의 기본값MaxResults1,000입니다. 1,000보다 큰 값을 지정한 경우에는 1,000개의 결과만 반환됩니다. 작업에서 모든 결과가 반환되지 않을 경우에는 다음 페이지의 페이지 매김 토큰이 반환됩니다. 결과의 다음 페이지를 가져오려면 에서 토큰을 지정하십시오.NextToken파라미터.

참고

Amazon Textract Textract는 비동기식 작업의 결과를 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 } ] }