はじめに
pythonで画像から文字を抽出する処理をしていたのですが、色や複数の文字の大きさによって読み取れないものがありました。
そこで、Amazon Textractを使用して実験してみることにしました。
サンプル画像は楽天証券の登録銘柄です。
Pythonでの結果
サンプルコード
※画像ファイルはコードと同じディレクトリに置いています
brew install tesseract
pip install pillow pytesseract
sample_code
from PIL import Image
import pytesseract
# 画像から文字を抽出
text = pytesseract.image_to_string(Image.open('YOUR_IMAGE.png'), lang='jpn')
# 抽出された文字列を表示
print(text)
実験結果
- 黒背景
- 一応全文取得できる
- 日本語は怪しい
- 還記0のように数字が変換されている箇所もある
- 白背景
- 数字が銘柄コードしか取れていない
- 日本語は怪しい
- 白黒
- 一応全文取得できている
- 日本語は怪しい
-
- を = のように変換したり、%が漢字になってしまっている箇所もある
サンプル画像1(黒背景)
出力結果
サンプル画像2(白背景)
出力結果
サンプル画像3(白黒画像)
出力結果
Textractでの結果
設定など
- Amazon Textractは日本リージョン非対応のようなので、us-east-1で実施
- サンプルドキュメントは「フォーム1005」を選択
- データ出力は「レイアウト」「フォーム」「テーブル」の3つを選択
実験結果
- 黒背景
- 一応全文取得できる
- 日本語非対応なので、日本語がTERYなどの英語になっている部分がある
- フォームで読み込めていない部分がある
- テーブルの分割も不自然
- 白背景
- 一応全文取得できる
- 日本語が英語になったりはしていない
- 漢字の隣にあるPなどを読み取れていないものもある
- フォームで読み込めていない部分が多々ある
- テーブルは黒背景より規則正しいが、完璧ではない
- 白黒画像
- 一応全文取得できる
- 日本語が英語になったりはしていない
- 漢字の隣にあるPなどを読み取れていないものもある
- フォームとして取得できていない箇所が多い
- テーブルは綺麗に抽出できている(文字の読み取りは完璧ではない)
サンプル画像1(黒背景)
サンプル画像2(白背景)
サンプル画像3(白黒画像)
結果
Python、Textractそれぞれに長所と短所がありました。
また、AIを使ったからといって完全に色や形が共存する画像から、テキストを完璧に抽出できるわけではないということがわかりました。。
今回の実験だと、白背景をpythonで取得するのが、文字列だけであれば1番精度が高そうです。
Pythonのライブラリをもっと駆使したり、Textractのドキュメントは種類が7つあったので、これらを横断的に実験してみたら、もう少し精度の高い抽出ができるかもしれません。