Browse Source

fix print to_str (#2913)

zhangyubo0722 10 months ago
parent
commit
118e915e61
25 changed files with 93 additions and 58 deletions
  1. 50 32
      paddlex/inference/common/result/mixin.py
  2. 2 1
      paddlex/inference/models_new/anomaly_detection/result.py
  3. 2 1
      paddlex/inference/models_new/formula_recognition/result.py
  4. 2 1
      paddlex/inference/models_new/image_classification/result.py
  5. 2 1
      paddlex/inference/models_new/image_feature/result.py
  6. 2 1
      paddlex/inference/models_new/image_multilabel_classification/result.py
  7. 2 1
      paddlex/inference/models_new/image_unwarping/result.py
  8. 2 1
      paddlex/inference/models_new/instance_segmentation/result.py
  9. 2 1
      paddlex/inference/models_new/keypoint_detection/result.py
  10. 2 1
      paddlex/inference/models_new/object_detection/result.py
  11. 2 1
      paddlex/inference/models_new/open_vocabulary_segmentation/results/sam_result.py
  12. 2 1
      paddlex/inference/models_new/semantic_segmentation/result.py
  13. 2 1
      paddlex/inference/models_new/table_structure_recognition/result.py
  14. 2 1
      paddlex/inference/models_new/text_detection/result.py
  15. 2 1
      paddlex/inference/models_new/text_recognition/result.py
  16. 2 1
      paddlex/inference/pipelines_new/attribute_recognition/result.py
  17. 1 1
      paddlex/inference/pipelines_new/doc_preprocessor/result.py
  18. 2 1
      paddlex/inference/pipelines_new/face_recognition/result.py
  19. 1 1
      paddlex/inference/pipelines_new/formula_recognition/result.py
  20. 1 1
      paddlex/inference/pipelines_new/layout_parsing/result.py
  21. 1 1
      paddlex/inference/pipelines_new/layout_parsing/result_v2.py
  22. 2 2
      paddlex/inference/pipelines_new/ocr/result.py
  23. 2 1
      paddlex/inference/pipelines_new/pp_shitu_v2/result.py
  24. 1 1
      paddlex/inference/pipelines_new/seal_recognition/result.py
  25. 2 2
      paddlex/inference/pipelines_new/table_recognition/result.py

+ 50 - 32
paddlex/inference/common/result/mixin.py

@@ -70,6 +70,31 @@ class StrMixin:
         logging.info(self.str)
 
 
+def _format_data(obj):
+    """Helper function to format data into a JSON-serializable format.
+
+    Args:
+        obj: The object to be formatted.
+
+    Returns:
+        Any: The formatted object.
+    """
+    if isinstance(obj, np.float32):
+        return float(obj)
+    elif isinstance(obj, np.ndarray):
+        return [_format_data(item) for item in obj.tolist()]
+    elif isinstance(obj, pd.DataFrame):
+        return json.loads(obj.to_json(orient="records", force_ascii=False))
+    elif isinstance(obj, Path):
+        return obj.as_posix()
+    elif isinstance(obj, dict):
+        return dict({k: _format_data(v) for k, v in obj.items()})
+    elif isinstance(obj, (list, tuple)):
+        return [_format_data(i) for i in obj]
+    else:
+        return obj
+
+
 class JsonMixin:
     """Mixin class for adding JSON serialization capabilities."""
 
@@ -84,30 +109,6 @@ class JsonMixin:
             Dict[str, Dict[str, Any]]: A dictionary representation of the object that is JSON-serializable.
         """
 
-        def _format_data(obj):
-            """Helper function to format data into a JSON-serializable format.
-
-            Args:
-                obj: The object to be formatted.
-
-            Returns:
-                Any: The formatted object.
-            """
-            if isinstance(obj, np.float32):
-                return float(obj)
-            elif isinstance(obj, np.ndarray):
-                return [_format_data(item) for item in obj.tolist()]
-            elif isinstance(obj, pd.DataFrame):
-                return json.loads(obj.to_json(orient="records", force_ascii=False))
-            elif isinstance(obj, Path):
-                return obj.as_posix()
-            elif isinstance(obj, dict):
-                return dict({k: _format_data(v) for k, v in obj.items()})
-            elif isinstance(obj, (list, tuple)):
-                return [_format_data(i) for i in obj]
-            else:
-                return obj
-
         return {"res": _format_data(copy.deepcopy(self))}
 
     @property
@@ -166,6 +167,28 @@ class JsonMixin:
                 **kwargs,
             )
 
+    def _to_str(
+        self,
+        json_format: bool = False,
+        indent: int = 4,
+        ensure_ascii: bool = False,
+    ):
+        """Convert the given result data to a string representation.
+        Args:
+            data (dict): The data would be converted to str.
+            json_format (bool): If True, return a JSON formatted string. Default is False.
+            indent (int): Number of spaces to indent for JSON formatting. Default is 4.
+            ensure_ascii (bool): If True, ensure all characters are ASCII. Default is False.
+        Returns:
+            Dict[str, str]: The string representation of the result.
+        """
+        if json_format:
+            return json.dumps(
+                _format_data({"res": self}), indent=indent, ensure_ascii=ensure_ascii
+            )
+        else:
+            return {"res": self}
+
     def print(
         self, json_format: bool = False, indent: int = 4, ensure_ascii: bool = False
     ) -> None:
@@ -176,14 +199,9 @@ class JsonMixin:
             indent (int): Number of spaces to indent for JSON formatting. Default is 4.
             ensure_ascii (bool): If True, ensure all characters are ASCII. Default is False.
         """
-        if json_format:
-            str_ = json.dumps(
-                self.__class__._to_str(self.json["res"]),
-                indent=indent,
-                ensure_ascii=ensure_ascii,
-            )
-        else:
-            str_ = str(self.__class__._to_str(self.json["res"]))
+        str_ = self._to_str(
+            json_format=json_format, indent=indent, ensure_ascii=ensure_ascii
+        )
         logging.info(str_)
 
 

+ 2 - 1
paddlex/inference/models_new/anomaly_detection/result.py

@@ -60,8 +60,9 @@ class UadResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
+        data.pop("input_img")
         data["pred"] = "..."
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/formula_recognition/result.py

@@ -35,7 +35,8 @@ from ....utils.file_interface import custom_open
 class FormulaRecResult(BaseCVResult):
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        _str = StrMixin._to_str(data, *args, **kwargs)["res"].replace("\\\\", "\\")
+        data.pop("input_img")
+        _str = JsonMixin._to_str(data, *args, **kwargs)["res"].replace("\\\\", "\\")
         return {"res": _str}
 
     def _to_json(self, *args, **kwargs):

+ 2 - 1
paddlex/inference/models_new/image_classification/result.py

@@ -26,7 +26,8 @@ from ...common.result import BaseCVResult, StrMixin, JsonMixin
 class TopkResult(BaseCVResult):
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/image_feature/result.py

@@ -24,7 +24,8 @@ class IdentityResult(BaseResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/image_multilabel_classification/result.py

@@ -25,7 +25,8 @@ from ...common.result import BaseCVResult, StrMixin, JsonMixin
 class MLClassResult(BaseCVResult):
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/image_unwarping/result.py

@@ -35,8 +35,9 @@ class DocTrResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
+        data.pop("input_img")
         data["doctr_img"] = "..."
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/instance_segmentation/result.py

@@ -151,8 +151,9 @@ class InstanceSegResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
+        data.pop("input_img")
         data["masks"] = "..."
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/keypoint_detection/result.py

@@ -179,7 +179,8 @@ class KptResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/object_detection/result.py

@@ -104,7 +104,8 @@ class DetResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/open_vocabulary_segmentation/results/sam_result.py

@@ -137,8 +137,9 @@ class SAMSegResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
+        data.pop("input_img")
         data["masks"] = "..."
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/semantic_segmentation/result.py

@@ -62,8 +62,9 @@ class SegResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
+        data.pop("input_img")
         data["pred"] = "..."
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/table_structure_recognition/result.py

@@ -55,7 +55,8 @@ class TableRecResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/text_detection/result.py

@@ -35,7 +35,8 @@ class TextDetResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/models_new/text_recognition/result.py

@@ -24,7 +24,8 @@ class TextRecResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 2 - 1
paddlex/inference/pipelines_new/attribute_recognition/result.py

@@ -77,7 +77,8 @@ class AttributeRecResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 1 - 1
paddlex/inference/pipelines_new/doc_preprocessor/result.py

@@ -81,7 +81,7 @@ class DocPreprocessorResult(BaseCVResult):
         data["input_path"] = self["input_path"]
         data["model_settings"] = self["model_settings"]
         data["angle"] = self["angle"]
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """

+ 2 - 1
paddlex/inference/pipelines_new/face_recognition/result.py

@@ -34,7 +34,8 @@ class FaceRecResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 1 - 1
paddlex/inference/pipelines_new/formula_recognition/result.py

@@ -180,7 +180,7 @@ class FormulaRecognitionResult(BaseCVResult):
                 )
             data["formula_res_list"].append(rec_formula_dict)
 
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """

+ 1 - 1
paddlex/inference/pipelines_new/layout_parsing/result.py

@@ -126,7 +126,7 @@ class LayoutParsingResult(BaseCVResult, HtmlMixin, XlsxMixin):
                 formula_res = self["formula_res_list"][sno]
                 data["formula_res_list"].append(formula_res.str["res"])
 
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """

+ 1 - 1
paddlex/inference/pipelines_new/layout_parsing/result_v2.py

@@ -154,7 +154,7 @@ class LayoutParsingResultV2(BaseCVResult, HtmlMixin, XlsxMixin, MarkdownMixin):
                 formula_res = self["formula_res_list"][sno]
                 data["formula_res_list"].append(formula_res.str["res"])
 
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> dict[str, str]:
         """

+ 2 - 2
paddlex/inference/pipelines_new/ocr/result.py

@@ -139,8 +139,8 @@ class OCRResult(BaseCVResult):
         data["rec_scores"] = self["rec_scores"]
         data["rec_polys"] = self["rec_polys"]
         data["rec_boxes"] = self["rec_boxes"]
-        
-        return StrMixin._to_str(data, *args, **kwargs)
+
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """

+ 2 - 1
paddlex/inference/pipelines_new/pp_shitu_v2/result.py

@@ -113,7 +113,8 @@ class ShiTuResult(BaseCVResult):
 
     def _to_str(self, *args, **kwargs):
         data = copy.deepcopy(self)
-        return StrMixin._to_str(data, *args, **kwargs)
+        data.pop("input_img")
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs):
         data = copy.deepcopy(self)

+ 1 - 1
paddlex/inference/pipelines_new/seal_recognition/result.py

@@ -59,7 +59,7 @@ class SealRecognitionResult(BaseCVResult):
         for sno in range(len(self["seal_res_list"])):
             seal_res = self["seal_res_list"][sno]
             data["seal_res_list"].append(seal_res.str["res"])
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """

+ 2 - 2
paddlex/inference/pipelines_new/table_recognition/result.py

@@ -59,7 +59,7 @@ class SingleTableRecognitionResult(BaseCVResult, HtmlMixin, XlsxMixin):
         data["cell_box_list"] = self["cell_box_list"]
         data["pred_html"] = self["pred_html"]
         data["table_ocr_pred"] = self["table_ocr_pred"]
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """
@@ -132,7 +132,7 @@ class TableRecognitionResult(BaseCVResult, HtmlMixin, XlsxMixin):
         for sno in range(len(self["table_res_list"])):
             table_res = self["table_res_list"][sno]
             data["table_res_list"].append(table_res.str["res"])
-        return StrMixin._to_str(data, *args, **kwargs)
+        return JsonMixin._to_str(data, *args, **kwargs)
 
     def _to_json(self, *args, **kwargs) -> Dict[str, str]:
         """