From 65177d3ff7a03e7d57f453fe3f29aecd706bb3eb Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Fri, 13 Mar 2026 11:09:33 +0100 Subject: [PATCH] fix: robust PaddleOCR init with multiple fallback strategies PaddleOCR 3.x removed show_log param and lang='latin'. Try multiple init strategies in order until one succeeds. Co-Authored-By: Claude Opus 4.6 --- paddleocr-service/main.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/paddleocr-service/main.py b/paddleocr-service/main.py index 39d28ed..04b7e77 100644 --- a/paddleocr-service/main.py +++ b/paddleocr-service/main.py @@ -28,22 +28,26 @@ def _load_model(): from paddleocr import PaddleOCR logger.info("Import done. Loading PaddleOCR model...") - try: - _engine = PaddleOCR( - lang="en", - ocr_version="PP-OCRv5", - use_angle_cls=True, - show_log=False, - ) - logger.info("Using PP-OCRv5 (en)") - except Exception as e: - logger.info(f"PP-OCRv5 failed ({e}), trying latin fallback...") - _engine = PaddleOCR( - lang="latin", - use_angle_cls=True, - show_log=False, - ) - logger.info("Using PP-OCRv4 fallback (latin)") + # Try multiple init strategies for different PaddleOCR versions + inits = [ + # PaddleOCR 3.x (no show_log) + dict(lang="en", ocr_version="PP-OCRv5", use_angle_cls=True), + # PaddleOCR 3.x with show_log + dict(lang="en", ocr_version="PP-OCRv5", use_angle_cls=True, show_log=False), + # PaddleOCR 2.8+ (latin) + dict(lang="latin", use_angle_cls=True, show_log=False), + # PaddleOCR 2.8+ (en, no version) + dict(lang="en", use_angle_cls=True, show_log=False), + ] + for i, kwargs in enumerate(inits): + try: + _engine = PaddleOCR(**kwargs) + logger.info(f"PaddleOCR init succeeded with strategy {i}: {kwargs}") + break + except Exception as e: + logger.info(f"PaddleOCR init strategy {i} failed: {e}") + else: + raise RuntimeError("All PaddleOCR init strategies failed") _ready = True logger.info("PaddleOCR model loaded successfully — ready to serve") except Exception as e: