AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、AWSのAIドキュメント分析サービス「Amazon Textract」をPythonで利用する方法を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、AWSのAIドキュメント分析サービス「Amazon Textract」をPythonで利用します。以下、Amazon Textractに用意されているメソッドを概観し、幾つかの使い方を紹介します。
AWSには、事前トレーニング済みのAI(人工知能)を手軽に利用できる「AIサービス」が多数用意されており、その内容はコンピュータビジョン、言語、レコメンデーション、予測と多岐にわたります。
今回紹介するAmazon Textract(以下、Textract)は、スキャンされたドキュメントから活字と手書き文字を認識し、表や書式などの構造化された情報もテンプレートなしで検出するサービスです。これによって、人による入力作業や単純な光学文字認識(OCR)ソフトウェアを使用した場合に比べて、データをより迅速かつ柔軟に抽出できるようになります。
肝心の対応言語ですが、Textractは日本語には現在未対応です。活字で認識可能な言語は、英語、スペイン語、イタリア語、フランス語、ポルトガル語、ドイツ語、手書き文字で認識可能なのは、英語のアルファベットとASCII記号です。現時点で日本語未対応なのが残念なところですが、今後のアップデートを見据えた記事として、または、現在対応中の言語での利用を想定した記事として、本稿を参照してください。
AWSの「AIサービス」はコンソール画面から利用できますが、開発を念頭に置かなくても、慣れてくれば今回のようにAPIを利用する方がより便利で効率的に感じてくるでしょう。本稿がそのように利用するきっかけになれば幸いです。
Textractは従量課金制で、用途に応じた4つのAPI操作に対して異なる料金が設定されています(Textractは東京リージョンと大阪リージョンでは提供されていないので、以下では参考としてバージニア北部リージョンの料金を掲載します)。
1.「Detect Document Text API」は、活字と手書き文字を認識します。最初の100万ページまでは1ページ当たり0.0015ドル(米ドル、以下同)、100万ページを超えると1ページ当たり0.0006ドルになります。
2.「表用Analyze Document API」は、活字と手書き文字の認識に加えて、表の構造を検出します。最初の100万ページまでは1ページ当たり0.015ドル、100万ページを超えると1ページ当たり0.01ドルになります。
3.「フォーム用Analyze Document API」は、活字と手書き文字の認識に加えて、書式における「キー」と「値」のペア(例えば、【姓】という「キー」と、対応する【山田】という「値」など)構造を検出します。最初の100万ページまでは1ページ当たり0.05ドル、100万ページを超えると1ページ当たり0.04ドルになります。
4.「Analyze Expense API」は、請求書や領収書から各項目と対応する値のペアを検出します(現在は英語のみ対応)。最初の100万ページまでは1ページ当たり0.01ドル、100万ページを超えると1ページ当たり0.008ドルになります。
なおTextractは無料利用枠の対象になっており、最初のリクエストから3カ月間は1カ月当たりDetect Document Text APIを使用して1000ページまで、Analyze Document APIまたはAnalyze Expense APIを使用して100ページまで無料で分析することができます(ただし、無料利用枠を超えた場合には従量課金が適用されます)。
ちなみに、上記における「ページ」とは、PNGまたはJPEGにおける画像1枚のことです。仮に1枚のスキャンイメージに複数のページあったとしても、Textractでは1ページと認識されます。PDFとTIFFの場合は、ドキュメントの各ページが処理されたページとしてカウントされます。
本稿では、読者の環境で下記要件が満たされていることを仮定しています。
なおこれは必須ではありませんが、以下のサンプルコードは「Jupyter Notebook」での実行を想定しています。
Textractには以下のメソッドが用意されています。
メソッド名 | 機能 | 引数 | 戻り値 |
---|---|---|---|
detect_document_text | 入力ドキュメント内の文字を認識する | ドキュメントデータ | 辞書 |
analyze_document | 入力ドキュメント内で検出されたアイテム間の関係を解析する | ドキュメントデータ、FeatureTypes値、HumanLoop構成 | 辞書 |
analyze_expense | 請求書や領収書を解析する | ドキュメントデータ | 辞書 |
start_document_text_detection | 入力ドキュメント内の文字を認識する非同期処理を開始する | ドキュメントデータ、ClientRequestトークン、JobTag、通知チャネル設定、出力構成、KMSキーID | 辞書 |
get_document_text_detection | start_document_text_detectionで開始したジョブの結果を取得する | JobID、NextToken、レスポンスの最大値 | 辞書 |
start_document_analysis | 入力ドキュメント内で検出されたアイテム間の関係を解析する非同期処理を開始する | ドキュメントデータ、FeatureTypes値、ClientRequestトークン、JobTag、通知チャネル設定、出力構成、KMSキーID | 辞書 |
get_document_analysis | start_document_analysisで開始したジョブの結果を取得する | JobID、NextToken、レスポンスの最大値 | 辞書 |
start_expense_analysis | 請求書や領収書を解析する非同期処理を開始する | ドキュメントデータ、ClientRequestトークン、JobTag、通知チャネル設定、出力構成、KMSキーID | 辞書 |
get_expense_analysis | start_expense_analysisで開始したジョブの結果を取得する | JobID、NextToken、レスポンスの最大値 | 辞書 |
can_paginate | 各メソッドのページネーション有無を調べる | メソッド名 | 真偽値 |
幾つか解説します。
Textractがサポートするファイル形式は、同期処理ではJPEGとPNGが、非同期処理ではこれらに加えてPDFとTIFFがあります。また、非同期処理ではPDFとTIFFで複数ページの書類を分析できます。
同期処理では、API実行時にドキュメントのバイトデータを直接渡す方法(最大5MB)と、Amazon S3バケットに保存されているオブジェクトを指定する方法(最大5MB)があります(本稿では全て前者で実行することにします)。一方で非同期処理では、S3バケットに保存されているオブジェクトを指定します。なお、S3バケットはTextractを呼び出す際のAPIエンドポイントと同じリージョンに作成する必要があります。
Textractを使用してドキュメントから「ページ」「行」「単語」などの要素が検出されると、それらの情報は全て「Block」という共通の単位で、戻り値に記載されます。このBlock情報には、個別に割り振られたIDやバウンディングボックス情報、その要素に対する子要素の情報なども記載されています。逆に、戻り値に含まれる各「Block」がどの要素を指すのかについては、各Block情報内のBlockTypeキーの値を参照することになります。その値は、「ページ」では「PAGE」、「行」では「LINE」、「単語」では「WORD」です。なお「WORD」は「LINE」の子要素、「LINE」は「PAGE」の子要素です。
ここからは、Textractのメソッドの使い方を幾つか紹介します。
最初に紹介するdetect_document_textメソッドは、入力ドキュメント内の文字情報を認識します。以下ではサンプルドキュメントとして、2016年にオバマ米国大統領が共和党のMark Kirk上院議員(ともに当時)に送った手紙を使用します。
認識対象となる活字と手書き文字のターゲットは下記の通りです。
The White House
Washington
Mark -
Thank you for your fair and responsible
treatment of Merrick Garland. It upholds
the institutional values of the Senate, and helps
preserve the bipartisan ideals of an independent
judiciary.
Barack Obama
内容は、Kirk上院議員がMerrick Garland氏(オバマ大統領が連邦最高裁判所判事候補に指名。共和党の反対で結果的に就任できず)と面会したことに対して、感謝を伝えるものです。
Copyright © ITmedia, Inc. All Rights Reserved.