Amazon Textract で画像からテキスト、手書文字、データを抽出する

Textract は、画像からテキスト、手書文字、データを自動抽出する機械学習サービスです。
単純な光学文字認識 (OCR) のレベルにとどまらず、フォームやテーブルのデータも識別、理解したうえで抽出することが可能です。
Textract では機械学習を利用し、OCR ソフトウェアで必要になるような、抽出データからフォーム変更するような手間のかかる作業を削減できます。
あらゆるドキュメントを即座に読み取り、テキスト、手書文字、テーブルなどを正確に判断し、数時間、数日かかる手作業は必要とせず、数分で抽出できます。
Textract は、Service Organization Control (SOC)、International Organization for Standardization (ISO)、PCI、HIPAA、および GDPR
に準拠しているため、顧客データを保護するセキュリティが考慮されており、AWS Privatelink および KMS を介してVPC エンドポイントをサポートして、
パブリックインターネットの回避、データを暗号化を利用できます。

Rekognitionは、画像内の文字認識に対応しているが、TextractはテキストのOCR判別に特化したサービスとして切り離されている。
ただし、現在、Textractは日本語に対応していないので、このサービスが威力を発揮するには、日本語対応を待たなければならない。
ということで、料金に関してとAPIリファレンスだけ取り上げます。

Textract の料金

使用した文書のページ数に応じて課金されます。1ページにつき対応できる文字数は0 から 3,000ワードです。
無料利用枠  最初の3か月間、DetectDocumentTextAPIを使用して月に 1,000 ページ、AnalyzeDocumentAPIを使用して月に100ページまで分析できます。

APIリファレンス

boto3  boto3.client関数

機能  デフォルトのセッションを使用して、低レベルのサービスクライアントを作成する

構文  boto3.client(クライアント名)

戻り値 サービスクライアントのオブジェクト

Textract  detect_document_textメソッド

機能

Amazon Textractは、テキストの行とテキストの行を構成する単語を検出できます。(JPEGまたはPNG形式の画像)
ブロックオブジェクトのDetectDocumentText配列で検出されたテキストを返します。
各ドキュメントページには、PAGEタイプのブロックが関連付けられています。 
各PAGEブロックオブジェクトは、ページ上で検出されたテキストの行を表すLINEブロックオブジェクトの親です。 
LINE Blockオブジェクトは、行を構成する各単語の親です。 単語は、WORDタイプのBlockオブジェクトで表されます。
DetectDocumentTextは同期処理です。非同期で分析するには、StartDocumentTextDetectionを使用します。

構文

{
   "Document": { 
      "Bytes": blob,
      "S3Object": { 
         "Bucket": "string",
         "Name": "string",
         "Version": "string"
      }
   }
}

戻り値

{
   "Blocks": [ 
      { 
         "BlockType": "string",
         "ColumnIndex": number,
         "ColumnSpan": number,
         "Confidence": number,
         "EntityTypes": [ "string" ],
         "Geometry": { 
            "BoundingBox": { 
               "Height": number,
               "Left": number,
               "Top": number,
               "Width": number
            },
            "Polygon": [ 
               { 
                  "X": number,
                  "Y": number
               }
            ]
         },
         "Id": "string",
         "Page": number,
         "Relationships": [ 
            { 
               "Ids": [ "string" ],
               "Type": "string"
            }
         ],
         "RowIndex": number,
         "RowSpan": number,
         "SelectionStatus": "string",
         "Text": "string",
         "TextType": "string"
      }
   ],
   "DetectDocumentTextModelVersion": "string",
   "DocumentMetadata": { 
      "Pages": number
   }
}

構文説明

リクエストは、JSON形式で次のデータを受け入れます。	
	
[Document]	
	
	base64でエンコードされたバイトまたはAmazonS3オブジェクトとしての入力ドキュメント。
	AWSCLIを使用してAmazonTextractオペレーションを呼び出す場合、画像バイトを渡すことはできません。
	ドキュメントは、JPEGまたはPNG形式の画像である必要があります。
	
	タイプ:ドキュメントオブジェクト
	指定は必須

戻り値説明

アクションが成功すると、サービスはHTTP200応答を送り返します。	
次のデータは、サービスによってJSON形式で返されます。	
	
[Blocks]	
	
	Blockドキュメントで検出されたテキストを含むオブジェクトの配列。
	タイプ:ブロックオブジェクトの 配列
	
[DetectDocumentTextModelVersion]	
	
	タイプ:文字列
	
[DocumentMetadata]	
	
	ドキュメントに関するメタデータ。これには、ドキュメントで検出されたページ数が含まれています。
	タイプ:DocumentMetadataオブジェクト

エラー内容

AccessDeniedException	
	
	アクションを実行する権限がありません。許可されたユーザーまたはIAMロールのAmazonリソース名(ARN)を使用して操作を実行します。
	HTTPステータスコード:400
	
BadDocumentException	
	
	AmazonTextractはドキュメントを読み取ることができません。
	HTTPステータスコード:400
	
DocumentTooLargeException	
	
	ドキュメントが大きすぎるため、処理できません。同期操作の最大ドキュメントサイズは10MBです。
	非同期操作の最大ドキュメントサイズは、PDFファイルの場合500MBです。
	HTTPステータスコード:400
	
InternalServerError	
	
	AmazonTextractでサービスの問題が発生しました。もう一度電話をかけてください。
	HTTPステータスコード:500
	
InvalidParameterException	
	
	入力パラメーターが制約に違反しました。たとえば、同期操作でInvalidParameterExceptionは、
	S3ObjectまたはBytes値のどちらもDocument 要求パラメーターに指定されていない場合に例外が発生します。
	API操作を再度呼び出す前に、パラメーターを検証してください。
	HTTPステータスコード:400
	
InvalidS3ObjectException	
	
	Amazon Textractは、リクエストで指定されたS3オブジェクトにアクセスできません。
	HTTPステータスコード:400
	
ProvidedThroughputExceededException	
	
	リクエストの数がスループット制限を超えました。この制限を増やしたい場合は、AmazonTextractにお問い合わせください。
	HTTPステータスコード:400
	
ThrottlingException	
	
	AmazonTextractは一時的にリクエストを処理できません。もう一度電話をかけてください。
	HTTPステータスコード:500
	
UnsupportedDocumentException	
	
	入力ドキュメントの形式はサポートされていません。同期操作用のドキュメントは、PNGまたはJPEG形式にすることができます。
	非同期操作のドキュメントもPDF形式にすることができます。
	HTTPステータスコード:400

Textract  analyze_documentメソッド

機能

検出されたアイテム間の関係について入力ドキュメントを分析します。
返される情報の種類は次のとおりです。

・フォームデータ(キーと値のペア)
 関連情報は、それぞれタイプKEY_VALUE_SETの2つのBlockオブジェクト(KEYBlockオブジェクトとVALUEBlockオブジェクト)で返されます。
 たとえば、Name:Ana SilvaCarolina にはキーと値が含まれています。 Nameがキーで、AnaSilvaCarolina が値です。

・テーブルとテーブルセルのデータ
 TABLEブロックオブジェクトには、検出されたテーブルに関する情報が含まれています。
  テーブル内のセルごとにCELLブロックオブジェクトが返されます。

・テキストの行と単語。
 LINEブロックオブジェクトには、1つ以上のWORDブロックオブジェクトが含まれています。
 ドキュメントで検出されたすべての行と単語が返されます(FeatureTypesの値と関係のないテキストを含む)

チェックボックスやオプションボタン(ラジオボタン)などの選択要素は、フォームデータとテーブルで検出できます。
SELECTION_ELEMENTブロックオブジェクトには、選択ステータスなど、選択要素に関する情報が含まれています。
FeatureTypesリストを指定することにより、実行する分析のタイプを選択できます。
出力は、ブロックオブジェクトのリストで返されます。
AnalyzeDocumentは同期操作です。ドキュメントを非同期で分析するには、StartDocumentAnalysisを使用します。

構文

{
   "Document": { 
      "Bytes": blob,
      "S3Object": { 
         "Bucket": "string",
         "Name": "string",
         "Version": "string"
      }
   },
   "FeatureTypes": [ "string" ],
   "HumanLoopConfig": { 
      "DataAttributes": { 
         "ContentClassifiers": [ "string" ]
      },
      "FlowDefinitionArn": "string",
      "HumanLoopName": "string"
   }
}

戻り値

{
   "AnalyzeDocumentModelVersion": "string",
   "Blocks": [ 
      { 
         "BlockType": "string",
         "ColumnIndex": number,
         "ColumnSpan": number,
         "Confidence": number,
         "EntityTypes": [ "string" ],
         "Geometry": { 
            "BoundingBox": { 
               "Height": number,
               "Left": number,
               "Top": number,
               "Width": number
            },
            "Polygon": [ 
               { 
                  "X": number,
                  "Y": number
               }
            ]
         },
         "Id": "string",
         "Page": number,
         "Relationships": [ 
            { 
               "Ids": [ "string" ],
               "Type": "string"
            }
         ],
         "RowIndex": number,
         "RowSpan": number,
         "SelectionStatus": "string",
         "Text": "string",
         "TextType": "string"
      }
   ],
   "DocumentMetadata": { 
      "Pages": number
   },
   "HumanLoopActivationOutput": { 
      "HumanLoopActivationConditionsEvaluationResults": "string",
      "HumanLoopActivationReasons": [ "string" ],
      "HumanLoopArn": "string"
   }
}

構文説明

[Document]	
	
	base64でエンコードされたバイトまたはAmazonS3オブジェクトとしての入力ドキュメント。(JPEGまたはPNG形式の画像)
	AWSCLIを使用してAmazonTextractオペレーションを呼び出す場合、画像バイトを渡すことはできません。
	AWSSDKを使用してAmazonTextractを呼び出す場合は、Bytesフィールドを使用して渡される画像バイトを
	base64エンコードする必要がない場合があります。
	タイプ:ドキュメントオブジェクト
	指定は必須
	
[FeatureTypes]	
	
	実行する分析のタイプのリスト。リストにTABLESを追加して、入力ドキュメントで検出されたテーブルに関する情報を返します。
	検出されたフォームデータを返すには、FORMSを追加します。
	両方のタイプの分析を実行するには、TABLESとFORMSをFeatureTypesに追加します。
	ドキュメントで検出されたすべての行と単語が応答に含まれます。(FeatureTypesの値に関連しないテキストを含む)
	タイプ:文字列の配列
	有効な値: TABLES | FORMS
	指定は必須
	
	
[HumanLoopConfig]	
	
	ドキュメントを分析するためのループワークフローで人間の構成を設定します。
	タイプ:HumanLoopConfigオブジェクト
	指定は必須ではない

戻り値

アクションが成功すると、サービスはHTTP200応答を送り返します。	
次のデータは、サービスによってJSON形式で返されます。	
	
[AnalyzeDocumentModelVersion]	
	
	ドキュメントの分析に使用されたモデルのバージョン。
	タイプ:文字列
	
[Blocks]	
	
	AnalyzeDocumentによって検出および分析されるアイテム。
	タイプ:ブロックオブジェクトの 配列
	
[DocumentMetadata]	
	
	分析されたドキュメントに関するメタデータ。
	タイプ:DocumentMetadataオブジェクト
	
[HumanLoopActivationOutput]	
	
	ループ評価における人間の結果を示します。
	タイプ:HumanLoopActivationOutputオブジェクト

エラー内容

AccessDeniedException	
	
	アクションを実行する権限がありません。許可されたユーザーまたはIAMロールのAmazonリソース名(ARN)を使用して操作を実行します。
	HTTPステータスコード:400
	
BadDocumentException	
	
	AmazonTextractはドキュメントを読み取ることができません。
	HTTPステータスコード:400
	
DocumentTooLargeException	
	
	ドキュメントが大きすぎるため、処理できません。同期操作の最大ドキュメントサイズは10MBです。
	非同期操作の最大ドキュメントサイズは、PDFファイルの場合500MBです。
	HTTPステータスコード:400
	
HumanLoopQuotaExceededException	
	
	利用可能なループワークフローでアクティブな人間の最大数を超えたことを示します
	HTTPステータスコード:400
	
InternalServerError	
	
	AmazonTextractでサービスの問題が発生しました。もう一度電話をかけてください。
	HTTPステータスコード:500
	
InvalidParameterException	
	
	入力パラメーターが制約に違反しました。
	たとえば、同期操作でInvalidParameterExceptionは、S3ObjectまたはBytes値のどちらもDocument 要求パラメーターに
	指定されていない場合に例外が発生します。
	API操作を再度呼び出す前に、パラメーターを検証してください。
	HTTPステータスコード:400
	
InvalidS3ObjectException	
	
	Amazon Textractは、リクエストで指定されたS3オブジェクトにアクセスできません。
	HTTPステータスコード:400
	
ProvidedThroughputExceededException	
	
	リクエストの数がスループット制限を超えました。この制限を増やしたい場合は、AmazonTextractにお問い合わせください。
	HTTPステータスコード:400
	
ThrottlingException	
	
	AmazonTextractは一時的にリクエストを処理できません。もう一度電話をかけてください。
	HTTPステータスコード:500
	
UnsupportedDocumentException	
	
	入力ドキュメントの形式はサポートされていません。
	同期操作用のドキュメントは、PNGまたはJPEG形式にすることができます。
	非同期操作のドキュメントは、PDF形式にすることができます。
	HTTPステータスコード:400