From 133d989060bf877b4c3ca83881a0a888ef9edd2c Mon Sep 17 00:00:00 2001 From: David Morady <29502285+dmorady1@users.noreply.github.com> Date: Mon, 15 Sep 2025 10:51:47 +0200 Subject: [PATCH] feat: add support for additional parameters in RapidOcrOptions and fix RapidOcr font_path --- docling/datamodel/pipeline_options.py | 5 ++- docling/models/rapid_ocr_model.py | 58 +++++++++++++++------------ 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 278713d3..6cfff1b5 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -114,7 +114,10 @@ class RapidOcrOptions(OcrOptions): cls_model_path: Optional[str] = None # same default as rapidocr rec_model_path: Optional[str] = None # same default as rapidocr rec_keys_path: Optional[str] = None # same default as rapidocr - rec_font_path: Optional[str] = None # same default as rapidocr + font_path: Optional[str] = None # same default as rapidocr + + # Dictionary to overwrite or pass-through additional parameters + rapidocr_params: Dict[str, Any] = Field(default_factory=dict) model_config = ConfigDict( extra="forbid", diff --git a/docling/models/rapid_ocr_model.py b/docling/models/rapid_ocr_model.py index 6ace3a5e..8476a938 100644 --- a/docling/models/rapid_ocr_model.py +++ b/docling/models/rapid_ocr_model.py @@ -62,32 +62,40 @@ class RapidOcrModel(BaseOcrModel): } backend_enum = _ALIASES.get(self.options.backend, EngineType.ONNXRUNTIME) + params = { + # Global settings (these are still correct) + "Global.text_score": self.options.text_score, + "Global.font_path": self.options.font_path, + # "Global.verbose": self.options.print_verbose, + # Detection model settings + "Det.model_path": self.options.det_model_path, + "Det.use_cuda": use_cuda, + "Det.use_dml": use_dml, + "Det.intra_op_num_threads": intra_op_num_threads, + # Classification model settings + "Cls.model_path": self.options.cls_model_path, + "Cls.use_cuda": use_cuda, + "Cls.use_dml": use_dml, + "Cls.intra_op_num_threads": intra_op_num_threads, + # Recognition model settings + "Rec.model_path": self.options.rec_model_path, + "Rec.font_path": self.options.rec_font_path, + "Rec.keys_path": self.options.rec_keys_path, + "Rec.use_cuda": use_cuda, + "Rec.use_dml": use_dml, + "Rec.intra_op_num_threads": intra_op_num_threads, + "Det.engine_type": backend_enum, + "Cls.engine_type": backend_enum, + "Rec.engine_type": backend_enum, + } + + user_params = self.options.rapidocr_params + if user_params: + _log.debug("Overwriting RapidOCR params with user-provided values.") + params.update(user_params) + self.reader = RapidOCR( - params={ - # Global settings (these are still correct) - "Global.text_score": self.options.text_score, - # "Global.verbose": self.options.print_verbose, - # Detection model settings - "Det.model_path": self.options.det_model_path, - "Det.use_cuda": use_cuda, - "Det.use_dml": use_dml, - "Det.intra_op_num_threads": intra_op_num_threads, - # Classification model settings - "Cls.model_path": self.options.cls_model_path, - "Cls.use_cuda": use_cuda, - "Cls.use_dml": use_dml, - "Cls.intra_op_num_threads": intra_op_num_threads, - # Recognition model settings - "Rec.model_path": self.options.rec_model_path, - "Rec.font_path": self.options.rec_font_path, - "Rec.keys_path": self.options.rec_keys_path, - "Rec.use_cuda": use_cuda, - "Rec.use_dml": use_dml, - "Rec.intra_op_num_threads": intra_op_num_threads, - "Det.engine_type": backend_enum, - "Cls.engine_type": backend_enum, - "Rec.engine_type": backend_enum, - } + params=params, ) def __call__(