| 115 | |
| 116 | @classmethod |
| 117 | def get_model_url(cls, file_info: FileInfo) -> Dict[str, str]: |
| 118 | engine_type = file_info.engine_type.value |
| 119 | ocr_version = file_info.ocr_version.value |
| 120 | task_type = file_info.task_type.value |
| 121 | lang_type = normalize_lang(file_info.lang_type) |
| 122 | model_type = file_info.model_type.value |
| 123 | |
| 124 | model_dict = OmegaConf.select( |
| 125 | cls.model_info, f"{engine_type}.{ocr_version}.{task_type}" |
| 126 | ) |
| 127 | |
| 128 | if not model_dict: |
| 129 | raise ValueError( |
| 130 | f"Unsupported configuration: {engine_type}.{ocr_version}.{task_type}.{model_type}" |
| 131 | ) |
| 132 | |
| 133 | model_key = resolve_model_key( |
| 134 | file_info.task_type, |
| 135 | file_info.ocr_version, |
| 136 | file_info.lang_type, |
| 137 | file_info.model_type, |
| 138 | ) |
| 139 | |
| 140 | if model_key is not None: |
| 141 | if model_key in model_dict: |
| 142 | return model_dict[model_key] |
| 143 | |
| 144 | raise ValueError( |
| 145 | f"Unsupported configuration: {engine_type}.{ocr_version}.{task_type}.{lang_type}.{model_type}" |
| 146 | ) |
| 147 | |
| 148 | # 优先查找 server 模型 |
| 149 | if model_type == ModelType.SERVER.value: |
| 150 | for k in model_dict: |
| 151 | if k.startswith(lang_type) and model_type in k: |
| 152 | return model_dict[k] |
| 153 | |
| 154 | for k in model_dict: |
| 155 | if k.startswith(lang_type) and model_type in k: |
| 156 | return model_dict[k] |
| 157 | |
| 158 | logger.error( |
| 159 | "Unsupported configuration:\n" |
| 160 | f" engine_type = {engine_type}\n" |
| 161 | f" ocr_version = {ocr_version}\n" |
| 162 | f" task_type = {task_type}\n" |
| 163 | f" lang_type = {lang_type}\n" |
| 164 | f" model_type = {model_type}\n" |
| 165 | "\n" |
| 166 | "Please refer to the official model list for supported combinations:\n" |
| 167 | "https://rapidai.github.io/RapidOCRDocs/main/model_list/\n" |
| 168 | "\n" |
| 169 | "Example valid usage:\n" |
| 170 | " from rapidocr import LangRec, OCRVersion, RapidOCR\n" |
| 171 | " engine = RapidOCR(params={'Rec.ocr_version': OCRVersion.PPOCRV5, 'Rec.lang_type': LangRec.CH, 'Rec.model_type': 'mobile'})", |
| 172 | ) |
| 173 | raise ValueError("Invalid OCR configuration.") |
| 174 | |