paddlex 3.0.0rc1__py3-none-any.whl → 3.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. paddlex/.version +1 -1
  2. paddlex/__init__.py +1 -1
  3. paddlex/configs/modules/chart_parsing/PP-Chart2Table.yaml +13 -0
  4. paddlex/configs/modules/doc_vlm/PP-DocBee2-3B.yaml +14 -0
  5. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-L.yaml +40 -0
  6. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-M.yaml +40 -0
  7. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-S.yaml +40 -0
  8. paddlex/configs/modules/layout_detection/PP-DocBlockLayout.yaml +40 -0
  9. paddlex/configs/modules/layout_detection/PP-DocLayout-L.yaml +2 -2
  10. paddlex/configs/modules/layout_detection/PP-DocLayout-M.yaml +2 -2
  11. paddlex/configs/modules/layout_detection/PP-DocLayout-S.yaml +2 -2
  12. paddlex/configs/modules/layout_detection/PP-DocLayout_plus-L.yaml +40 -0
  13. paddlex/configs/modules/text_detection/PP-OCRv5_mobile_det.yaml +40 -0
  14. paddlex/configs/modules/text_detection/PP-OCRv5_server_det.yaml +40 -0
  15. paddlex/configs/modules/text_recognition/PP-OCRv5_mobile_rec.yaml +39 -0
  16. paddlex/configs/modules/text_recognition/PP-OCRv5_server_rec.yaml +39 -0
  17. paddlex/configs/modules/textline_orientation/PP-LCNet_x1_0_textline_ori.yaml +41 -0
  18. paddlex/configs/pipelines/OCR.yaml +7 -6
  19. paddlex/configs/pipelines/PP-ChatOCRv3-doc.yaml +3 -1
  20. paddlex/configs/pipelines/PP-ChatOCRv4-doc.yaml +91 -34
  21. paddlex/configs/pipelines/PP-StructureV3.yaml +72 -72
  22. paddlex/configs/pipelines/doc_understanding.yaml +1 -1
  23. paddlex/configs/pipelines/formula_recognition.yaml +2 -2
  24. paddlex/configs/pipelines/layout_parsing.yaml +3 -2
  25. paddlex/configs/pipelines/seal_recognition.yaml +1 -0
  26. paddlex/configs/pipelines/table_recognition.yaml +2 -1
  27. paddlex/configs/pipelines/table_recognition_v2.yaml +7 -1
  28. paddlex/hpip_links.html +20 -20
  29. paddlex/inference/common/batch_sampler/doc_vlm_batch_sampler.py +33 -10
  30. paddlex/inference/common/batch_sampler/image_batch_sampler.py +34 -25
  31. paddlex/inference/common/result/mixin.py +19 -12
  32. paddlex/inference/models/base/predictor/base_predictor.py +2 -8
  33. paddlex/inference/models/common/static_infer.py +11 -59
  34. paddlex/inference/models/common/tokenizer/__init__.py +2 -0
  35. paddlex/inference/models/common/tokenizer/clip_tokenizer.py +1 -1
  36. paddlex/inference/models/common/tokenizer/gpt_tokenizer.py +2 -2
  37. paddlex/inference/models/common/tokenizer/qwen2_5_tokenizer.py +112 -0
  38. paddlex/inference/models/common/tokenizer/qwen2_tokenizer.py +7 -1
  39. paddlex/inference/models/common/tokenizer/qwen_tokenizer.py +288 -0
  40. paddlex/inference/models/common/tokenizer/tokenizer_utils.py +13 -13
  41. paddlex/inference/models/common/tokenizer/tokenizer_utils_base.py +3 -3
  42. paddlex/inference/models/common/tokenizer/vocab.py +7 -7
  43. paddlex/inference/models/common/vlm/conversion_utils.py +99 -0
  44. paddlex/inference/models/common/vlm/fusion_ops.py +205 -0
  45. paddlex/inference/models/common/vlm/generation/configuration_utils.py +1 -1
  46. paddlex/inference/models/common/vlm/generation/logits_process.py +1 -1
  47. paddlex/inference/models/common/vlm/generation/utils.py +1 -1
  48. paddlex/inference/models/common/vlm/transformers/configuration_utils.py +3 -3
  49. paddlex/inference/models/common/vlm/transformers/conversion_utils.py +3 -3
  50. paddlex/inference/models/common/vlm/transformers/model_outputs.py +2 -2
  51. paddlex/inference/models/common/vlm/transformers/model_utils.py +7 -31
  52. paddlex/inference/models/doc_vlm/modeling/GOT_ocr_2_0.py +830 -0
  53. paddlex/inference/models/doc_vlm/modeling/__init__.py +2 -0
  54. paddlex/inference/models/doc_vlm/modeling/qwen2.py +1606 -0
  55. paddlex/inference/models/doc_vlm/modeling/qwen2_5_vl.py +3006 -0
  56. paddlex/inference/models/doc_vlm/modeling/qwen2_vl.py +0 -105
  57. paddlex/inference/models/doc_vlm/predictor.py +79 -24
  58. paddlex/inference/models/doc_vlm/processors/GOT_ocr_2_0.py +97 -0
  59. paddlex/inference/models/doc_vlm/processors/__init__.py +2 -0
  60. paddlex/inference/models/doc_vlm/processors/common.py +189 -0
  61. paddlex/inference/models/doc_vlm/processors/qwen2_5_vl.py +548 -0
  62. paddlex/inference/models/doc_vlm/processors/qwen2_vl.py +21 -176
  63. paddlex/inference/models/formula_recognition/predictor.py +7 -1
  64. paddlex/inference/models/formula_recognition/processors.py +92 -79
  65. paddlex/inference/models/formula_recognition/result.py +28 -27
  66. paddlex/inference/models/image_feature/processors.py +3 -4
  67. paddlex/inference/models/keypoint_detection/predictor.py +3 -0
  68. paddlex/inference/models/object_detection/predictor.py +2 -0
  69. paddlex/inference/models/object_detection/processors.py +28 -3
  70. paddlex/inference/models/object_detection/utils.py +2 -0
  71. paddlex/inference/models/table_structure_recognition/result.py +0 -10
  72. paddlex/inference/models/text_detection/predictor.py +8 -0
  73. paddlex/inference/models/text_detection/processors.py +44 -10
  74. paddlex/inference/models/text_detection/result.py +0 -10
  75. paddlex/inference/pipelines/__init__.py +9 -5
  76. paddlex/inference/pipelines/_parallel.py +172 -0
  77. paddlex/inference/pipelines/anomaly_detection/pipeline.py +16 -6
  78. paddlex/inference/pipelines/attribute_recognition/pipeline.py +11 -1
  79. paddlex/inference/pipelines/base.py +14 -4
  80. paddlex/inference/pipelines/components/faisser.py +1 -1
  81. paddlex/inference/pipelines/doc_preprocessor/pipeline.py +53 -27
  82. paddlex/inference/pipelines/formula_recognition/pipeline.py +120 -82
  83. paddlex/inference/pipelines/formula_recognition/result.py +1 -11
  84. paddlex/inference/pipelines/image_classification/pipeline.py +16 -6
  85. paddlex/inference/pipelines/image_multilabel_classification/pipeline.py +16 -6
  86. paddlex/inference/pipelines/instance_segmentation/pipeline.py +16 -6
  87. paddlex/inference/pipelines/keypoint_detection/pipeline.py +16 -6
  88. paddlex/inference/pipelines/layout_parsing/pipeline.py +34 -47
  89. paddlex/inference/pipelines/layout_parsing/pipeline_v2.py +893 -260
  90. paddlex/inference/pipelines/layout_parsing/result.py +4 -17
  91. paddlex/inference/pipelines/layout_parsing/result_v2.py +523 -245
  92. paddlex/inference/pipelines/layout_parsing/setting.py +87 -0
  93. paddlex/inference/pipelines/layout_parsing/utils.py +565 -1998
  94. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/__init__.py +16 -0
  95. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/utils.py +1144 -0
  96. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/xycuts.py +563 -0
  97. paddlex/inference/pipelines/m_3d_bev_detection/pipeline.py +2 -2
  98. paddlex/inference/pipelines/multilingual_speech_recognition/pipeline.py +2 -2
  99. paddlex/inference/pipelines/object_detection/pipeline.py +16 -6
  100. paddlex/inference/pipelines/ocr/pipeline.py +127 -70
  101. paddlex/inference/pipelines/ocr/result.py +19 -16
  102. paddlex/inference/pipelines/open_vocabulary_detection/pipeline.py +2 -2
  103. paddlex/inference/pipelines/open_vocabulary_segmentation/pipeline.py +2 -2
  104. paddlex/inference/pipelines/pp_chatocr/pipeline_base.py +2 -2
  105. paddlex/inference/pipelines/pp_chatocr/pipeline_v3.py +2 -5
  106. paddlex/inference/pipelines/pp_chatocr/pipeline_v4.py +5 -5
  107. paddlex/inference/pipelines/rotated_object_detection/pipeline.py +16 -6
  108. paddlex/inference/pipelines/seal_recognition/pipeline.py +109 -53
  109. paddlex/inference/pipelines/semantic_segmentation/pipeline.py +16 -6
  110. paddlex/inference/pipelines/small_object_detection/pipeline.py +16 -6
  111. paddlex/inference/pipelines/table_recognition/pipeline.py +26 -18
  112. paddlex/inference/pipelines/table_recognition/pipeline_v2.py +624 -53
  113. paddlex/inference/pipelines/table_recognition/result.py +1 -1
  114. paddlex/inference/pipelines/table_recognition/table_recognition_post_processing_v2.py +9 -5
  115. paddlex/inference/pipelines/ts_anomaly_detection/pipeline.py +2 -2
  116. paddlex/inference/pipelines/ts_classification/pipeline.py +2 -2
  117. paddlex/inference/pipelines/ts_forecasting/pipeline.py +2 -2
  118. paddlex/inference/pipelines/video_classification/pipeline.py +2 -2
  119. paddlex/inference/pipelines/video_detection/pipeline.py +2 -2
  120. paddlex/inference/serving/basic_serving/_pipeline_apps/_common/common.py +5 -1
  121. paddlex/inference/serving/basic_serving/_pipeline_apps/layout_parsing.py +0 -1
  122. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv3_doc.py +0 -1
  123. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv4_doc.py +1 -1
  124. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_structurev3.py +6 -2
  125. paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition.py +1 -5
  126. paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition_v2.py +4 -5
  127. paddlex/inference/serving/infra/utils.py +20 -22
  128. paddlex/inference/serving/schemas/formula_recognition.py +1 -1
  129. paddlex/inference/serving/schemas/layout_parsing.py +1 -2
  130. paddlex/inference/serving/schemas/pp_chatocrv3_doc.py +1 -2
  131. paddlex/inference/serving/schemas/pp_chatocrv4_doc.py +2 -2
  132. paddlex/inference/serving/schemas/pp_structurev3.py +10 -6
  133. paddlex/inference/serving/schemas/seal_recognition.py +1 -1
  134. paddlex/inference/serving/schemas/table_recognition.py +2 -6
  135. paddlex/inference/serving/schemas/table_recognition_v2.py +5 -6
  136. paddlex/inference/utils/hpi.py +8 -1
  137. paddlex/inference/utils/hpi_model_info_collection.json +81 -2
  138. paddlex/inference/utils/io/readers.py +12 -12
  139. paddlex/inference/utils/mkldnn_blocklist.py +25 -0
  140. paddlex/inference/utils/official_models.py +14 -0
  141. paddlex/inference/utils/pp_option.py +29 -8
  142. paddlex/model.py +2 -2
  143. paddlex/modules/__init__.py +1 -1
  144. paddlex/modules/anomaly_detection/evaluator.py +2 -2
  145. paddlex/modules/base/__init__.py +1 -1
  146. paddlex/modules/base/evaluator.py +5 -5
  147. paddlex/modules/base/trainer.py +1 -1
  148. paddlex/modules/doc_vlm/dataset_checker.py +2 -2
  149. paddlex/modules/doc_vlm/evaluator.py +2 -2
  150. paddlex/modules/doc_vlm/exportor.py +2 -2
  151. paddlex/modules/doc_vlm/model_list.py +1 -1
  152. paddlex/modules/doc_vlm/trainer.py +2 -2
  153. paddlex/modules/face_recognition/evaluator.py +2 -2
  154. paddlex/modules/formula_recognition/evaluator.py +5 -2
  155. paddlex/modules/formula_recognition/model_list.py +3 -0
  156. paddlex/modules/formula_recognition/trainer.py +3 -0
  157. paddlex/modules/general_recognition/evaluator.py +1 -1
  158. paddlex/modules/image_classification/evaluator.py +2 -2
  159. paddlex/modules/image_classification/model_list.py +1 -0
  160. paddlex/modules/instance_segmentation/evaluator.py +1 -1
  161. paddlex/modules/keypoint_detection/evaluator.py +1 -1
  162. paddlex/modules/m_3d_bev_detection/evaluator.py +2 -2
  163. paddlex/modules/multilabel_classification/evaluator.py +2 -2
  164. paddlex/modules/object_detection/dataset_checker/dataset_src/convert_dataset.py +4 -4
  165. paddlex/modules/object_detection/evaluator.py +2 -2
  166. paddlex/modules/object_detection/model_list.py +2 -0
  167. paddlex/modules/semantic_segmentation/evaluator.py +2 -2
  168. paddlex/modules/table_recognition/evaluator.py +2 -2
  169. paddlex/modules/text_detection/evaluator.py +2 -2
  170. paddlex/modules/text_detection/model_list.py +2 -0
  171. paddlex/modules/text_recognition/evaluator.py +2 -2
  172. paddlex/modules/text_recognition/model_list.py +2 -0
  173. paddlex/modules/ts_anomaly_detection/evaluator.py +2 -2
  174. paddlex/modules/ts_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
  175. paddlex/modules/ts_classification/evaluator.py +2 -2
  176. paddlex/modules/ts_forecast/evaluator.py +2 -2
  177. paddlex/modules/video_classification/evaluator.py +2 -2
  178. paddlex/modules/video_detection/evaluator.py +2 -2
  179. paddlex/ops/__init__.py +2 -2
  180. paddlex/paddlex_cli.py +19 -13
  181. paddlex/repo_apis/Paddle3D_api/bev_fusion/model.py +2 -2
  182. paddlex/repo_apis/PaddleClas_api/cls/config.py +1 -1
  183. paddlex/repo_apis/PaddleClas_api/cls/model.py +1 -1
  184. paddlex/repo_apis/PaddleClas_api/cls/register.py +10 -0
  185. paddlex/repo_apis/PaddleClas_api/cls/runner.py +1 -1
  186. paddlex/repo_apis/PaddleDetection_api/instance_seg/model.py +1 -1
  187. paddlex/repo_apis/PaddleDetection_api/instance_seg/runner.py +1 -1
  188. paddlex/repo_apis/PaddleDetection_api/object_det/config.py +1 -1
  189. paddlex/repo_apis/PaddleDetection_api/object_det/model.py +1 -1
  190. paddlex/repo_apis/PaddleDetection_api/object_det/official_categories.py +25 -0
  191. paddlex/repo_apis/PaddleDetection_api/object_det/register.py +30 -0
  192. paddlex/repo_apis/PaddleDetection_api/object_det/runner.py +1 -1
  193. paddlex/repo_apis/PaddleOCR_api/formula_rec/config.py +3 -3
  194. paddlex/repo_apis/PaddleOCR_api/formula_rec/model.py +5 -9
  195. paddlex/repo_apis/PaddleOCR_api/formula_rec/register.py +27 -0
  196. paddlex/repo_apis/PaddleOCR_api/formula_rec/runner.py +1 -1
  197. paddlex/repo_apis/PaddleOCR_api/table_rec/model.py +1 -1
  198. paddlex/repo_apis/PaddleOCR_api/table_rec/runner.py +1 -1
  199. paddlex/repo_apis/PaddleOCR_api/text_det/model.py +1 -1
  200. paddlex/repo_apis/PaddleOCR_api/text_det/register.py +18 -0
  201. paddlex/repo_apis/PaddleOCR_api/text_det/runner.py +1 -1
  202. paddlex/repo_apis/PaddleOCR_api/text_rec/config.py +3 -3
  203. paddlex/repo_apis/PaddleOCR_api/text_rec/model.py +5 -9
  204. paddlex/repo_apis/PaddleOCR_api/text_rec/register.py +18 -0
  205. paddlex/repo_apis/PaddleOCR_api/text_rec/runner.py +1 -1
  206. paddlex/repo_apis/PaddleSeg_api/seg/model.py +1 -1
  207. paddlex/repo_apis/PaddleSeg_api/seg/runner.py +1 -1
  208. paddlex/repo_apis/PaddleTS_api/ts_ad/config.py +3 -3
  209. paddlex/repo_apis/PaddleTS_api/ts_cls/config.py +2 -2
  210. paddlex/repo_apis/PaddleTS_api/ts_fc/config.py +4 -4
  211. paddlex/repo_apis/PaddleVideo_api/video_cls/config.py +1 -1
  212. paddlex/repo_apis/PaddleVideo_api/video_cls/model.py +1 -1
  213. paddlex/repo_apis/PaddleVideo_api/video_cls/runner.py +1 -1
  214. paddlex/repo_apis/PaddleVideo_api/video_det/config.py +1 -1
  215. paddlex/repo_apis/PaddleVideo_api/video_det/model.py +1 -1
  216. paddlex/repo_apis/PaddleVideo_api/video_det/runner.py +1 -1
  217. paddlex/repo_apis/base/config.py +1 -1
  218. paddlex/repo_manager/core.py +3 -3
  219. paddlex/repo_manager/meta.py +6 -2
  220. paddlex/repo_manager/repo.py +17 -16
  221. paddlex/utils/custom_device_list.py +26 -2
  222. paddlex/utils/deps.py +1 -1
  223. paddlex/utils/device.py +15 -8
  224. paddlex/utils/env.py +4 -0
  225. paddlex/utils/flags.py +2 -4
  226. paddlex/utils/fonts/__init__.py +34 -4
  227. paddlex/utils/misc.py +1 -1
  228. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/METADATA +52 -56
  229. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/RECORD +233 -206
  230. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/WHEEL +1 -1
  231. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/entry_points.txt +0 -0
  232. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/licenses/LICENSE +0 -0
  233. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.1.dist-info}/top_level.txt +0 -0
@@ -135,11 +135,9 @@ class TextRecModel(BaseModel):
135
135
  # PDX related settings
136
136
  device_type = device.split(":")[0]
137
137
  uniform_output_enabled = kwargs.pop("uniform_output_enabled", True)
138
- export_with_pir = kwargs.pop("export_with_pir", False)
139
138
  config.update({"Global.uniform_output_enabled": uniform_output_enabled})
140
- config.update({"Global.pdx_model_name": self.name})
141
- if export_with_pir:
142
- config.update({"Global.export_with_pir": export_with_pir})
139
+ config.update({"Global.model_name": self.name})
140
+ config.update({"Global.export_with_pir": kwargs.pop("export_with_pir", False)})
143
141
 
144
142
  self._assert_empty_kwargs(kwargs)
145
143
 
@@ -272,11 +270,9 @@ class TextRecModel(BaseModel):
272
270
 
273
271
  # PDX related settings
274
272
  uniform_output_enabled = kwargs.pop("uniform_output_enabled", True)
275
- export_with_pir = kwargs.pop("export_with_pir", False)
276
273
  config.update({"Global.uniform_output_enabled": uniform_output_enabled})
277
- config.update({"Global.pdx_model_name": self.name})
278
- if export_with_pir:
279
- config.update({"Global.export_with_pir": export_with_pir})
274
+ config.update({"Global.model_name": self.name})
275
+ config.update({"Global.export_with_pir": kwargs.pop("export_with_pir", False)})
280
276
 
281
277
  self._assert_empty_kwargs(kwargs)
282
278
 
@@ -301,7 +297,7 @@ class TextRecModel(BaseModel):
301
297
  save_dir (str, optional): the directory path to save output. Defaults to None.
302
298
 
303
299
  Returns:
304
- CompletedProcess: the result of infering subprocess execution.
300
+ CompletedProcess: the result of inferring subprocess execution.
305
301
  """
306
302
  config = self.config.copy()
307
303
  cli_args = []
@@ -196,3 +196,21 @@ register_model_info(
196
196
  "supported_apis": ["train", "evaluate", "predict", "export", "infer"],
197
197
  }
198
198
  )
199
+
200
+ register_model_info(
201
+ {
202
+ "model_name": "PP-OCRv5_server_rec",
203
+ "suite": "TextRec",
204
+ "config_path": osp.join(PDX_CONFIG_DIR, "PP-OCRv5_server_rec.yaml"),
205
+ "supported_apis": ["train", "evaluate", "predict", "export"],
206
+ }
207
+ )
208
+
209
+ register_model_info(
210
+ {
211
+ "model_name": "PP-OCRv5_mobile_rec",
212
+ "suite": "TextRec",
213
+ "config_path": osp.join(PDX_CONFIG_DIR, "PP-OCRv5_mobile_rec.yaml"),
214
+ "supported_apis": ["train", "evaluate", "predict", "export"],
215
+ }
216
+ )
@@ -131,7 +131,7 @@ class TextRecRunner(BaseRunner):
131
131
  device (str): unused.
132
132
 
133
133
  Returns:
134
- CompletedProcess: the result of infering subprocess execution.
134
+ CompletedProcess: the result of inferring subprocess execution.
135
135
  """
136
136
  cmd = [self.python, "tools/infer/predict_rec.py", *cli_args]
137
137
  return self.run_cmd(cmd, switch_wdir=True, echo=True, silent=False)
@@ -388,7 +388,7 @@ class SegModel(BaseModel):
388
388
  save_dir (str, optional): the directory path to save output. Defaults to None.
389
389
 
390
390
  Returns:
391
- CompletedProcess: the result of infering subprocess execution.
391
+ CompletedProcess: the result of inferring subprocess execution.
392
392
  """
393
393
  config = self.config.copy()
394
394
  cli_args = []
@@ -151,7 +151,7 @@ class SegRunner(BaseRunner):
151
151
  device (str): unused.
152
152
 
153
153
  Returns:
154
- CompletedProcess: the result of infering subprocess execution.
154
+ CompletedProcess: the result of inferring subprocess execution.
155
155
  """
156
156
  # `device` unused
157
157
  cli_args = self._gather_opts_args(cli_args)
@@ -24,7 +24,7 @@ class TSAnomalyConfig(BaseTSConfig):
24
24
 
25
25
  def update_input_len(self, seq_len: int):
26
26
  """
27
- upadte the input sequence length
27
+ update the input sequence length
28
28
 
29
29
  Args:
30
30
  seq_len (int): input length
@@ -40,7 +40,7 @@ class TSAnomalyConfig(BaseTSConfig):
40
40
 
41
41
  def update_dataset(self, dataset_dir: str, dataset_type: str = None):
42
42
  """
43
- upadte the dataset
43
+ update the dataset
44
44
 
45
45
  Args:
46
46
  dataset_dir (str): dataset root path
@@ -57,7 +57,7 @@ class TSAnomalyConfig(BaseTSConfig):
57
57
  update basic info including time_col, freq, target_cols.
58
58
 
59
59
  Args:
60
- info_params (dict): upadte basic info
60
+ info_params (dict): update basic info
61
61
 
62
62
  Raises:
63
63
  TypeError: if info_params is not dict, raising TypeError
@@ -24,7 +24,7 @@ class TSClassifyConfig(BaseTSConfig):
24
24
 
25
25
  def update_dataset(self, dataset_dir: str, dataset_type: str = None):
26
26
  """
27
- upadte the dataset
27
+ update the dataset
28
28
 
29
29
  Args:
30
30
  dataset_dir (str): dataset root path
@@ -41,7 +41,7 @@ class TSClassifyConfig(BaseTSConfig):
41
41
  update basic info including time_col, freq, target_cols.
42
42
 
43
43
  Args:
44
- info_params (dict): upadte basic info
44
+ info_params (dict): update basic info
45
45
 
46
46
  Raises:
47
47
  TypeError: if info_params is not dict, raising TypeError
@@ -24,7 +24,7 @@ class LongForecastConfig(BaseTSConfig):
24
24
 
25
25
  def update_input_len(self, seq_len: int):
26
26
  """
27
- upadte the input sequence length
27
+ update the input sequence length
28
28
 
29
29
  Args:
30
30
  seq_len (int): input length
@@ -72,7 +72,7 @@ class LongForecastConfig(BaseTSConfig):
72
72
 
73
73
  def update_dataset(self, dataset_dir: str, dataset_type: str = None):
74
74
  """
75
- upadte the dataset
75
+ update the dataset
76
76
 
77
77
  Args:
78
78
  dataset_dir (str): dataset root path
@@ -89,7 +89,7 @@ class LongForecastConfig(BaseTSConfig):
89
89
  update basic info including time_col, freq, target_cols.
90
90
 
91
91
  Args:
92
- info_params (dict): upadte basic info
92
+ info_params (dict): update basic info
93
93
 
94
94
  Raises:
95
95
  TypeError: if info_params is not dict, raising TypeError
@@ -104,7 +104,7 @@ class LongForecastConfig(BaseTSConfig):
104
104
  update patience.
105
105
 
106
106
  Args:
107
- patience (int): upadte patience
107
+ patience (int): update patience
108
108
 
109
109
  Raises:
110
110
  RuntimeError: if patience is not found, raising RuntimeError
@@ -435,7 +435,7 @@ indicating that no pretrained model to be used."
435
435
  """update directory that save predicting output
436
436
 
437
437
  Args:
438
- save_dir (str): the dicrectory path that save predicting output.
438
+ save_dir (str): the directory path that save predicting output.
439
439
  """
440
440
  self.update({"Infer.save_dir": save_dir})
441
441
 
@@ -257,7 +257,7 @@ class VideoClsModel(BaseModel):
257
257
  dict_path (str, optional): the label dict file path. Defaults to None.
258
258
 
259
259
  Returns:
260
- CompletedProcess: the result of infering subprocess execution.
260
+ CompletedProcess: the result of inferring subprocess execution.
261
261
  """
262
262
  model_dir = abspath(model_dir)
263
263
  input_path = abspath(input_path)
@@ -136,7 +136,7 @@ class VideoClsRunner(BaseRunner):
136
136
  device (str): unused.
137
137
 
138
138
  Returns:
139
- CompletedProcess: the result of infering subprocess execution.
139
+ CompletedProcess: the result of inferring subprocess execution.
140
140
  """
141
141
  # `device` unused
142
142
  cmd = [self.python, "python/predict_cls.py", "-c", config_path, *cli_args]
@@ -436,7 +436,7 @@ indicating that no pretrained model to be used."
436
436
  """update directory that save predicting output
437
437
 
438
438
  Args:
439
- save_dir (str): the dicrectory path that save predicting output.
439
+ save_dir (str): the directory path that save predicting output.
440
440
  """
441
441
  self.update({"Infer.save_dir": save_dir})
442
442
 
@@ -258,7 +258,7 @@ class VideoDetModel(BaseModel):
258
258
  dict_path (str, optional): the label dict file path. Defaults to None.
259
259
 
260
260
  Returns:
261
- CompletedProcess: the result of infering subprocess execution.
261
+ CompletedProcess: the result of inferring subprocess execution.
262
262
  """
263
263
  model_dir = abspath(model_dir)
264
264
  input_path = abspath(input_path)
@@ -136,7 +136,7 @@ class VideoDetRunner(BaseRunner):
136
136
  device (str): unused.
137
137
 
138
138
  Returns:
139
- CompletedProcess: the result of infering subprocess execution.
139
+ CompletedProcess: the result of inferring subprocess execution.
140
140
  """
141
141
  # `device` unused
142
142
  cmd = [self.python, "python/predict_cls.py", "-c", config_path, *cli_args]
@@ -106,7 +106,7 @@ class BaseConfig(_Config, metaclass=abc.ABCMeta):
106
106
  """
107
107
  Abstract base class of Config.
108
108
 
109
- Config provides the funtionality to load, parse, or dump to a configuration
109
+ Config provides the functionality to load, parse, or dump to a configuration
110
110
  file with a specific format. Also, it provides APIs to update configurations
111
111
  of several important hyperparameters and model components.
112
112
  """
@@ -101,7 +101,7 @@ def setup(
101
101
  """setup"""
102
102
  if update_repos and use_local_repos:
103
103
  logging.error(
104
- f"The `--update_repos` and `--use_local_repos` should not be True at the same time. They are global setting for all repos. `--update_repos` means that update all repos to sync with remote, and `--use_local_repos` means that don't update when local repo is exsting."
104
+ f"The `--update_repos` and `--use_local_repos` should not be True at the same time. They are global setting for all repos. `--update_repos` means that update all repos to sync with remote, and `--use_local_repos` means that don't update when local repo is existing."
105
105
  )
106
106
  raise Exception()
107
107
 
@@ -136,7 +136,7 @@ def setup(
136
136
  except EOFError:
137
137
  logging.warning(
138
138
  "Unable to read from stdin. Please set `--use_local_repos` to \
139
- True or False to apply a global setting for using exsting or re-getting repos."
139
+ True or False to apply a global setting for using existing or re-getting repos."
140
140
  )
141
141
  raise
142
142
  remove_existing = remove_existing.lower() in ("y", "yes")
@@ -174,7 +174,7 @@ def setup(
174
174
  uninstall_existing = uninstall_existing.lower() in ("y", "yes")
175
175
 
176
176
  if uninstall_existing:
177
- repo.uninstall()
177
+ build_repo_group_installer(repo).uninstall()
178
178
  repos_to_install.append(repo)
179
179
  else:
180
180
  logging.warning(
@@ -69,12 +69,12 @@ REPO_META = {
69
69
  "PaddleOCR": {
70
70
  "git_path": "/PaddlePaddle/PaddleOCR.git",
71
71
  "platform": "github",
72
- "branch": "release/2.10",
72
+ "branch": "main",
73
73
  "install_pkg": False,
74
74
  "pdx_pkg_name": "PaddleOCR_api",
75
75
  "extra_pkgs": [
76
76
  "ppstructure/kie/requirements.txt",
77
- "docs/algorithm/formula_recognition/requirements.txt",
77
+ "docs/version2.x/algorithm/formula_recognition/requirements.txt",
78
78
  ],
79
79
  "path_env": "PADDLE_PDX_PADDLEOCR_PATH",
80
80
  "requires": ["PaddleNLP"],
@@ -165,6 +165,10 @@ REPO_META = {
165
165
  },
166
166
  }
167
167
 
168
+ REPO_DIST_NAMES = {
169
+ item["dist_name"] for item in REPO_META.values() if "dist_name" in item
170
+ }
171
+
168
172
 
169
173
  def get_repo_meta(repo_name):
170
174
  """get_repo_meta"""
@@ -28,7 +28,7 @@ from ..utils.install import (
28
28
  install_packages_from_requirements_file,
29
29
  uninstall_packages,
30
30
  )
31
- from .meta import REPO_DOWNLOAD_BASE, get_repo_meta
31
+ from .meta import REPO_DIST_NAMES, REPO_DOWNLOAD_BASE, get_repo_meta
32
32
  from .utils import (
33
33
  fetch_repo_using_git,
34
34
  install_external_deps,
@@ -133,8 +133,10 @@ class PPRepository(object):
133
133
  try:
134
134
  pip_install_opts = ["--no-deps"]
135
135
  if editable:
136
- pip_install_opts.append("-e")
137
- install_packages(["."], pip_install_opts=pip_install_opts)
136
+ reqs = ["-e ."]
137
+ else:
138
+ reqs = ["."]
139
+ install_packages(reqs, pip_install_opts=pip_install_opts)
138
140
  install_external_deps(self.name, self.root_dir)
139
141
  finally:
140
142
  if clean:
@@ -142,14 +144,16 @@ class PPRepository(object):
142
144
  tmp_build_dir = "build"
143
145
  if osp.exists(tmp_build_dir):
144
146
  shutil.rmtree(tmp_build_dir)
145
- for e in self.meta.get("extra", []):
147
+ for e in self.meta.get("extra_pkgs", []):
146
148
  if isinstance(e, tuple):
147
149
  with switch_working_dir(osp.join(self.root_dir, e[0])):
150
+ pip_install_opts = ["--no-deps"]
151
+ if e[3]:
152
+ reqs = ["-e ."]
153
+ else:
154
+ reqs = ["."]
148
155
  try:
149
- pip_install_opts = ["--no-deps"]
150
- if e[3]:
151
- pip_install_opts.append("-e")
152
- install_packages(["."], pip_install_opts=pip_install_opts)
156
+ install_packages(reqs, pip_install_opts=pip_install_opts)
153
157
  finally:
154
158
  if clean:
155
159
  tmp_build_dir = "build"
@@ -159,9 +163,9 @@ class PPRepository(object):
159
163
  def uninstall_packages(self):
160
164
  """uninstall_packages"""
161
165
  pkgs = []
162
- if self.install_pkg:
166
+ if self.meta["install_pkg"]:
163
167
  pkgs.append(self.dist_name)
164
- for e in self.meta.get("extra", []):
168
+ for e in self.meta.get("extra_pkgs", []):
165
169
  if isinstance(e, tuple):
166
170
  pkgs.append(e[1])
167
171
  uninstall_packages(pkgs)
@@ -206,7 +210,7 @@ class PPRepository(object):
206
210
  """get_deps"""
207
211
  # Merge requirement files
208
212
  req_list = [self.main_req_file]
209
- for e in self.meta.get("extra", []):
213
+ for e in self.meta.get("extra_pkgs", []):
210
214
  if isinstance(e, tuple):
211
215
  e = e[2] or osp.join(e[0], "requirements.txt")
212
216
  req_list.append(e)
@@ -327,7 +331,7 @@ class RepositoryGroupInstaller(object):
327
331
 
328
332
  def _sort_repos(self, repos, check_missing=False):
329
333
  # We sort the repos to ensure that the dependencies precede the
330
- # dependant in the list.
334
+ # dependent in the list.
331
335
  name_meta_pairs = []
332
336
  for repo in repos:
333
337
  name_meta_pairs.append((repo.name, repo.meta))
@@ -358,9 +362,6 @@ class RepositoryGroupInstaller(object):
358
362
  return sorted_repos
359
363
 
360
364
  def _normalize_deps(self, deps, headline=None):
361
- repo_pkgs = set(
362
- repo.dist_name for repo in self.repos if repo.dist_name is not None
363
- )
364
365
  lines = []
365
366
  if headline is not None:
366
367
  lines.append(headline)
@@ -376,7 +377,7 @@ class RepositoryGroupInstaller(object):
376
377
  # If `line` is not an empty line or a comment, it must be a requirement specifier.
377
378
  # Other forms may cause a parse error.
378
379
  req = Requirement(line_s)
379
- if req.name in repo_pkgs:
380
+ if req.name in REPO_DIST_NAMES:
380
381
  # Skip repo packages
381
382
  continue
382
383
  elif req.name.replace("_", "-") in (
@@ -135,8 +135,6 @@ NPU_BLACKLIST = [
135
135
  "whisper_base",
136
136
  "whisper_tiny",
137
137
  "UniMERNet",
138
- "PP-FormulaNet-L",
139
- "PP-FormulaNet-S",
140
138
  ]
141
139
 
142
140
  XPU_WHITELIST = [
@@ -191,6 +189,32 @@ XPU_WHITELIST = [
191
189
  "RLinear",
192
190
  "NLinear",
193
191
  "PicoDet_LCNet_x2_5_face",
192
+ "PP-LCNet_x1_0_doc_ori",
193
+ "UVDoc",
194
+ "PP-DocLayout-L",
195
+ "PP-DocLayout-M",
196
+ "PP-DocLayout-S",
197
+ "PP-DocLayout_plus-L",
198
+ "PP-DocBlockLayout",
199
+ "SLANeXt_wired",
200
+ "SLANeXt_wireless",
201
+ "PP-LCNet_x1_0_table_cls",
202
+ "RT-DETR-L_wired_table_cell_det",
203
+ "RT-DETR-L_wireless_table_cell_det",
204
+ "PP-OCRv4_server_seal_det",
205
+ "PP-OCRv4_mobile_seal_det",
206
+ "PP-OCRv5_server_rec",
207
+ "PP-OCRv5_mobile_rec",
208
+ "PPDocBee-2B",
209
+ "PPDocBee-7B",
210
+ "PP-FormulaNet-S",
211
+ "PP-FormulaNet-L",
212
+ "PP-FormulaNet-M",
213
+ "PP-FormulaNet_plus-M",
214
+ "PP-FormulaNet_plus-L",
215
+ "PP-OCRv5_server_det",
216
+ "PP-OCRv5_mobile_det",
217
+ "PP-Chart2Table",
194
218
  ]
195
219
 
196
220
  GCU_WHITELIST = [
paddlex/utils/deps.py CHANGED
@@ -246,4 +246,4 @@ def require_paddle2onnx_plugin():
246
246
 
247
247
 
248
248
  def get_paddle2onnx_spec():
249
- return "paddle2onnx >= 2.0.1"
249
+ return "paddle2onnx == 2.0.2rc3"
paddlex/utils/device.py CHANGED
@@ -41,18 +41,25 @@ def constr_device(device_type, device_ids):
41
41
 
42
42
 
43
43
  def get_default_device():
44
- avail_gpus = GPUtil.getAvailable()
45
- if not avail_gpus:
46
- # maybe edge devices like Jetson
44
+ try:
45
+ gpu_list = GPUtil.getGPUs()
46
+ except Exception:
47
+ logging.debug(
48
+ "Failed to query GPU devices. Falling back to CPU.", exc_info=True
49
+ )
50
+ has_gpus = False
51
+ else:
52
+ has_gpus = bool(gpu_list)
53
+ if not has_gpus:
54
+ # HACK
47
55
  if os.path.exists("/etc/nv_tegra_release"):
48
- avail_gpus = [0]
49
- logging.info(
50
- "Detected that the current device is a Jetson edge device. The default behavior will be to use GPU: 0"
56
+ logging.debug(
57
+ "The current device appears to be an NVIDIA Jetson. GPU 0 will be used as the default device."
51
58
  )
52
- if not avail_gpus:
59
+ if not has_gpus:
53
60
  return "cpu"
54
61
  else:
55
- return constr_device("gpu", [avail_gpus[0]])
62
+ return constr_device("gpu", [0])
56
63
 
57
64
 
58
65
  def parse_device(device):
paddlex/utils/env.py CHANGED
@@ -41,6 +41,8 @@ def get_paddle_cuda_version():
41
41
  import paddle.version
42
42
 
43
43
  cuda_version = paddle.version.cuda()
44
+ if cuda_version == "False":
45
+ return None
44
46
  return tuple(map(int, cuda_version.split(".")))
45
47
 
46
48
 
@@ -48,6 +50,8 @@ def get_paddle_cudnn_version():
48
50
  import paddle.version
49
51
 
50
52
  cudnn_version = paddle.version.cudnn()
53
+ if cudnn_version == "False":
54
+ return None
51
55
  return tuple(map(int, cudnn_version.split(".")))
52
56
 
53
57
 
paddlex/utils/flags.py CHANGED
@@ -24,7 +24,6 @@ __all__ = [
24
24
  "INFER_BENCHMARK_ITERS",
25
25
  "INFER_BENCHMARK_WARMUP",
26
26
  "INFER_BENCHMARK_OUTPUT_DIR",
27
- "INFER_BENCHMARK_USE_NEW_INFER_API",
28
27
  "FLAGS_json_format_model",
29
28
  "USE_PIR_TRT",
30
29
  "DISABLE_DEV_MODEL_WL",
@@ -52,6 +51,8 @@ FLAGS_json_format_model = get_flag_from_env_var("FLAGS_json_format_model", True)
52
51
  USE_PIR_TRT = get_flag_from_env_var("PADDLE_PDX_USE_PIR_TRT", True)
53
52
  DISABLE_DEV_MODEL_WL = get_flag_from_env_var("PADDLE_PDX_DISABLE_DEV_MODEL_WL", False)
54
53
  DISABLE_CINN_MODEL_WL = get_flag_from_env_var("PADDLE_PDX_DISABLE_CINN_MODEL_WL", False)
54
+ LOCAL_FONT_FILE_PATH = get_flag_from_env_var("PADDLE_PDX_LOCAL_FONT_FILE_PATH", None)
55
+
55
56
 
56
57
  # Inference Benchmark
57
58
  INFER_BENCHMARK = get_flag_from_env_var("PADDLE_PDX_INFER_BENCHMARK", False)
@@ -67,6 +68,3 @@ INFER_BENCHMARK_ITERS = get_flag_from_env_var(
67
68
  INFER_BENCHMARK_USE_CACHE_FOR_READ = get_flag_from_env_var(
68
69
  "PADDLE_PDX_INFER_BENCHMARK_USE_CACHE_FOR_READ", False
69
70
  )
70
- INFER_BENCHMARK_USE_NEW_INFER_API = get_flag_from_env_var(
71
- "PADDLE_PDX_INFER_BENCHMARK_USE_NEW_INFER_API", False
72
- )
@@ -18,7 +18,9 @@ import PIL
18
18
  from PIL import ImageFont
19
19
 
20
20
  from .. import logging
21
+ from ..cache import CACHE_DIR
21
22
  from ..download import download
23
+ from ..flags import LOCAL_FONT_FILE_PATH
22
24
 
23
25
 
24
26
  def get_font_file_path(file_name: str) -> str:
@@ -28,8 +30,8 @@ def get_font_file_path(file_name: str) -> str:
28
30
  Returns:
29
31
  str: The path to the font file.
30
32
  """
31
- font_path = (Path(__file__).parent / file_name).resolve().as_posix()
32
- if not Path(font_path).exists():
33
+ font_path = (Path(CACHE_DIR) / "fonts" / file_name).resolve().as_posix()
34
+ if not Path(font_path).is_file():
33
35
  download(
34
36
  url=f"https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/fonts/{file_name}",
35
37
  save_path=font_path,
@@ -64,5 +66,33 @@ def create_font(txt: str, sz: tuple, font_path: str) -> ImageFont:
64
66
  return font
65
67
 
66
68
 
67
- PINGFANG_FONT_FILE_PATH = get_font_file_path("PingFang-SC-Regular.ttf")
68
- SIMFANG_FONT_FILE_PATH = get_font_file_path("simfang.ttf")
69
+ def create_font_vertical(
70
+ txt: str, sz: tuple, font_path: str, scale=1.2
71
+ ) -> ImageFont.FreeTypeFont:
72
+ n = len(txt) if len(txt) > 0 else 1
73
+ base_font_size = int(sz[1] / n * 0.8 * scale)
74
+ base_font_size = max(base_font_size, 10)
75
+ font = ImageFont.truetype(font_path, base_font_size, encoding="utf-8")
76
+
77
+ if int(PIL.__version__.split(".")[0]) < 10:
78
+ max_char_width = max([font.getsize(c)[0] for c in txt])
79
+ else:
80
+ max_char_width = max([font.getlength(c) for c in txt])
81
+
82
+ if max_char_width > sz[0]:
83
+ new_size = int(base_font_size * sz[0] / max_char_width)
84
+ new_size = max(new_size, 10)
85
+ font = ImageFont.truetype(font_path, new_size, encoding="utf-8")
86
+
87
+ return font
88
+
89
+
90
+ if Path(str(LOCAL_FONT_FILE_PATH)).is_file():
91
+ logging.warning(
92
+ f"Using the local font file(`{LOCAL_FONT_FILE_PATH}`) specified by `LOCAL_FONT_FILE_PATH`!"
93
+ )
94
+ PINGFANG_FONT_FILE_PATH = LOCAL_FONT_FILE_PATH
95
+ SIMFANG_FONT_FILE_PATH = LOCAL_FONT_FILE_PATH
96
+ else:
97
+ PINGFANG_FONT_FILE_PATH = get_font_file_path("PingFang-SC-Regular.ttf")
98
+ SIMFANG_FONT_FILE_PATH = get_font_file_path("simfang.ttf")
paddlex/utils/misc.py CHANGED
@@ -70,7 +70,7 @@ class CachedProperty(object):
70
70
  https://github.com/pydanny/cached-property/blob/master/cached_property.py .
71
71
 
72
72
  Note that this implementation does NOT work in multi-thread or coroutine
73
- senarios.
73
+ scenarios.
74
74
  """
75
75
 
76
76
  def __init__(self, func):