Large-Scale Land Survey Digitization Pipeline
GovTech / Document DigitizationNDA Client
Turning ~3 million scanned land survey documents into structured, searchable data
~3M documentsFully open-source stackGPU + CPU hybrid OCRCustom-tuned preprocessingVision-language + traditional OCR combinedBuilt for real-world scan quality
A large volume of physical land survey records, roughly 3 million documents, existed only as scanned PDFs with no structured, searchable data behind them. Off-the-shelf OCR tools failed on the real scan quality: skewed pages, inconsistent lighting, and dense handwritten annotations that generic OCR benchmarks don't account for.
A fully open-source digitization pipeline that compresses, OCRs, and parses each document at scale. Vision-language models handle the documents generic OCR can't read, while a fine-tuned Tesseract instance handles high-volume standard text as the CPU workhorse, keeping cost manageable against a fixed project fee.
- 01Documents are ingested and compressed for efficient processing and storage in Cloudflare R2
- 02Preprocessing steps, deskew, denoise, CLAHE, adaptive threshold, are applied and tuned against real survey document scan quality
- 03Each document is routed through the appropriate OCR engine: PaddleOCR-VL and Qwen2-VL-7B on GPU for complex or handwritten content, fine-tuned Tesseract on CPU for standard text
- →First successful end-to-end pipeline run confirmed on real survey documents
- →Preprocessing tuned specifically against real scan quality, not generic OCR test sets
- →Hybrid GPU/CPU OCR routing keeps processing cost sustainable at millions-of-documents scale
- →Handles ~3 million documents, a very different scale problem than a typical CRM or workflow build
- →Custom preprocessing tuned against real-world scan artifacts rather than clean benchmark data
- →Hybrid OCR strategy: vision-language models for hard cases, traditional OCR for volume, balancing accuracy against cost
stack
PaddleOCR-VLQwen2-VL-7BTesseractPython/FastAPIPostgreSQLRedis/CeleryCloudflare R2Docker