Amazon Textract（OCR）についてまとめてみた

今回Amazon TextractのAPIを使ってみようと思い、いろいろ試行錯誤したので
そこで得た知識をまとめてみたいと思います。

# Amazon Textract

2019年にAmazonが一般公開したOCRサービスです。

現在出ているAI-OCR製品やOCR製品は値段が高く、手が届かない方も多いと思います。しかし、Amazon Textractは値段が格段に安く、企業としてでも一般の方でも利用できます。

※この図は2019年7月31日現在のものです。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/cb730cb7-6c79-3528-5072-756ffbcc8c6c.png)


上記は私がまとめたものですが、随時変更があるかもしれないので、あくまで公式サイトを確認してください。

※上記の料金は2019年7月31日時点です。

[Amazon Textract の料金 - AWS -](https://aws.amazon.com/jp/textract/pricing/)


# 特徴1: クラウド上で動く

Amazon TextractはAWSのサービスのうちの1つで、クラウド上で動かせるためデスクトップアプリのインストールやサーバーの用意をする必要がありません。

ブラウザ上でのマウスクリックだけで処理が完結しちゃいます！

# 特徴2: AIを使っているためフォームや表を認識できる

インターネットで拾ってきた書類をAmazon Textractにかけてみると、見事に表を認識しています！
セル指定すれば、欲しい情報が持ってこれます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/d5663734-7c8a-252e-45e9-f08a95d92919.png)

例えば↑この画像をAmazon Textractのかけると、「Date」は「2019/7/1」という風に認識してくれるため、この文書の「Date」を指定すれば日付の部分を取得することができます。

他の方の記事と合わせて読んでいただけると分かりやすいかと思います。

[Amazon Textractを試してみた](https://qiita.com/windows222/items/07c3683c052d6e2bb6a4)

また、以下のような表の情報も読み取ることができます！
なので、1列目の1行目という指定をすると、そのセル内の値がとってこれます！すごい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/b7a9dab8-89be-4054-12c1-fc33a6aa49ce.png)


# 特徴3: 信頼スコアが出てくる！

Amazon Textractで文字をOCRにかけると、テキストだけでなく信頼スコアも同時に返ってきます。
信頼スコアは、Amazon Textractが画像を読み取って解析した文字がどれくらい信頼できるかを表したもので、自信があるものは`99.9816`とか返ってきますし、自信ないときは`58.301`くらいの数字が返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/1fe0d576-c005-7d54-8862-dba162a486a9.png)


# 特徴4: APIが使用できる

ブラウザ上でAmazon Textractを使用することもできますが、コードを書いてAPIを使用してリクエストを送ることもできます。

## API使用準備

APIを使用してリクエストを送るためには、以下の手順を踏む必要があります。

- AWSアカウントを作成
- IAMユーザーを作成
- AWSのアクセスキー、シークレットキーを発行

## APIの種類

基本的には「Detect Document API」と「Analyze Document API」の二種類から選びます。

どちらも画像をリクエストパラメータとして送りますが、**Detect Document API**は、OCR解析した後のテキスト、信頼スコア、そのテキストは何行目にあるのかなどが返ってきます。そして、**Analyze Document API**はDetect Document APIのレスポンスに加えて、フォームのキーとバリューや、表のセルの情報も返ってきます。

ただ、非同期でレスポンスが欲しい場合は「GetDocument
Analysis API」「GetDocument TextDetection API」 「Start DocumentAnalysis API」「Start DocumentTextDetection API」という別のAPIを使用する必要があります。


「同期」「非同期」の違いは、公式サイトにはこのように書かれています。

> 同期 API は単一ページのドキュメント、およびモバイルキャプチャなどの低遅延ユースケースに使用できます。非同期 API は、何千ものページを含む PDF ドキュメントなど、複数ページのドキュメントに使用できます。

詳しくは「[Amazon Textract APIリファランス](https://docs.aws.amazon.com/textract/latest/dg/API_Reference.html)」をご参照ください。



## APIのリクエスト概要

Amazon Textractは日本語対応しておらず、限られたリージョンでしか使用できません。

リージョンとエンドポイントは以下の通りです。

|    Region Name    | Region | Endpoint |
|:------------------:|:------------------:| :------------------:|
|   米国東部 (オハイオ)  | us-east-2   | textract.us-east-2.amazonaws.com |
|   米国東部 (バージニア北部) |us-east-1 | textract.us-east-1.amazonaws.com | 
|   米国西部 (オレゴン) | us-west-2 |textract.us-west-2.amazonaws.com	 | 
|   欧州 (アイルランド) | eu-west-1 | textract.eu-west-1.amazonaws.com |

参考：[AWS のリージョンとエンドポイント](https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#textract_region)


どちらもDetect Document APIとAnalyze Document APIで若干リクエストパラメータは異なりますので、[こちら](https://docs.aws.amazon.com/ja_jp/textract/latest/dg/API_Operations.html)を参照ください。


## APIのリクエスト方法

AWS SDKは以下の言語でサポートされています。

* C++
* Go
* Java
* JavaScript
* .NET
* Node.js
* PHP
* Python
* Ruby

そして、それぞれAPIリファランスが詳しく書いてあるので、APIを使用する際は上記のリクエストパラメータとAPIリファランスの両方を参考にしてみてください。

[AWS での構築ツール(AWS SDK)](https://aws.amazon.com/jp/tools/)

また、pythonのコードサンプルもあります。

[Amazon Textract API Pythonサンプルコード](https://docs.aws.amazon.com/ja_jp/code-samples/latest/catalog/python-textract-textract-python-kv-parser.py.html)


# 試してみてわかったこと

## 1. そもそも読み取らない領域がある

OCRの精度がどうという問題以前に、そもそも読み取らない領域があります。

この帳票はネットから拾ってきたものですが、実際の職場で扱っている帳票で試してみても、同じようにそもそも読み取らない場所が結構ありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/306804bc-0802-c48a-523b-60bec2b3e59a.png)


## 2. 日本語を無理やりローマ字に読み替えようとする

日本語対応してないのだから当然だろうと言われればそれまでですが、
Amaznon Textractは日本語が混じっている帳票には全く向きません。

例えば「化学」っていう文字は `15` って読み取られてしまいました。「化」はまあ15に似ていなくもないですが....笑


# おわりに

というわけで、Amazon Textractは値段が安く、英語なら読み取り精度は結構よいかと思われます！

ブラウザ上でもOCR処理できるし、APIを使うこともできます！

シンプルな帳票ならとても良いかもしれませんが、日本語は全く読み取れませんので、日本語を読み取りたい方は絶対おすすめできません笑

無料枠があるので、少しでも気になった方は軽く試してみるとよいかもしれません！！

> AWS 無料利用枠を使って無料でお試しください。新しい AWS のお客様は最初の 3 か月間、Detect Document Text API を使用して月に 1,000 ページ、Analyze Document API を使用して月に 100 ページまで分析できます。

[Amazon Textract の料金 - 無料枠 -](https://aws.amazon.com/jp/textract/pricing/)

また、Amazon Textractの信頼スコアに特化した記事も書いたので、併せてごらんください！

[Amazon Textract(OCR)の信頼スコアを本当に信頼してもよいのか！？](https://qiita.com/n_oshiumi/items/e0bb0f2c0cfcb4aafaaa)