docs: config.txt雛形とREADMEを新運用フローに合わせて更新
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
a288d56aef
commit
379d1d09e4
@ -1,59 +1,66 @@
|
|||||||
# PDF氏名・日付抽出&リネームツール
|
# PDFスキャン監視・自動振り分けツール
|
||||||
|
|
||||||
テンプレート画像(赤枠=氏名欄、青枠=日付欄)を基準に、対象フォルダ内のPDFから
|
テンプレート画像(赤枠=氏名欄、青枠=日付欄)を基準に、"スキャン"フォルダ内のPDFから
|
||||||
氏名・日付をOCRで抽出し、リネーム・振り分けを行うスクリプトです。
|
氏名・日付をOCRで抽出し、リネーム・振り分けを行うツールです。
|
||||||
|
|
||||||
## セットアップ
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install opencv-python pdf2image pytesseract pillow numpy
|
|
||||||
```
|
|
||||||
|
|
||||||
システムに以下が必要です(Ubuntu/Debianの例):
|
|
||||||
```bash
|
|
||||||
sudo apt-get install tesseract-ocr tesseract-ocr-jpn poppler-utils
|
|
||||||
```
|
|
||||||
|
|
||||||
## 使い方
|
## 使い方
|
||||||
|
|
||||||
1. テンプレート画像を用意する
|
1. `config.txt` で各フォルダ名・動作パラメータを確認(通常は初期値のまま利用可)
|
||||||
- 実際の書類(1枚)をスキャン、または元PDFをそのまま画像化
|
2. `テンプレート/` フォルダにテンプレート画像を1つ入れる(複数ある場合はファイル名が最も早いもの)
|
||||||
- 画像編集ソフトなどで、氏名が書かれている位置に赤い四角枠、日付が書かれている位置に青い四角枠を重ねて保存(PNG推奨)
|
- 画像編集ソフト等で、氏名欄に赤い四角枠、日付欄に青い四角枠を重ねて保存(PNG推奨)
|
||||||
- **重要**: テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成してください(比率で位置を計算するため、多少の解像度差は自動補正されます)
|
- テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成すること
|
||||||
|
3. `スキャン/` フォルダに処理対象PDFを入れる
|
||||||
|
4. `OCR仕分け実行.bat` をダブルクリック
|
||||||
|
5. 処理結果は以下に振り分けられる:
|
||||||
|
- 成功: `アウトプット/氏名/氏名_YYYYMMDD.pdf` にコピー、元ファイルは `成功/` へ移動
|
||||||
|
- 失敗: `失敗/` フォルダへ元ファイルのまま移動
|
||||||
|
6. 実行ログは `ログ/YYYY-MM-DD.log` に記録される
|
||||||
|
7. 処理を途中で止めたい場合は、コンソールが表示されている間に何かキーを押す(1件処理する度にチェックされる)
|
||||||
|
|
||||||
2. フォルダを準備する
|
## フォルダ構成
|
||||||
- `input/` … 処理対象のPDFを入れる
|
|
||||||
- `output/` … 成功時、氏名ごとのサブフォルダに `YYYYMMDD_氏名.pdf` として保存される
|
|
||||||
- `failed/` … 抽出に失敗したPDFがそのまま退避される(要目視確認)
|
|
||||||
|
|
||||||
3. 実行する
|
```
|
||||||
|
ScanOCR/
|
||||||
```bash
|
├── OCR仕分け実行.bat 起動バッチ
|
||||||
python extract_and_rename.py \
|
├── config.txt フォルダ名・動作パラメータ設定(必須ファイル)
|
||||||
--template template.png \
|
├── スクリプト/
|
||||||
--input ./input \
|
│ ├── extract_and_rename.py メイン処理
|
||||||
--output ./output \
|
│ ├── box_detector.py テンプレート枠検出
|
||||||
--failed ./failed \
|
│ ├── config_loader.py config.txt読込
|
||||||
--margin 0.10
|
│ ├── file_ops.py ファイル名衝突回避コピー・移動、安定待ち
|
||||||
|
│ ├── lock_manager.py 二重起動防止ロック
|
||||||
|
│ ├── logger.py 実行ログ出力
|
||||||
|
│ ├── python/ Python embeddable本体(配布パッケージのみ)
|
||||||
|
│ └── tools/ tesseract-ocr・poppler(配布パッケージのみ)
|
||||||
|
├── テンプレート/
|
||||||
|
├── スキャン/
|
||||||
|
├── アウトプット/
|
||||||
|
├── 成功/
|
||||||
|
├── 失敗/
|
||||||
|
└── ログ/
|
||||||
```
|
```
|
||||||
|
|
||||||
`--margin` は枠位置の許容誤差率です。0.10 = 上下左右に枠の幅・高さの10%分だけ
|
## 開発者向け(配布パッケージのビルド)
|
||||||
広げた範囲までOCR対象とします(スキャン時の位置ズレ対策)。
|
|
||||||
|
配布用の同梱Python・tesseract・popplerは `build/build_package.py` で自動生成します。
|
||||||
|
`dist/ScanOCR/` 配下に配布用一式が生成されます。ネットワーク接続必須、7-Zip(`7z`コマンド)が
|
||||||
|
PATHに通っている必要があります。実行には数分〜数十分かかります。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python build/build_package.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## 開発者向け(テスト実行)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m pip install pytest
|
||||||
|
python -m pytest スクリプト/tests -v
|
||||||
|
```
|
||||||
|
|
||||||
## 注意点
|
## 注意点
|
||||||
|
|
||||||
- OCRは完璧ではありません。特に手書きに近い字体、かすれ、低解像度スキャンでは
|
- OCRは完璧ではありません。運用初期は `アウトプット/` の結果を必ず目視確認してください
|
||||||
誤読が発生します。`output/` の結果は初回運用時に必ず目視確認してください。
|
- 日付の年が2桁の場合は "20XX年" と仮定して補完します。和暦は非対応です
|
||||||
- 日付の年が2桁(例: 26/08/02)の場合、スクリプトは "20XX年" と仮定して補完します。
|
- 複数ページPDFは1ページ目のみ対象です
|
||||||
昭和・平成表記など和暦が使われる書類の場合は `clean_date()` 関数の調整が必要です。
|
- ファイル名衝突時は `氏名_YYYYMMDD(2).pdf` のように連番が付与されます
|
||||||
- 複数ページPDFの場合、現在は1ページ目のみを対象にしています。
|
- `config.txt` は必須ファイルです。存在しない場合は起動時にエラーになります
|
||||||
- 氏名に同姓同名がいる場合や、同じ氏名で複数回書類が発行される場合、ファイル名の
|
|
||||||
衝突は自動的に連番(_1, _2...)で回避されます。
|
|
||||||
- テンプレートで検出される枠は「最大面積の赤/青矩形」を採用しています。枠線以外に
|
|
||||||
赤・青の要素(ロゴなど)がテンプレート内にあると誤検出する可能性があるため、
|
|
||||||
テンプレートはできるだけシンプルな見た目にしてください。
|
|
||||||
|
|
||||||
## ファイル構成
|
|
||||||
|
|
||||||
- `box_detector.py` … テンプレートから赤枠・青枠の位置を検出するモジュール
|
|
||||||
- `extract_and_rename.py` … メイン処理(OCR抽出・リネーム・移動)
|
|
||||||
|
|||||||
11
PythonProj/ScanOCR/config.txt
Normal file
11
PythonProj/ScanOCR/config.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
スクリプトフォルダ=スクリプト
|
||||||
|
テンプレートフォルダ=テンプレート
|
||||||
|
スキャンフォルダ=スキャン
|
||||||
|
アウトプットフォルダ=アウトプット
|
||||||
|
成功フォルダ=成功
|
||||||
|
失敗フォルダ=失敗
|
||||||
|
ログフォルダ=ログ
|
||||||
|
margin=0.10
|
||||||
|
DPI=300
|
||||||
|
ファイル安定待ち秒=1
|
||||||
|
ファイル安定待ちリトライ回数=5
|
||||||
Loading…
Reference in New Issue
Block a user