ken_nogi/PythonProj/ScanOCR
Kenichiro NOGI 4ae53c2725 feat: config.txt読込モジュールを追加
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 10:08:02 +09:00
..
docs/superpowers chore: スクリプト配置をスクリプト/フォルダへ整理しテスト基盤を追加 2026-08-02 10:07:24 +09:00
スクリプト feat: config.txt読込モジュールを追加 2026-08-02 10:08:02 +09:00
.gitignore chore: スクリプト配置をスクリプト/フォルダへ整理しテスト基盤を追加 2026-08-02 10:07:24 +09:00
README.md chore: スクリプト配置をスクリプト/フォルダへ整理しテスト基盤を追加 2026-08-02 10:07:24 +09:00

PDF氏名・日付抽出リネームツール

テンプレート画像赤枠氏名欄、青枠日付欄を基準に、対象フォルダ内のPDFから 氏名・日付をOCRで抽出し、リネーム・振り分けを行うスクリプトです。

セットアップ

pip install opencv-python pdf2image pytesseract pillow numpy

システムに以下が必要ですUbuntu/Debianの例:

sudo apt-get install tesseract-ocr tesseract-ocr-jpn poppler-utils

使い方

  1. テンプレート画像を用意する

    • 実際の書類1枚をスキャン、または元PDFをそのまま画像化
    • 画像編集ソフトなどで、氏名が書かれている位置に赤い四角枠、日付が書かれている位置に青い四角枠を重ねて保存PNG推奨
    • 重要: テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成してください比率で位置を計算するため、多少の解像度差は自動補正されます
  2. フォルダを準備する

    • input/ … 処理対象のPDFを入れる
    • output/ … 成功時、氏名ごとのサブフォルダに YYYYMMDD_氏名.pdf として保存される
    • failed/ … 抽出に失敗したPDFがそのまま退避される要目視確認
  3. 実行する

python extract_and_rename.py \
  --template template.png \
  --input ./input \
  --output ./output \
  --failed ./failed \
  --margin 0.10

--margin は枠位置の許容誤差率です。0.10 = 上下左右に枠の幅・高さの10%分だけ 広げた範囲までOCR対象としますスキャン時の位置ズレ対策

注意点

  • OCRは完璧ではありません。特に手書きに近い字体、かすれ、低解像度スキャンでは 誤読が発生します。output/ の結果は初回運用時に必ず目視確認してください。
  • 日付の年が2桁例: 26/08/02の場合、スクリプトは "20XX年" と仮定して補完します。 昭和・平成表記など和暦が使われる書類の場合は clean_date() 関数の調整が必要です。
  • 複数ページPDFの場合、現在は1ページ目のみを対象にしています。
  • 氏名に同姓同名がいる場合や、同じ氏名で複数回書類が発行される場合、ファイル名の 衝突は自動的に連番_1, _2...)で回避されます。
  • テンプレートで検出される枠は「最大面積の赤/青矩形」を採用しています。枠線以外に 赤・青の要素(ロゴなど)がテンプレート内にあると誤検出する可能性があるため、 テンプレートはできるだけシンプルな見た目にしてください。

ファイル構成

  • box_detector.py … テンプレートから赤枠・青枠の位置を検出するモジュール
  • extract_and_rename.py … メイン処理OCR抽出・リネーム・移動