コードレビュー指摘対応。 - ログ備考欄に改行(スタックトレース等)が混入すると1行フォーマットが崩れるため、改行を空白に平坦化 - run_queue内でファイルコピー・移動が例外を投げた場合に未処理例外でクラッシュしていた問題を修正。main()側でrun_queue呼び出しをtry/exceptし、ログ記録の上でロックを解放して安全終了する Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| build | ||
| docs/superpowers | ||
| スクリプト | ||
| .gitignore | ||
| config.txt | ||
| OCR仕分け実行.bat | ||
| README.md | ||
PDFスキャン監視・自動振り分けツール
テンプレート画像(赤枠=氏名欄、青枠=日付欄)を基準に、"スキャン"フォルダ内のPDFから 氏名・日付をOCRで抽出し、リネーム・振り分けを行うツールです。
使い方
config.txtで各フォルダ名・動作パラメータを確認(通常は初期値のまま利用可)テンプレート/フォルダにテンプレート画像を1つ入れる(複数ある場合はファイル名が最も早いもの)- 画像編集ソフト等で、氏名欄に赤い四角枠、日付欄に青い四角枠を重ねて保存(PNG推奨)
- テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成すること
スキャン/フォルダに処理対象PDFを入れるOCR仕分け実行.batをダブルクリック- 処理結果は以下に振り分けられる:
- 成功:
アウトプット/氏名/氏名_YYYYMMDD.pdfにコピー、元ファイルは成功/へ移動 - 失敗:
失敗/フォルダへ元ファイルのまま移動
- 成功:
- 実行ログは
ログ/YYYY-MM-DD.logに記録される - 処理を途中で止めたい場合は、コンソールが表示されている間に何かキーを押す(1件処理する度にチェックされる)
フォルダ構成
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(配布パッケージのみ)
├── テンプレート/
├── スキャン/
├── アウトプット/
├── 成功/
├── 失敗/
└── ログ/
開発者向け(配布パッケージのビルド)
配布用の同梱Python・tesseract・popplerは build/build_package.py で自動生成します。
dist/ScanOCR/ 配下に配布用一式が生成されます。ネットワーク接続必須、7-Zip(7zコマンド)が
PATHに通っている必要があります。実行には数分〜数十分かかります。
python build/build_package.py
開発者向け(テスト実行)
python -m pip install pytest
python -m pytest スクリプト/tests -v
注意点
- OCRは完璧ではありません。運用初期は
アウトプット/の結果を必ず目視確認してください - 日付の年が2桁の場合は "20XX年" と仮定して補完します。和暦は非対応です
- 複数ページPDFは1ページ目のみ対象です
- ファイル名衝突時は
氏名_YYYYMMDD(2).pdfのように連番が付与されます config.txtは必須ファイルです。存在しない場合は起動時にエラーになります