docs: config.txt雛形とREADMEを新運用フローに合わせて更新

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kenichiro NOGI 2026-08-02 10:17:52 +09:00
parent a288d56aef
commit 379d1d09e4
2 changed files with 66 additions and 48 deletions

View File

@ -1,59 +1,66 @@
# PDF氏名・日付抽出&リネームツール
# PDFスキャン監視・自動振り分けツール
テンプレート画像赤枠氏名欄、青枠日付欄を基準に、対象フォルダ内のPDFから
氏名・日付をOCRで抽出し、リネーム・振り分けを行うスクリプトです。
## セットアップ
```bash
pip install opencv-python pdf2image pytesseract pillow numpy
```
システムに以下が必要ですUbuntu/Debianの例:
```bash
sudo apt-get install tesseract-ocr tesseract-ocr-jpn poppler-utils
```
テンプレート画像(赤枠=氏名欄、青枠=日付欄)を基準に、"スキャン"フォルダ内のPDFから
氏名・日付をOCRで抽出し、リネーム・振り分けを行うツールです。
## 使い方
1. テンプレート画像を用意する
- 実際の書類1枚をスキャン、または元PDFをそのまま画像化
- 画像編集ソフトなどで、氏名が書かれている位置に赤い四角枠、日付が書かれている位置に青い四角枠を重ねて保存PNG推奨
- **重要**: テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成してください比率で位置を計算するため、多少の解像度差は自動補正されます
1. `config.txt` で各フォルダ名・動作パラメータを確認(通常は初期値のまま利用可)
2. `テンプレート/` フォルダにテンプレート画像を1つ入れる複数ある場合はファイル名が最も早いもの
- 画像編集ソフト等で、氏名欄に赤い四角枠、日付欄に青い四角枠を重ねて保存PNG推奨
- テンプレートは実際の対象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. 実行する
```bash
python extract_and_rename.py \
--template template.png \
--input ./input \
--output ./output \
--failed ./failed \
--margin 0.10
```
ScanOCR/
├── OCR仕分け実行.bat 起動バッチ
├── config.txt フォルダ名・動作パラメータ設定(必須ファイル)
├── スクリプト/
│ ├── extract_and_rename.py メイン処理
│ ├── box_detector.py テンプレート枠検出
│ ├── config_loader.py config.txt読込
│ ├── 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は完璧ではありません。特に手書きに近い字体、かすれ、低解像度スキャンでは
誤読が発生します。`output/` の結果は初回運用時に必ず目視確認してください。
- 日付の年が2桁例: 26/08/02の場合、スクリプトは "20XX年" と仮定して補完します。
昭和・平成表記など和暦が使われる書類の場合は `clean_date()` 関数の調整が必要です。
- 複数ページPDFの場合、現在は1ページ目のみを対象にしています。
- 氏名に同姓同名がいる場合や、同じ氏名で複数回書類が発行される場合、ファイル名の
衝突は自動的に連番_1, _2...)で回避されます。
- テンプレートで検出される枠は「最大面積の赤/青矩形」を採用しています。枠線以外に
赤・青の要素(ロゴなど)がテンプレート内にあると誤検出する可能性があるため、
テンプレートはできるだけシンプルな見た目にしてください。
## ファイル構成
- `box_detector.py` … テンプレートから赤枠・青枠の位置を検出するモジュール
- `extract_and_rename.py` … メイン処理OCR抽出・リネーム・移動
- OCRは完璧ではありません。運用初期は `アウトプット/` の結果を必ず目視確認してください
- 日付の年が2桁の場合は "20XX年" と仮定して補完します。和暦は非対応です
- 複数ページPDFは1ページ目のみ対象です
- ファイル名衝突時は `氏名_YYYYMMDD(2).pdf` のように連番が付与されます
- `config.txt` は必須ファイルです。存在しない場合は起動時にエラーになります

View File

@ -0,0 +1,11 @@
スクリプトフォルダ=スクリプト
テンプレートフォルダ=テンプレート
スキャンフォルダ=スキャン
アウトプットフォルダ=アウトプット
成功フォルダ=成功
失敗フォルダ=失敗
ログフォルダ=ログ
margin=0.10
DPI=300
ファイル安定待ち秒=1
ファイル安定待ちリトライ回数=5