Engineer Details Six Weeks Spent Training and Testing Signature Redaction Models for Closed-Loop Document Anonymization

A detailed case study describes attempts to automatically redact handwritten signatures from scanned and text-based PDFs containing personal data such as names, phones, addresses and signatures. The work was performed inside an air-gapped environment on a single GPU machine with no internet access. Multiple approaches including color-based ink gates, pre-trained YOLO detectors, custom-trained YOLO11s models, Tesseract OCR heuristics and various vision-language OCR engines were evaluated on 492 real pages plus synthetic augmentations. Key findings include rotation handling bugs, line-assembly failures in Tesseract, the necessity of using apply_redactions instead of draw_rect for true removal, and the limited value of vision models once rule-based pipelines are mature. The final pipeline reduced expensive vision-model calls from 50 pages to 18 pages while achieving zero leaks across thousands of redactions. The author also measured twelve OCR engines and demonstrated that combining PaddleOCR detection with Tesseract recognition yields the best accuracy-to-speed trade-off.

HabrTranslated from Russian

Read at source

A developer working on automated document sanitization spent six weeks attempting to reliably locate and redact handwritten signatures inside PDFs that must leave a closed network. The goal was to remove surnames, telephone numbers, addresses and signatures while preserving document usability, all on a single air-gapped workstation equipped with one consumer GPU.

Documents arrive in two forms. Text-layer PDFs allow direct removal of recognized words. Scanned pages require the system to detect text via Tesseract, then draw black rectangles over the corresponding image regions. Four parallel detection methods—dictionary lookup, regular expressions, natasha NER and an ink gate—successfully handled printed names but found zero signatures because signatures contain no machine-readable text.

Initial experiments with a color-saturation gate worked on blue-ink signatures yet failed completely on black-ink signatures and on any grayscale scan. An alternative heuristic that painted any dark region ignored by OCR erased entire table columns when text was printed in small fonts, violating the rule that only recognized text may be redacted.

Three off-the-shelf object detectors were benchmarked on 1,254 pages. YOLOS produced excessive false positives on engineering drawings and was discarded. A seal detector returned high-confidence false positives on documents containing no seals. A custom YOLO11s model trained on 600 synthetically augmented signature images plus 40 real pages reached 88 % coverage on isolated strokes but dropped sharply when adjacent signatures merged into large blobs.

Two rotation-related bugs repeatedly caused missed redactions. PDF /Rotate attributes produced coordinate mismatches between detection and drawing layers. Pages scanned sideways defeated Tesseract’s orientation detection when run with --psm 0, leaving the entire page unprocessed until OSD was re-enabled for low-confidence cases.

After switching the vision model from proactive detection to post-redaction verification, expensive GPU calls fell from roughly 50 pages per batch to 18. On the final corpus of 492 pages only 3.7 % of documents required the vision stage, all of them empty forms with vertical table headers.

Image-preprocessing tests showed that the classical OpenCV pipeline (deskew, illumination normalization, denoising, 2× upscaling) raised OCR to 92/103 pages while RealESRGAN reduced the same metric to 76/103 and increased runtime dramatically. Preprocessing is therefore applied only when the first-pass score falls below 70.

Comparison of twelve OCR engines on a two-page test document revealed that PaddleOCR detection combined with Tesseract recognition produced 16 correctly grouped name cells in 3.7 seconds. Full replacement by any single vision-language model either missed names entirely or required 12–20 seconds per page.

Redaction implementation errors were discovered only after the author added a verification step that extracts text from beneath every black rectangle. Using PyMuPDF draw_rect left recoverable text; switching to apply_redactions eliminated all leaks across 3,029 redactions in production files. White rectangles drawn for stamps and signatures occasionally overwrote already-redacted black areas, reopening rows of names—an issue caught only by the same under-rectangle text check.

The final pipeline therefore combines rule-based text removal, a lightweight YOLO signature detector, selective classical preprocessing, Tesseract augmented by PaddleOCR cell detection, and mandatory post-redaction text verification, achieving reliable signature removal inside the required closed environment.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Privacy & Surveillance

Maximizing iPhone Privacy: Essential Settings to Enable, Disable, and Verify Immediately
Top 10 Secure DNS Servers for Privacy, Threat Blocking and Ad Filtering in 2026
WebRTC IP Leaks Explained: Why Disabling the Protocol Harms Anonymity in Anti-Detect Browsers