7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Textract による「画像からの表データ読込」をブラウザから試す

Last updated at Posted at 2023-12-04

はじめに

AWS は様々な AI サービスを提供しています

そして、それらのサービスはブラウザから簡単に試せるようになっています

サービス 機能 お試し記事 Elixir 実装例
Transcribe 音声の文字起こし(音声認識) 参照 参照
Polly 文書の読み上げ(音声合成) 参照 参照
Lex チャットボット 参照 Coming Soon...
Translate 翻訳 参照 参照
Rekognition 画像認識
顔認識
参照
参照
参照
Textract 画像からの表データ読込 参照 参照
Bedrock 生成AIによるチャット、画像生成 参照 参照

本記事では AWS の文字認識サービス Textract をブラウザから試してみます

Amazon Textract とは

Amazon Textract は AI モデルによって画像からテキストを読み取る、いわゆる OCR(Optical Character Recognition) のようなサービスです

しかし、単なる文字認識にとどまらず、文書の構造を理解し、表データなどをそのまま使いやすい形式で返してくれます

Amazon Textract の使い途(ユースケース)

Amazon Textract は 2023年11月現在、 6 つの言語・国に対応していますが、日本語には対応していません

  • 英語
  • スペイン語
  • イタリア語
  • ポルトガル語
  • フランス語
  • ドイツ語

従って、日本で使う場合は数字などに対してのみ使用しましょう

入力形式は以下のものをサポートしています

  • PNG
  • JPEG
  • TIFF
  • PDF

Amazon Textract は以下のような用途に使用可能です

  • 印刷された英語文書の電子化
  • 印刷された数値データの電子化
  • Fax やアンケートなど、手書き文字の自動読取、後続処理への自動取込

Amazon Textract の料金

AWS の料金は基本的に従量課金制です

また、料金はリージョン(サービスを提供しているサーバーが設置されている地域)によって変動します

Textract は日本語をサポートしていないこともあり、東京リージョンでは使用できません

バージニア北部リージョンを使った場合、以下のような料金になります

機能 料金
通常の文字認識 $1.5 / 1,000 ページ
署名 $3.5 / 1,000 ページ
レイアウト $4 / 1,000 ページ
クエリ $15 / 1,000 ページ
テーブル $15 / 1,000 ページ
フォーム $50 / 1,000 ページ
クエリ + テーブル $20 / 1,000 ページ
クエリ + フォーム $55 / 1,000 ページ
テーブル + フォーム $65 / 1,000 ページ
テーブル + フォーム + クエリ $70 / 1,000 ページ

ただし、 AWS のサービスの多くには無料利用枠が存在します

Amazon Textract は AWS 無料利用枠に含まれており、無料で使用開始できます。無料利用枠は 3 か月間有効で、新規に AWS をご利用になるお客様は、最大で次の分析が可能です。

Detect Document Text API: 1,000 ページ/月
Analyze Document API:
1,000 ページ/月 (署名のみを使用する場合)
フォーム、テーブル、およびレイアウトの機能を使用する場合、100 ページ/月
クエリ、フォーム + クエリ、テーブル + クエリ、フォーム + テーブル + クエリ、それぞれ 100 ページ/月

無料利用期間中の場合、 本記事で実行する程度の処理であれば無料範囲内に収まります

アカウント作成

Amazon Textract を使うためには、 AWS のアカウント作成が必要です

以下の公式手順に従って、アカウントを作成してください

クレジットカードと電話番号が必要になります

予めご用意ください

ブラウザからの文書分析

Amazon Textract への移動

AWS のマネジメントコンソールにログインすると、以下のような画面が表示されます

スクリーンショット 2023-11-26 9.59.09.png

この画面から最近使ったサービスなどにアクセスできるようになっています

上メニューにある検索ボックスに tex と入力してみましょう

スクリーンショット 2023-12-02 10.08.09.png

サービスの候補として Amazon Textract が表示されます

Amazon Textract をクリックしましょう

もし東京リージョンなど、サポートされていないリージョンで AWS のページを開いていた場合、以下のような画面が表示されます

スクリーンショット 2023-12-02 10.09.19.png

米国東部(バージニア北部)をクリックし、リージョンを移動しましょう

他のサービスを使うとき、東京リージョンに戻るのを忘れないようにしましょう

リージョンは上部メニューの右側、リージョン名をクリックすると変更可能です

スクリーンショット 2023-12-02 10.11.18.png

リージョンを選択すると、以下のような画面が表示されます

スクリーンショット 2023-12-02 10.12.45.png

生のテキスト

左メニューの「文書を分析する」をクリックすると、以下のような画面が表示されます

スクリーンショット 2023-12-02 10.16.19.png

このデモでは、左側の給与明細の画像を分析し、右側に認識できたテキストを表示しています

左側画像内の各テキストを囲っている四角形は Textract がテキストを認識できた位置情報です

右側の各テキストをクリックすると、左側の該当箇所の色が変化します

スクリーンショット 2023-12-02 10.20.17.png

実のところ、これだけのことであれば Rekognition で十分です

例えば画像のこの箇所

スクリーンショット 2023-12-02 10.23.37.png

Textract は以下のように認識しています

  • CO. FILE DEPT. CLOCK NUMBER
  • ABC 126543 123456 12345 00000000

しかし、実際にこのデータを使う場合、本来は以下のような紐付きが欲しいはずです

  • CO.: ABC
  • FILE: 126543
  • DEPT.: 123456
  • CLOCK: 12345
  • NUMBER: 00000000

画像上のテキストに対して、単なる文字認識ではなく、このような意味的な紐付き、構造を理解できるのが Textract の強みです

レイアウト

右側、結果の上にある「レイアウト」タブをクリックしてみましょう

スクリーンショット 2023-12-02 10.32.55.png

各テキストが文書内で「構造上どういう意味合いになっているか」が分析されています

先ほどの画像先頭の箇所は「ヘッダー」として認識されています

少し結果を下っていくと、テーブルなども正しく認識されています

スクリーンショット 2023-12-02 10.33.53.png

単に「ヘッダーに何が書いてあるか」や「どのあたりに表があるか」だけであれば、この「レイアウト」で比較的安く分析可能です

結果は右上「結果をダウンロードする」から CSV 形式で取得可能です

ダウンロードした ZIP を展開して、 layout.csv を開きます

'ページ番号,'レイアウト,'テキスト,'Reading Order,'Confidence score % (Layout)
'1,'図 1,"",'0,'26.39160156
'1,'ヘッダー 1,"'CO. FILE DEPT. CLOCK NUMBER ABC 126543 123456 12345 00000000 1",'1,'25.68359375
'1,'テキスト 1,"'ANY COMPANY CORP. 475 ANY AVENUE ANYTOWN USA 10101",'2,'65.38085938
'1,'セクションヘッダー 1,"'Earnings Statement",'3,'44.45800781
...

Textract 自体は日本語に対応していませんが、ユーザーが日本語を使っている場合、デモの CSV もちゃんと日本語にしてくれているのは親切ですね

各値の先頭 ' は、おそらく Excel が勝手に形式を変えるのを回避するためでしょう

macOS の場合、 Numbers で開くと以下のような表示になります(Windows なら Excel で開きましょう)

スクリーンショット 2023-12-02 10.40.51.png

右端列の「Confidence score % (Layout)」は結果の確信度(AI がどれくらい答えに自信があるか)を表します

フォーム

「フォーム」タブをクリックしてみましょう

スクリーンショット 2023-12-02 10.48.20.png

「フォーム」の場合、項目と値が紐づいて認識されています

ただし、あくまでも項目と値が 1 対 1 の場合についてのみ分析できており、テーブルの場合は認識できていません

ダウンロードした結果から keyValues.csv を開いてみましょう

スクリーンショット 2023-12-02 10.52.58.png

こちらは残念ながら日本語になっていませんが、 Key が項目で Value が値です

それぞれに Confidence Score がありますが、このデモ上ではどちらも同じ値になっていますね

テーブル

「テーブル」タブをクリックすると、テーブル毎の分析結果が表示されます

スクリーンショット 2023-12-02 10.56.57.png

先頭のテーブルについて、正しくセル毎に分割できている事がわかります

「現在閲覧中のテーブル」から「4」をクリックします

スクリーンショット 2023-12-02 11.01.47.png

テーブルのタイトル、ヘッダーが認識できており、行毎に高さが違っても正しく認識できています

ダウンロードしたファイルでは、テーブルの結果は table-1.csv から table-7.csv に分かれています

スクリーンショット 2023-12-02 11.04.25.png

クエリ

「クエリ」タブでは、画像に対して直接質問を投げる事ができます

「クエリを入力してドキュメント内を検索」というところに「what is the regular hourly rate?」と入力してから「クエリを送信」ボタンをクリックします

すると、以下のように結果が正しく取得できます

スクリーンショット 2023-12-02 11.08.58.png

JSON 形式

ダウンロードしたファイルの中に analyzeDocResponse.json というファイルがあるので開いてみましょう

{
  "DocumentMetadata": {
    "Pages": 1
  },
  "Blocks": [
    {
      "BlockType": "PAGE",
      "Geometry": {
        "BoundingBox": {
          "Width": 1,
          "Height": 0.9965640306472778,
          "Left": 0,
          "Top": 0.003435956547036767
        },
        "Polygon": [
          {
            "X": 0,
            "Y": 0.003435956547036767
          },
          {
            "X": 1,
            "Y": 0.0039773182943463326
          },
          {
            "X": 1,
            "Y": 1
          },
          {
            "X": 0,
            "Y": 1
          }
        ]
      },
      ...

実際にプログラムから Textract を使う場合、このような形式で分析結果が取得されます

Elixir というプログラミング言語での実装例はこちら

まとめ

Amazon Textract によって、単なる OCR ではなく、意味や構造も含めた分析結果を得る事ができました

ただし、日本語には対応していないため、あくまでも英語文書や英数字だけの文書を対象として使用しましょう

また、機能によって料金が異なるため、やりたいことに合わせて選択しましょう

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?