Llamar a operaciones asíncronas de Amazon Textract - Amazon Textract

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Llamar a operaciones asíncronas de Amazon Textract

Amazon Textract Texact proporciona una API asíncrona que puede utilizar para procesar documentos de varias páginas en formato PDF o TIFF. También puede utilizar operaciones asíncronas para procesar documentos de una sola página en formato JPEG, PNG, TIFF o PDF.

La información de este tema utiliza operaciones de detección de texto para mostrar cómo utilizar las operaciones asíncronas de Amazon Textract Texact. El mismo enfoque funciona con las operaciones de análisis de textos deStartDocumentAnalysisyGetDocumentAnalysis. También funciona igual conStartExpenseAnalysisyGetExpenseAnalysis.

Para ver un ejemplo, consulte Detección o análisis de texto en un documento de varias páginas.

Amazon Textract procesa de forma asíncrona un documento almacenado en un bucket de Amazon S3. Empiezas a procesar llamando a unStartoperación, tales comoStartDocumentTextDetection. El estado de realización de la solicitud se publica en un tema de Amazon Simple Notification Service (Amazon SNS). Para obtener el estado de realización del tema de Amazon SNS, puede utilizar una cola de Amazon Simple Queue Service (Amazon SQS) o unaAWS Lambdafunción. Una vez que disponga del estado de realización, llame a una operación Get, como GetDocumentTextDetection, para obtener los resultados de la solicitud.

Los resultados de las llamadas asíncronas se cifran y almacenan durante 7 días en un bucket propiedad de Amazon Textract Texact de forma predeterminada, a menos que especifique un bucket de Amazon S3 mediante una operaciónOutputConfigargumento.

En la tabla siguiente se muestran las operaciones Start y Get correspondientes para los distintos tipos de procesamiento asíncrono admitidos por Amazon Textract:

Iniciar/obtener operaciones de API para operaciones asíncronas de Amazon Textract
Tipo de procesamiento API de inicio Obtenga la API
Detección de texto StartDocumentTextDetection GetDocumentTextDetection
Análisis de texto StartDocumentAnalysis GetDocumentAnalysis
Análisis de gastos Iniciar análisis de gastos Obtener análisis de gastos

Para un ejemplo que utilizaAWS Lambdafunciones, consulteProcesamiento de documentos a gran escala con Amazon Textract.

En el siguiente diagrama se muestra el proceso para detectar el texto de un documento en una imagen de documento almacenada en un bucket de Amazon S3. En el diagrama, una cola de Amazon SQS obtiene el estado de realización a partir del tema de Amazon SNS.

El proceso que muestra el diagrama anterior es el mismo para analizar texto y facturas/recibos. Empiezas a analizar texto llamandoStartDocumentAnalysisy comienza a analizar facturas/recibos llamandoStartExpenseAnalysisObtienes los resultados llamandoGetDocumentAnalysisoGetExpenseAnalysisrespectivamente.

Iniciar la detección de texto

Para iniciar una solicitud de detección de texto de Amazon Textract, llame aStartDocumentTextDetection. El siguiente es un ejemplo de una solicitud JSON que ha transferido StartDocumentTextDetection.

{ "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" }

El parámetro de entradaDocumentLocationproporciona el nombre de archivo de documento y el bucket de Amazon S3 desde el que recuperarlo.NotificationChannelcontiene el nombre de recurso de Amazon (ARN) del tema de Amazon SNS que Amazon Textract notifica cuando finaliza la solicitud de detección de texto. El tema de Amazon SNS debe estar en la misma región de AWS que el punto de enlace Amazon Textract Texact al que está llamando.NotificationChanneltambién contiene el ARN de un rol que permite a Amazon Textract Texact publicar en el tema de Amazon SNS. Puede conceder permisos de Amazon Textract Texact a sus temas de Amazon SNS creando un rol de servicio de IAM. Para obtener más información, consulte Configuración de Amazon Textract Texact para operaciones asíncronas.

También puede especificar un parámetro de entrada opcional,JobTag, que le permite identificar el trabajo o los grupos de trabajos en el estado de realización que se ha publicado en el tema de Amazon SNS. Por ejemplo, puede utilizarJobTagpara identificar el tipo de documento que se está procesando, como un formulario fiscal o un recibo.

Para evitar la duplicación accidental de trabajos de análisis, tiene la opción de proporcionar un token idempotente, ClientRequestToken. Si proporciona un valor paraClientRequestToken, elStartLa operación devuelve lo mismoJobIdpara varias llamadas idénticas alStartoperación, tales comoStartDocumentTextDetection. Un token ClientRequestToken tiene una vida útil de 7 días. Después de 7 días, puede volver a utilizarla. Si reutiliza el token durante el ciclo de vida del token, sucede lo siguiente:

  • Si reutiliza el token con la misma operación Start y los mismos parámetros de entrada, se devuelve el mismo JobId. El trabajo no se vuelve a realizar de nuevo y Amazon Textract no envía un estado de realización al tema de Amazon SNS registrado.

  • Si vuelve a utilizar el token con la misma operación Start y un cambio de parámetro de entrada menor, obtendrá una excepción idempotentparametermismatchexception (código de estado HTTP: 400).

  • Si reutiliza el token con otra operación Start distinta, la operación se realiza correctamente.

Otro parámetro opcional disponible esOutputConfig, que le permite ajustar dónde se colocará la salida. De forma predeterminada, Amazon Textract Texact almacenará los resultados internamente y solo se puede acceder a ellos mediante las operaciones de Get API. conOutputConfighabilitado, puede establecer el nombre del depósito al que se enviará la salida y el prefijo de archivo de los resultados, donde puede descargar los resultados. También puede configurar laKMSKeyIDparámetro a una clave administrada por el cliente para cifrar la salida. Sin este conjunto de parámetros, Amazon Textract Texact cifrará el lado del servidor mediante elClave administrada de AWSpara Amazon S3

nota

Antes de utilizar este parámetro, asegúrese de tener el permiso PutObject para el bucket de salida. Además, asegúrese de tener los permisos Descifrar, ReEncrypt, GenerateDataKey y DescribeKey para elAWS KMSclave si decides usarla.

La respuesta a la operación StartDocumentTextDetection es un identificador de trabajo (JobId). UsarJobIdpara realizar un seguimiento de las solicitudes y obtener los resultados de análisis después de que Amazon Textract haya publicado el estado de realización en el tema de Amazon SNS. A continuación se muestra un ejemplo:

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

Si empiezas demasiados trabajos simultáneamente, llama aStartDocumentTextDetectionRAISE UNLimitExceededExceptionexcepción (código de estado HTTP: 400) hasta que el número de trabajos ejecutados simultáneamente se encuentre por debajo del límite de servicio de Amazon Textract Texact.

Si descubre que las excepciones LimitExceededException se producen con picos de actividad, considere la posibilidad de usar una cola de Amazon SQS para administrar las solicitudes entrantes. ContactoAWSSupport técnico si descubre que el número medio de solicitudes simultáneas no se puede administrar con una cola de Amazon SQS y sigue recibiendoLimitExceededExceptionexcepciones.

Obtención del estado de realización de una solicitud de Amazon Textract Analysis

Amazon Textract envía una notificación a la realización de análisis al tema de Amazon SNS registrado. La notificación incluye el identificador de trabajo y el estado de realización de la operación en una cadena de JSON. Una solicitud de detección de texto correcta tiene unSUCCEEDEDestado. Por ejemplo, el siguiente resultado muestra el procesamiento correcto de un trabajo de detección de texto.

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

Para obtener más información, consulte Notificación de resultados de Amazon Textract.

Para obtener la información de estado que Amazon Textract ha publicado en el tema de Amazon SNS, utilice una de las siguientes opciones:

  • AWS Lambda— Puede suscribirse a unAWS Lambdaque escribe en un tema de Amazon SNS. Se llama a la función cuando Amazon Textract notifica al tema de Amazon SNS que la solicitud se ha completado. Utilice una función Lambda si desea que el código del servidor procese los resultados de una solicitud de detección de texto. Por ejemplo, es posible que desee utilizar el código del servidor para anotar la imagen o crear un informe sobre el texto detectado antes de devolver la información a una aplicación cliente.

  • Amazon SQS— Puede suscribir una cola de Amazon SQS a un tema de Amazon SNS. A continuación, sondee la cola de Amazon SQS para recuperar el estado de realización publicado por Amazon Textract cuando se completa una solicitud de detección de texto. Para obtener más información, consulte Detección o análisis de texto en un documento de varias páginas. Utilice una cola de Amazon SQS si desea llamar a operaciones de Amazon Textract Texact solo desde una aplicación cliente.

importante

No le recomendamos obtener el estado de realización de solicitud llamando repetidamente a Amazon TextractGet. Esto se debe a que Amazon Textract Texact limita elGetsi se realizan demasiadas solicitudes. Si está procesando varios documentos al mismo tiempo, es más sencillo y más eficaz supervisar una cola de SQS para la notificación de realización que sondear Amazon Textract detectar el estado de cada trabajo individualmente.

Obtener resultados de detección de texto de Amazon Textract

Para obtener los resultados de una solicitud de detección de texto, en primer lugar, asegúrese de que el estado de realización que se ha recuperado del tema de Amazon SNS esSUCCEEDED. A continuación, llame a GetDocumentTextDetection, que transfiere el valor JobId que se devuelve desde StartDocumentTextDetection. El JSON de la solicitud es similar al siguiente ejemplo:

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

JobIdes el identificador de la operación de detección de texto. Como la detección de texto puede generar grandes cantidades de datos, utiliceMaxResultspara especificar el número máximo de resultados que se devuelven en un soloGet. El valor predeterminado deMaxResultses 1000. Si especifica un valor superior a 1 000, solo se devuelven 1 000 resultados. Si la operación no devuelve todos los resultados, se devuelve un token de paginación para la página siguiente. Para obtener la siguiente página de resultados, especifique el token en elNextTokenparámetro.

nota

Amazon Textract Texact conserva los resultados de operaciones asíncronas durante siete días. No puede recuperar los resultados transcurrido este plazo.

LaGetDocumentTextDetectionJSON de respuesta de operación es similar al siguiente. El número total de páginas detectadas se devuelve enDocumentMetadata. El texto detectado se devuelve en elBlocksmatriz. Para obtener información sobreBlockobjetos, consulteObjetos de respuesta de detección de texto y análisis de documentos.

{ "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 } ] }