Browse Source

repair formula pipe code problem

liuhongen1234567 1 năm trước cách đây
mục cha
commit
ac02f7de14

+ 1 - 1
docs/pipeline_usage/tutorials/ocr_pipelines/formula_recognition.md

@@ -69,7 +69,7 @@ paddlex --get_pipeline_config formula_recognition --save_path ./my_path
 获取产线配置文件后,可将 `--pipeline` 替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 `./formula_recognition.yaml`,只需执行:
 
 ```
-paddlex --pipeline ./formula_recognition.yaml --input formula_recognition.jpg
+paddlex --pipeline ./formula_recognition.yaml --input general_formula_recognition.png
 ```
 其中,`--model`、`--device` 等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。
 

+ 1 - 1
docs/pipeline_usage/tutorials/ocr_pipelines/formula_recognition_en.md

@@ -70,7 +70,7 @@ paddlex --get_pipeline_config formula_recognition --save_path ./my_path
 
 After obtaining the Pipeline configuration file, replace `--pipeline` with the configuration file's save path to make the configuration file effective. For example, if the configuration file is saved as  `./formula_recognition.yaml`, simply execute:
 ```
-paddlex --pipeline ./formula_recognition.yaml --input formula_recognition.jpg
+paddlex --pipeline ./formula_recognition.yaml --input general_formula_recognition.png
 ```
 Here, parameters such as `--model` and `--device` do not need to be specified, as they will use the parameters in the configuration file. If parameters are still specified, the specified parameters will take precedence.
 

+ 3 - 1
paddlex/inference/pipelines/formula_recognition.py

@@ -49,7 +49,9 @@ class FormulaRecognitionPipeline(BasePipeline):
 
     def predict(self, x, **kwargs):
         device = kwargs.get("device", None)
-        for layout_pred in self.layout_predictor(x, device=device):
+        for layout_pred in self.layout_predictor(
+            x, batch_size=kwargs.get("layout_batch_size", 1), device=device
+        ):
             single_img_res = {
                 "input_path": "",
                 "layout_result": {},

+ 8 - 45
paddlex/inference/results/formula_rec.py

@@ -12,14 +12,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import math
 import random
 import numpy as np
-import cv2
-import PIL
-from PIL import Image, ImageDraw, ImageFont
+from PIL import Image, ImageDraw
 
-from ...utils.fonts import PINGFANG_FONT_FILE_PATH
 from .base import CVResult
 
 
@@ -30,30 +26,6 @@ class FormulaRecResult(CVResult):
         rec_formula_str = ", ".join([str(formula) for formula in self["rec_formula"]])
         return str(self).replace("\\\\", "\\")
 
-    def get_minarea_rect(self, points):
-        bounding_box = cv2.minAreaRect(points)
-        points = sorted(list(cv2.boxPoints(bounding_box)), key=lambda x: x[0])
-
-        index_a, index_b, index_c, index_d = 0, 1, 2, 3
-        if points[1][1] > points[0][1]:
-            index_a = 0
-            index_d = 1
-        else:
-            index_a = 1
-            index_d = 0
-        if points[3][1] > points[2][1]:
-            index_b = 2
-            index_c = 3
-        else:
-            index_b = 3
-            index_c = 2
-
-        box = np.array(
-            [points[index_a], points[index_b], points[index_c], points[index_d]]
-        ).astype(np.int32)
-
-        return box
-
     def _to_img(
         self,
     ):
@@ -64,10 +36,9 @@ class FormulaRecResult(CVResult):
         if self._HARD_FLAG:
             image_np = np.array(image)
             image = Image.fromarray(image_np[:, :, ::-1])
-        h, w = image.height, image.width
-        img_left = image.copy()
+        img = image.copy()
         random.seed(0)
-        draw_left = ImageDraw.Draw(img_left)
+        draw_img = ImageDraw.Draw(img)
         if formula is None or len(formula) != len(boxes):
             formula = [None] * len(boxes)
         for idx, (box, txt) in enumerate(zip(boxes, formula)):
@@ -78,19 +49,11 @@ class FormulaRecResult(CVResult):
                     random.randint(0, 255),
                 )
                 box = np.array(box)
-
-                if len(box) > 4:
-                    pts = [(x, y) for x, y in box.tolist()]
-                    draw_left.polygon(pts, outline=color, width=8)
-                    box = self.get_minarea_rect(box)
-                    height = int(0.5 * (max(box[:, 1]) - min(box[:, 1])))
-                    box[:2, 1] = np.mean(box[:, 1])
-                    box[2:, 1] = np.mean(box[:, 1]) + min(20, height)
-                draw_left.polygon(box, fill=color)
+                pts = [(x, y) for x, y in box.tolist()]
+                draw_img.polygon(pts, outline=color, width=8)
+                draw_img.polygon(box, fill=color)
             except:
                 continue
 
-        img_left = Image.blend(image, img_left, 0.5)
-        img_show = Image.new("RGB", (w, h), (255, 255, 255))
-        img_show.paste(img_left, (0, 0, w, h))
-        return img_show
+        img = Image.blend(image, img, 0.5)
+        return img