私的AI研究会 > FormOCR2
帳票OCRプログラムの主な仕様と操作方法をまとめる。
「formocr.py」の入力画像を整えるために使用する。PDF ファイルからの画像抽出、縦横位置の回転、水平方向の傾き補正を行う。
コマンドオプション | デフォールト設定 | 意味 |
--r, --rotate | 270 | 回転角度 (90/180/270) 0 = 水平傾き補正 |
--log | n | ログ出力フラグ (y/n) |
--mlt | y | 連続編集フラグ (y/n) |
(py37) $ cd ~/workspace_py37/formocr (py37) $ python3 prepros.py -h --- File preprocessing Program Ver 0.01 --- usage: prepros.py [-h] [-r ROTATE] [--log LOG] [--mlt MULTI] optional arguments: -h, --help show this help message and exit -r ROTATE, --rotate ROTATE image rotation angle.(0/90/180/270) '0' is tilt check. Default is 270 --log LOG Log flag.(y/n) Default value is 'y' --mlt MULTI Multi flag.(y/n) Default value is 'y'
(py37) $ python3 prepros.py (パラメータ指定) ← ディレクトリ指定 (py37) $ python3 prepros.py --mlt n (パラメータ指定) ← ファイル指定
(py37) $ python3 prepros.py --- File preprocessing Program Ver 0.01 --- File preprocessing Program Ver 0.01: Starting application... - Rotate angle : 270 - Log flag : y - Multi flag : y File list: ['/home/mizutu/workspace_py37/formocr/_pdf_test/test_sample.pdf'] >> pdf to image file >> 09:58:42 PDF file: <<test_sample.pdf>> Image file: test_sample/test_sample_0000_00.jpeg Image file: test_sample/test_sample_0001_00.jpeg Image file: test_sample/test_sample_0002_00.jpeg Select list: [] Finished. 09:58:42フォルダ内に「test_sample」フォルダが作成され pdfファイル内に含まれる画像が「test_sample_ページ番号_画像番号」で作成される。
(py37) $ python3 prepros.py --- File preprocessing Program Ver 0.01 --- File preprocessing Program Ver 0.01: Starting application... - Rotate angle : 270 - Log flag : y - Multi flag : y File list: [] Select list: ['/home/mizutu/workspace_py37/formocr/_pdf_test/test_sample/test_sample_0000_00.jpeg', '/home/mizutu/workspace_py37/formocr/_pdf_test/test_sample/test_sample_0001_00.jpeg', '/home/mizutu/workspace_py37/formocr/_pdf_test/test_sample/test_sample_0002_00.jpeg'] >> image file preprocessing >> 10:17:40 Image rotate_270: test_sample_0000_00.jpeg Image rotate_270: test_sample_0001_00.jpeg Image rotate_270: test_sample_0002_00.jpeg Finished. 10:17:41元の画像データは保存されないことに注意。
(py37) $ python3 prepros.py -r 90
(py37) $ python3 prepros.py -r 0 --- File preprocessing Program Ver 0.01 --- File preprocessing Program Ver 0.01: Starting application... - Rotate angle : 0 - Log flag : y - Multi flag : y File list: [] Select list: ['/home/mizutu/workspace_py37/formocr/_img_test/sample0.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_r-05.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_r-10.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_r10.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_s0.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_s1.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_s2.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample0_s3.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample1.png', '/home/mizutu/workspace_py37/formocr/_img_test/sample2.png', '/home/mizutu/workspace_py37/formocr/_img_test/test_sample_001.png', '/home/mizutu/workspace_py37/formocr/_img_test/test_sample_002.png', '/home/mizutu/workspace_py37/formocr/_img_test/test_sample_003.png'] >> image file preprocessing >> 10:27:10 Image file: <<sample0.png>> Detection tilt angle: 0 Image file: <<sample0_r-05.png>> count= 1, r= 212.00235847744713, degree= 0.2702611064941363 Detection tilt angle: 0 Image file: <<sample0_r-10.png>> count= 1, r= 200.02249873451737, degree= 0.8593722436446809 count= 2, r= 122.01639234135715, degree= 0.9391909457355799 count= 3, r= 336.05356715857073, degree= 1.0230301886678357 count= 4, r= 67.00746227100382, degree= 0.8550973962667232 count= 5, r= 42.01190307520001, degree= 1.3639275316029187 count= 6, r= 41.012193308819754, degree= 1.3971810272963765 count= 7, r= 74.00675644831355, degree= 0.7742201649280623 New file: sample0_r-10_tilt.png Detection tilt angle: 1.0302884997345967 Image file: <<sample0_r10.png>> count= 1, r= 65.00769185258002, degree= -0.8814039965821377 count= 2, r= 227.01982292302142, degree= -0.757168865058535 count= 3, r= 154.02921800749363, degree= -1.1160103914072725 count= 4, r= 274.0456166407337, degree= -1.0454273910633103 count= 5, r= 170.01176429882727, degree= -0.6740368979845053 count= 6, r= 227.01982292302142, degree= -0.757168865058535 count= 7, r= 118.01694793545543, degree= -0.9710219310791666 count= 8, r= 114.00438588054409, degree= -0.5025816667210311 count= 9, r= 76.00657866263946, degree= -0.7538483330707672 New file: sample0_r10_tilt.png Detection tilt angle: -0.8287409264472512 Image file: <<sample0_s0.png>> Detection tilt angle: 0 Image file: <<sample0_s1.png>> Detection tilt angle: 0 Image file: <<sample0_s2.png>> Detection tilt angle: 0 Image file: <<sample0_s3.png>> count= 1, r= 61.00819617067857, degree= -0.9391909457355799 count= 2, r= 115.00434774390054, degree= -0.49821161261364194 Detection tilt angle: 0 Image file: <<sample1.png>> Detection tilt angle: 0 Image file: <<sample2.png>> count= 1, r= 57.0087712549569, degree= 1.0050860052541812 Detection tilt angle: 0 Image file: <<test_sample_001.png>> count= 1, r= 115.00434774390054, degree= 0.49821161261364194 Detection tilt angle: 0 Image file: <<test_sample_002.png>> count= 1, r= 115.00434774390054, degree= 0.49821161261364194 Detection tilt angle: 0 Image file: <<test_sample_003.png>> count= 1, r= 56.00892785976178, degree= 1.0230301886678357 Detection tilt angle: 0 Finished. 10:27:15水平の傾きが大きい画像があった場合、補正後の画像ファイル名を「XXXXX_tilt.XXX」とし「org」ディレクトリに元画像を移動する。
あらかじめ登録されたフォーマットに従って帳票の自動処理を行い結果を CSV ファイルに出力する。
コマンドオプション | デフォールト設定 | 意味 |
-l, --language | jpn | 言語 |
--layout | 6 | tesseractレイアウト(0-13) |
--log | n | ログ出力フラグ (y/n) |
-o, --out | tryocr_go.csv | CSV 出力ファイル |
--mlt | y | 連続編集フラグ (y/n) |
--tilt | n | 水平傾き補正フラグ (y/n) |
(py37) $ cd ~/workspace_py37/formocr (py37) $ python3 formocr.py -h --- FormOCR Program Ver 0.01 --- OpenCV version 4.5.2 usage: formocr.py [-h] [-l LANGUAGE] [--layout LAYOUT] [--log LOG] [-o CSV_OUT] [--mlt MULTI] [--tilt TILT] optional arguments: -h, --help show this help message and exit -l LANGUAGE, --language LANGUAGE Language. Default value is 'jpn' --layout LAYOUT Tesseract layout Default value is 6 --log LOG Log flag.(y/n) Default value is 'n' -o CSV_OUT, --out CSV_OUT CSV file path. Default value is formocr.csv --mlt MULTI Multi flag.(y/n) Default value is 'y' --tilt TILT Tilt Check flag.(y/n) Default value is 'n'
~/workspace_py37/formocr/
(py37) $ python3 prepros.py -r 0
(py37) $ python3 formocr.py --- FormOCR Program Ver 0.01 --- OpenCV version 4.5.2 FormOCR Program Ver 0.01: Starting application... - Language : jpn - Layout : 6 - Log flag : n - Processed out: formocr.csv - Multi flag : y - Tilt chk flag: n >> OCR process >> 11:27:19 << sample0.png >> -- No matching form ! -- << sample0.png >> → ここでフォーム編集ソフトが起動 フォーム設定の後「Quit」で次へ ** Run again !! ** << sample0.png >> matching form: sample0.png * → OCR出力できると緑色で表示 '*'はフォーム登録済のファイル << sample0_r-05.png >> matching form: sample0.png << sample0_r-10_tilt.png >> matching form: sample0.png << sample0_r10_tilt.png >> matching form: sample0.png << sample0_s0.png >> matching form: sample0.png << sample0_s1.png >> matching form: sample0.png << sample0_s2.png >> matching form: sample0.png << sample0_s3.png >> matching form: sample0.png << sample1.png >> matching form: sample0.png << sample2.png >> matching form: sample0.png << test_sample_001.png >> matching form: sample0.png << test_sample_002.png >> matching form: sample0.png << test_sample_003.png >> matching form: sample0.png Finished. 11時29分33秒
※ 全項目を登録しないで「Quit」を押した場合は現在の全処理の中断とみなす。
※ 設定項目③と実際の項目が一致していることは重要なので厳重注意のこと!!!
項目 | 有効性の検査 | 例 |
帳票名(KyeName) | フォームとの文字列比較 | 請求書 |
日付(Date) | 西暦・年号(令和のみ)の検査後フォーマット(YYYY/MM/DD)に変換 | 2022/02/10 |
会社名(CompName) | 文字認識結果の空白を削除 | 株式会社エムズファクトリー |
案件名(Title) | 文字認識結果の空白を削除 | ソフト開発 |
税抜金額(B4Tax) | 数字を抽出(記号や空白を削除)した結果が2桁以上であること | 10000 |
税込み金額(TotalMoney) | 数字を抽出(記号や空白を削除)した結果が2桁以上であること&br税抜金額より大きい値であること | 10100 |
講求書,請求書 和求書,請求書 講求,請求 請求和書,請求書 由,申 :
],1 },1 ー,1 仔,年 針 和,令和 信和,令和 :
株式会会社,株式会社 株式人会社,株式会社 株式会若,株式会社 伯式会社,株式会社 味式会社,株式会社 :
ジブフトウェア,ソフトウェア ジブトウェア,ソフトウェア ジフトワエア,ソフトウェア ジソブトウェア,ソフトウェア :
OCR 帳票認識プログラム「formocr.py」から呼び出し使用するが、コマンドラインから単独で起動することもできる。
この場合、既に登録した別のフォーマットを下書きとして利用できる機能が付加される。
コマンドオプション | デフォールト設定 | 意味 |
-l, --language | jpn | 言語 |
--layout | 6 | tesseractレイアウト(0-13) |
--log | n | ログ出力フラグ (y/n) |
--mlt | y | 連続編集フラグ (y/n) |
(py37)$ python3 formocr_edit.py -h --- FormOCR Template Edit Program Ver 0.02 --- OpenCV version 4.5.2 usage: formocr_edit.py [-h] [-l LANGUAGE] [--layout LAYOUT] [--log LOG] [--mlt MULTI] optional arguments: -h, --help show this help message and exit -l LANGUAGE, --language LANGUAGE Language. Default value is 'jpn' --layout LAYOUT Tesseract layout Default value is 6 --log LOG Log flag.(y/n) Default value is 'y' --mlt MULTI Multi flag.(y/n) Default value is 'y'
~/workspace_py37/formocr/
⑰ 参照できる登録済みフォーマットがある場合は「Load」ボタンを押してファイルを選択する。(例: sample0a.png の時、sample0.png)
⑱ 登録済みフォームの領域データを使って OCR認識した結果を認識できたと推定できる場合赤色の枠と認識結果の文字を表示する。
認識できない設定領域の枠は緑色で表示する。
項目のモードを確認しながらそのまま使える場合は「Save」ボタンを押して登録する。
⑲ 認識できていない領域に対しては、登録モードを確認しながらマウスドラッグで設定し直す。
・同様の操作ですべての項目を登録して「Next」ボタンを押す。単一処理モードの場合は「Quit」ボタンを押して編集を終了する。
(py37) $ python3 formocr_edit.py --- TryOCR Template Edit Program Ver 0.01 --- OpenCV version 4.5.2 : file: </home/mizutu/workspace_py37/formocr/_edit_test/sampl0a.png> Screen size: width x height = 1680 x 1050 (pixels) original h x w : 1754 x 1239 display h x w : 886 x 626 scale h x w : 0.505 x 0.505 ----------- OCR text: 請 求 書 → 請求書 OCR text: 2021 年 10 月 11 日 → 2021/10/11 OCR text: エム ズ フ ァ ク トリ ー 株 式 会 社 → エムズファクトリー株式会社 OCR text: ノー ト PC 用 メモ リー → ノートPC用メモリー ¥7.800 preprocess: [0, 0, 0, 0] area: (1102, 1245) - (1191, 1267) :