fix: correct OCR coordinate scaling by inferring dimensions from bbox
Critical Fix: The previous implementation incorrectly calculated scale factors because calculate_page_dimensions() was prioritizing source file dimensions over OCR coordinate analysis, resulting in scale=1.0 when it should have been ~0.27. Root Cause: - PaddleOCR processes PDFs at high resolution (e.g., 2185x3500 pixels) - OCR bbox coordinates are in this high-res space - calculate_page_dimensions() was returning source PDF size (595x842) instead - This caused scale_w=1.0, scale_h=1.0, placing all text out of bounds Solution: 1. Rewrite calculate_page_dimensions() to: - Accept full ocr_data instead of just text_regions - Process both text_regions AND layout elements - Handle polygon bbox format [[x,y], ...] correctly - Infer OCR dimensions from max bbox coordinates FIRST - Only fallback to source file dimensions if inference fails 2. Separate OCR dimensions from target PDF dimensions: - ocr_width/height: Inferred from bbox (e.g., 2185x3280) - target_width/height: From source file (e.g., 595x842) - scale_w = target_width / ocr_width (e.g., 0.272) - scale_h = target_height / ocr_height (e.g., 0.257) 3. Add PyPDF2 support: - Extract dimensions from source PDF files - Required for getting target PDF size Changes: - backend/app/services/pdf_generator_service.py: - Fix calculate_page_dimensions() to infer from bbox first - Add PyPDF2 support in get_original_page_size() - Simplify scaling logic (removed ocr_dimensions dependency) - Update all drawing calls to use target_height instead of page_height - requirements.txt: - Add PyPDF2>=3.0.0 for PDF dimension extraction - backend/test_bbox_scaling.py: - Add comprehensive test for high-res OCR → A4 PDF scenario - Validates proper scale factor calculation (0.272 x 0.257) Test Results: ✓ OCR dimensions correctly inferred: 2185.0 x 3280.0 ✓ Target PDF dimensions extracted: 595.3 x 841.9 ✓ Scale factors correct: X=0.272, Y=0.257 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,7 @@ opencv-python>=4.8.0
|
||||
weasyprint>=60.0
|
||||
markdown>=3.5.0
|
||||
reportlab>=4.0.0 # Layout-preserving PDF generation with precise coordinate control
|
||||
PyPDF2>=3.0.0 # Extract dimensions from source PDF files
|
||||
# Note: pandoc needs to be installed via brew (brew install pandoc)
|
||||
|
||||
# ===== Data Export =====
|
||||
|
||||
Reference in New Issue
Block a user