ChatGPTでつくった文字画像を抽出するプログラムで請求書を読み込んでみた
以前、ChatGPTに画像ファイルの文字を抽出するプログラムを作ってもらいましたが、今回は請求書を読み込んでいき、python(pytesseract.image_to_string)で、文字抽出する際の設定値(psm、oem)を微調整しながら文字の抽出精度を検証していこうと思います。
以前、ChatGPTに画像ファイルの文字を抽出するプログラムを作ってもらった記事
pytesseract.image_to_stringに設定するpsmと、oemについて
まずは、pytesseract.image_to_stringに設定するpsmと、oemについてChatGTPに聞き、仕様をおさらいします。
プロンプト
pytesseract.image_to_stringに設定するpsmと、oemについて教えてください
ChatGPTの回答
import pytesseract
from PIL import Image
# 画像の読み込み
image = Image.open('your_image.png')
# PSMとOEMを設定してテキストを抽出
custom_config = r'--oem 3 --psm 6'
text = pytesseract.image_to_string(image, config=custom_config)
print(text)
psmの各種モードについて日本語でも補足してもらいました
文字の形態によって、psmのモードを適宜切り替えていく
画像ファイルに記載された文字の形態によって、psmのモードを切り替えていくと、精度が高く読み取れるとのことですが、どのモードが適しているかをpsmのパラメータを変えながら検証していきたいと思います。
請求書の読み込み検証
読み取り対象ファイル
フリーの請求書フォーマットがありましたので、こちらを使用させて頂き、今回はこちらを読み込みながら検証していきたいと思います。
検証について
psmを切り替え、oem:3固定で検証してみました。
psm:3(向きとスクリプトの検出を行わない完全な自動ページ分割。デフォルト設定)、oem:3 での検証結果
請 求 書
サンプル株式会社 御中 No 1001
請求日 2022/4/30
下記のとおり、御請求申し上げます。 サンプル株式会社
件名 サンプルプロジェクト 〒100-000
支払期限 02747人| 東京都千代田区千代田1-1-1
あん サンプル銀行 本店 普通 1111111 サンプルビル3階
サンプル (カ TEL : 03-0000-0000
担当: サンプル太郎
154,000 円 (税込)
摘要 EE 単位 Ei 金額
サンプル1 1| 式 10,000 10,000
サンプル2 1| 式 10,000 10,000
サンプル3 1| 式 10,000 10,000
サンプル4 1| 式 10,000 10,000
サンプル5 1| 式 10,000 10,000
サンプル6 1| 式 10,000 10,000
サンプル7 1| 式 10,000 10,000
サンプル8 1| 式 10,000 10,000
サンプル9 1| 式 10,000 10,000
キモトレーアロ1 1イ ード 4n nn 4n nn
psm:4(サイズが変動する単一のテキストカラムを前提)、oem:3 での検証結果
請 求 書
サンプル株式会社 御中 No 1001
請求日 2022/4/30
下記のとおり、御請求申し上げます。 サンプル株式会社
件名 サンプルプロジェクト 〒100-000
支払期限 02747人| 東京都千代田区千代田1-1-1
あん サンプル銀行 本店 普通 1111111 サンプルビル3階
サンプル (カ TEL : 03-0000-0000
担当: サンプル太郎
154,000 円 (税込)
摘要 EE 単位 単価 金額
サンプル1 1| 式 10,000 10,000
サンプル2 1| 式 10,000 10,000
サンプル3 1| 式 10,000 10,000
サンプル4 1| 式 10,000 10,000
サンプル5 1| 式 10,000 10,000
サンプル6 1| 式 10,000 10,000
サンプル7 1| 式 10,000 10,000
サンプル8 1| 式 10,000 10,000
サンプル9 1| 式 10,000 10,000
ユエキュレーア1 ィ ード ィ4n nn 4ィ4n nnn
psm:6(単一の均一なテキストブロックを前提)、oem:3 での検証結果
請 求 書
サンプル株式会社 御中 _ リー
請求日 2022/4/30
下記のとおり、御請求申し上げます。 サンプル株式会社
Ia サンプルプロジェクト 〒100-0001
支払期限 AM747人| 東京都千代田区千代田1-1-1
あん サンプル銀行 本店 普通 1111111 サンプルビル3階
サンプル (カ TEL : 03-0000-0000
担当: サンプル太郎
合計 154,000 円 (税込)
サンプル1 1| 式 10,000 10,000
サンプル2 1| 式 10,000 10,000
サンプル3 1| 式 10,000 10,000
サンプル4 1| 式 10,000 10,000
サンプル5 1| 式 10,000 10,000
サンプル6 1| 式 10,000 10,000
サンプル7 1| 式 10,000 10,000
サンプル8 1| 式 10,000 10,000
サンプル9 1| 式 10,000 10,000
キモトレーアロ1 1イ ード 4n nn 4n nn
psm:8(画像を単一の単語として扱う)、oem:3 での検証結果
をニ
psm:9(画像を円の中の単一の単語として扱う)、oem:3 での検証結果
ーー
psm:11(まばらなテキスト。特定の順序に従わずに可能な限り多くのテキストを検出)、oem:3 での検証結果
=圭
ロ月
求
書
細
サンプル株式会社 御中
No
1001
請求日
2022/4/30
下記のとおり、
請求申し上げます。
サンプル株式会社
ii
サンプルプロジェクト
〒100-000
支払期限
2022/5/31
東京都千代
区千代田1-1-1
があか
サンプル銀行 本店 普通 1111111
サンプルビル3階
サンプル (カ
TEL : 03-0000-0000
担当: サンプル太郎
154,000 円 (税込)
サンプル1
1
品
式
10,000
10,000
サンプル2
式
10,000
10,000
サンプル3
式
10,000
10,000
サンプル4
式
10,000
10,000
サンプル5
式
10,000
10,000
サンプル6
式
10,000
10,000
サンプル7
式
10,000
10,000
サンプル8
式
10,000
10,000
サンプル9
式
10,000
10,000
キモトレーアロ1
ード
ィ4n nn
4ィ4n nnn
psm:12(まばらなテキストと向き・スクリプトの検出)、oem:3 での検証結果
=圭
ロ月
求
中
サンプル株式会社 御中
No
1001
還
吸
求日
2022/4/30
下記のとおり、
請求申し上げます。
サンプル株式会社
ii
サンプルプロジェクト
〒100-000
支払期限
2022/5/31
東京都千代
区千代田1-1-1
があか
サンプル銀行 本店 普通 1111111
サンプルビル3階
サンプル (カ
TEL : 03-0000-0000
担当: サンプル太郎
154,000 円 (税込)
間
摘要
和
3
上
各
単価
金額
サンプル1
10,000
10,000
サンプル2
10,000
10,000
サンプル3
10,000
10,000
サンプル4
10,000
10,000
サンプル5
10,000
10,000
サンプル6
10,000
10,000
サンプル7
10,000
10,000
サンプル8
光叶|員|音員|則|半
10,000
10,000
サンプル9
10,000
10,000
キモトレーアロ1
mmニコニコニロロロロロロロリロニリロ
見
ィ4n nn
4ィ4n nnn
psm:13(生の行。Tesseract固有のハックをバイパスして、画像を単一のテキスト行として扱う)、oem:3 での検証結果
をニ
まとめ
今回の画像だと、psm:4が一番精度が良く、取り込めました。
ただ完璧に読み込めたわけではなく、背景色が黒色で、白文字の箇所や、日付箇所などの一部が、うまく読み取れない状態でした。
以前検証した画像ファイルでは、psm:6が精度良く取り込めましたが、今回は背景色が黒色で、白文字の箇所が読み取れませんでした。
おわりに
最後まで読んでいただきありがとうございます!
画像に記載された文字の形状によって、psmは適宜変えていくことで、一定精度が上がりそうですが、ものによってはうまく読めない場合もあり、そのような場合は、事前に画像加工をして文字を読みやすくしたり、学習データを追加していくなどの必要がありそうで、なかなか先は長そうな感じがしています、、
ただ完璧には取り込めなくても、大部分取り込むことができれば、人力での手作業は軽減できるかと思いますので、今後もカスタマイズしていこうかと思います!
おまけ
最近、ChatGPTを使用し、色々なことを模索しています。
もしよければ、以下の記事も見て頂けると嬉しいです!
この記事が気に入ったらサポートをしてみませんか?