From bb504efd0262edd2c48faa6f6e35e5f0989fa2ca Mon Sep 17 00:00:00 2001 From: Deep Koluguri Date: Sat, 13 Jun 2026 00:22:19 -0400 Subject: [PATCH] fix: downgrade paddlepaddle to 2.6.2 for older CPU AVX compatibility --- extractor.py | 17 +++++++++++++++-- requirements.txt | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/extractor.py b/extractor.py index fd0b3a8..de8d09e 100644 --- a/extractor.py +++ b/extractor.py @@ -110,7 +110,19 @@ def detect_regions(page_png_path): from surya.layout import batch_layout_detection img = Image.open(page_png_path).convert("RGB") - layout_predictions = batch_layout_detection([img], model, processor) + orig_w, orig_h = img.size + scale_factor = 1.0 + # Surya has a numpy int32 overflow bug on Windows for very large images. + # Downscale for layout detection (Surya internally downscales anyway). + if max(orig_w, orig_h) > 2048: + scale_factor = 2048.0 / max(orig_w, orig_h) + new_w = int(orig_w * scale_factor) + new_h = int(orig_h * scale_factor) + img_for_surya = img.resize((new_w, new_h), Image.LANCZOS) + else: + img_for_surya = img + + layout_predictions = batch_layout_detection([img_for_surya], model, processor) regions = [] @@ -131,7 +143,8 @@ def detect_regions(page_png_path): layout = layout_predictions[0] if hasattr(layout, 'bboxes'): for rid, box in enumerate(layout.bboxes, start=1): - bbox = [int(v) for v in box.bbox] + # Scale coordinates back up to original image dimensions + bbox = [int(v / scale_factor) for v in box.bbox] raw_label = box.label label = label_map.get(raw_label, "text").lower() # Surya doesn't expose confidence in this API level easily, default to 1.0 diff --git a/requirements.txt b/requirements.txt index 9229330..956ba30 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ PyMuPDF>=1.23 Pillow>=10.0 numpy>=1.24 paddleocr==3.5.0 -paddlepaddle==3.0.0 +paddlepaddle==2.6.2 pytesseract>=0.3.10 anthropic>=0.40 surya-ocr==0.4.15