165b3ab384237b8946beef3798c2bd4ebca6d301
Section IV expands from 8 sub-sections in v3.20.0 to 12
sub-sections (A through L) to mirror the §III-G..L lineage.
Sub-section structure:
A Experimental Setup (inherited)
B Signature Detection Performance (inherited)
C All-Pairs Intra-vs-Inter Class Distribution (inherited; corpus-wide)
D Big-4 Accountant-Level Distributional Characterisation (NEW)
- Table V revised: Big-4 dip-test
- Table VI revised: BD/McCrary diagnostic
E Big-4 K=2 / K=3 Mixture Fits (NEW)
- Table VII revised: K=2 components + bootstrap CIs
- Table VIII revised: K=3 components
F Convergent Internal-Consistency Checks (NEW)
- Table IX revised: 3-score per-CPA Spearman
- Table X revised: per-firm summary
- Table XI revised: per-signature Cohen kappa
G Leave-One-Firm-Out Reproducibility (NEW)
- Table XII revised: K=2 LOOO across 4 folds
- Table XIII revised: K=3 LOOO
H Pixel-Identity Positive-Anchor Miss Rate
- Table XIV revised: 0% miss rate, n=262
I Inter-CPA Negative-Anchor FAR (inherited from v3.x §IV-F.1)
J Five-Way Per-Signature + Document-Level Classification
- Table XV: per-signature category counts (TBD; close-out task)
- Table XVI NEW: firm x K=3 cluster cross-tab
K Full-Dataset Robustness (NEW; light scope per author choice)
- Table XVII NEW: K=3 component comparison Big-4 vs full
- Table XVIII NEW: Spearman drift |0.0069|
L Feature Backbone Ablation (inherited from v3.x §IV-H.3)
5 close-out items flagged at end of draft: per-signature category
counts on Big-4 subset (Table XV), table renumbering, §IV-A-C
content audit, document-level worst-case aggregation counts on
Big-4 subset, codex round-22 open questions resolved
(moderate-band inherited; firm anonymisation maintained;
table numbering set provisionally).
Empirical anchors: Scripts 32-41 on this branch. Script 41
(committed in previous commit) supplies the §IV-K Light
scope numbers; all other tables draw from Scripts 32-40
already on the branch.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PDF Signature Extraction System
Automated extraction of handwritten Chinese signatures from PDF documents using hybrid VLM + Computer Vision approach.
Quick Start
Step 1: Extract Pages from CSV
cd /Volumes/NV2/pdf_recognize
source venv/bin/activate
python extract_pages_from_csv.py
Step 2: Extract Signatures
python extract_signatures_hybrid.py
Documentation
- PROJECT_DOCUMENTATION.md - Complete project history, all approaches tested, detailed results
- README_page_extraction.md - Page extraction documentation
- README_hybrid_extraction.md - Hybrid signature extraction documentation
Current Performance
Test Dataset: 5 PDF pages
- Signatures expected: 10
- Signatures found: 7
- Precision: 100% (no false positives)
- Recall: 70%
Key Features
✅ Hybrid Approach: VLM name extraction + CV detection + VLM verification
✅ Name-Based: Signatures saved as signature_周寶蓮.png
✅ No False Positives: Name-specific verification filters out dates, text, stamps
✅ Duplicate Prevention: Only one signature per person
✅ Handles Both: PDFs with/without text layer
File Structure
extract_pages_from_csv.py # Step 1: Extract pages
extract_signatures_hybrid.py # Step 2: Extract signatures (CURRENT)
README.md # This file
PROJECT_DOCUMENTATION.md # Complete documentation
README_page_extraction.md # Page extraction guide
README_hybrid_extraction.md # Signature extraction guide
Requirements
- Python 3.9+
- PyMuPDF, OpenCV, NumPy, Requests
- Ollama with qwen2.5vl:32b model
- Ollama instance: http://192.168.30.36:11434
Data
- Input:
/Volumes/NV2/PDF-Processing/master_signatures.csv(86,073 rows) - PDFs:
/Volumes/NV2/PDF-Processing/total-pdf/batch_*/ - Output:
/Volumes/NV2/PDF-Processing/signature-image-output/
Status
✅ Page extraction: Tested with 100 files, working ✅ Signature extraction: Tested with 5 files, 70% recall, 100% precision ⏳ Large-scale testing: Pending ⏳ Full dataset (86K files): Pending
See PROJECT_DOCUMENTATION.md for complete details.
Description
Automated extraction of handwritten Chinese signatures from PDF documents using hybrid VLM + Computer Vision approach. 70% recall, 100% precision.
Languages
Python
100%