From 60559a7ec1ad2f14396e0b5270a999e6df2f17e0 Mon Sep 17 00:00:00 2001 From: littletomatodonkey Date: Sun, 9 Oct 2022 13:28:12 +0800 Subject: [PATCH] add ser+re hub serving (#7844) * add ser+re hub serving * fix --- deploy/hubserving/kie_ser/__init__.py | 13 ++ deploy/hubserving/kie_ser/config.json | 16 +++ deploy/hubserving/kie_ser/module.py | 145 +++++++++++++++++++ deploy/hubserving/kie_ser/params.py | 38 +++++ deploy/hubserving/kie_ser_re/__init__.py | 13 ++ deploy/hubserving/kie_ser_re/config.json | 16 +++ deploy/hubserving/kie_ser_re/module.py | 147 ++++++++++++++++++++ deploy/hubserving/kie_ser_re/params.py | 40 ++++++ deploy/hubserving/readme.md | 39 ++++-- deploy/hubserving/readme_en.md | 46 ++++-- ppocr/data/imaug/label_ops.py | 2 +- ppstructure/kie/predict_kie_token_ser_re.py | 1 - 12 files changed, 492 insertions(+), 24 deletions(-) create mode 100644 deploy/hubserving/kie_ser/__init__.py create mode 100644 deploy/hubserving/kie_ser/config.json create mode 100644 deploy/hubserving/kie_ser/module.py create mode 100755 deploy/hubserving/kie_ser/params.py create mode 100644 deploy/hubserving/kie_ser_re/__init__.py create mode 100644 deploy/hubserving/kie_ser_re/config.json create mode 100644 deploy/hubserving/kie_ser_re/module.py create mode 100755 deploy/hubserving/kie_ser_re/params.py diff --git a/deploy/hubserving/kie_ser/__init__.py b/deploy/hubserving/kie_ser/__init__.py new file mode 100644 index 00000000..c747d3e7 --- /dev/null +++ b/deploy/hubserving/kie_ser/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. \ No newline at end of file diff --git a/deploy/hubserving/kie_ser/config.json b/deploy/hubserving/kie_ser/config.json new file mode 100644 index 00000000..b93a5f71 --- /dev/null +++ b/deploy/hubserving/kie_ser/config.json @@ -0,0 +1,16 @@ +{ + "modules_info": { + "kie_ser": { + "init_args": { + "version": "1.0.0", + "use_gpu": true + }, + "predict_args": { + } + } + }, + "port": 8871, + "use_multiprocess": false, + "workers": 2 +} + diff --git a/deploy/hubserving/kie_ser/module.py b/deploy/hubserving/kie_ser/module.py new file mode 100644 index 00000000..f0ef3585 --- /dev/null +++ b/deploy/hubserving/kie_ser/module.py @@ -0,0 +1,145 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import sys +sys.path.insert(0, ".") +import copy + +import time +import paddlehub +from paddlehub.common.logger import logger +from paddlehub.module.module import moduleinfo, runnable, serving +import cv2 +import numpy as np +import paddlehub as hub + +from tools.infer.utility import base64_to_cv2 +from ppstructure.kie.predict_kie_token_ser import SerPredictor +from ppstructure.utility import parse_args + +from deploy.hubserving.kie_ser.params import read_params + + +@moduleinfo( + name="kie_ser", + version="1.0.0", + summary="kie ser service", + author="paddle-dev", + author_email="paddle-dev@baidu.com", + type="cv/KIE_SER") +class KIESer(hub.Module): + def _initialize(self, use_gpu=False, enable_mkldnn=False): + """ + initialize with the necessary elements + """ + cfg = self.merge_configs() + + cfg.use_gpu = use_gpu + if use_gpu: + try: + _places = os.environ["CUDA_VISIBLE_DEVICES"] + int(_places[0]) + print("use gpu: ", use_gpu) + print("CUDA_VISIBLE_DEVICES: ", _places) + cfg.gpu_mem = 8000 + except: + raise RuntimeError( + "Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES via export CUDA_VISIBLE_DEVICES=cuda_device_id." + ) + cfg.ir_optim = True + cfg.enable_mkldnn = enable_mkldnn + + self.ser_predictor = SerPredictor(cfg) + + def merge_configs(self, ): + # deafult cfg + backup_argv = copy.deepcopy(sys.argv) + sys.argv = sys.argv[:1] + cfg = parse_args() + + update_cfg_map = vars(read_params()) + + for key in update_cfg_map: + cfg.__setattr__(key, update_cfg_map[key]) + + sys.argv = copy.deepcopy(backup_argv) + return cfg + + def read_images(self, paths=[]): + images = [] + for img_path in paths: + assert os.path.isfile( + img_path), "The {} isn't a valid file.".format(img_path) + img = cv2.imread(img_path) + if img is None: + logger.info("error in loading image:{}".format(img_path)) + continue + images.append(img) + return images + + def predict(self, images=[], paths=[]): + """ + Get the chinese texts in the predicted images. + Args: + images (list(numpy.ndarray)): images data, shape of each is [H, W, C]. If images not paths + paths (list[str]): The paths of images. If paths not images + Returns: + res (list): The result of chinese texts and save path of images. + """ + if images != [] and isinstance(images, list) and paths == []: + predicted_data = images + elif images == [] and isinstance(paths, list) and paths != []: + predicted_data = self.read_images(paths) + else: + raise TypeError("The input data is inconsistent with expectations.") + + assert predicted_data != [], "There is not any image to be predicted. Please check the input data." + + all_results = [] + for img in predicted_data: + if img is None: + logger.info("error in loading image") + all_results.append([]) + continue + starttime = time.time() + ser_res, _, elapse = self.ser_predictor(img) + elapse = time.time() - starttime + logger.info("Predict time: {}".format(elapse)) + all_results.append(ser_res) + return all_results + + @serving + def serving_method(self, images, **kwargs): + """ + Run as a service. + """ + images_decode = [base64_to_cv2(image) for image in images] + results = self.predict(images_decode, **kwargs) + return results + + +if __name__ == '__main__': + ocr = OCRSystem() + ocr._initialize() + image_path = [ + './doc/imgs/11.jpg', + './doc/imgs/12.jpg', + ] + res = ocr.predict(paths=image_path) + print(res) diff --git a/deploy/hubserving/kie_ser/params.py b/deploy/hubserving/kie_ser/params.py new file mode 100755 index 00000000..bdd04c72 --- /dev/null +++ b/deploy/hubserving/kie_ser/params.py @@ -0,0 +1,38 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from deploy.hubserving.ocr_system.params import read_params as pp_ocr_read_params + + +class Config(object): + pass + + +def read_params(): + cfg = pp_ocr_read_params() + + # SER params + cfg.kie_algorithm = "LayoutXLM" + cfg.use_visual_backbone = False + + cfg.ser_model_dir = "./inference/ser_vi_layoutxlm_xfund_infer" + cfg.ser_dict_path = "train_data/XFUND/class_list_xfun.txt" + cfg.vis_font_path = "./doc/fonts/simfang.ttf" + cfg.ocr_order_method = "tb-yx" + + return cfg diff --git a/deploy/hubserving/kie_ser_re/__init__.py b/deploy/hubserving/kie_ser_re/__init__.py new file mode 100644 index 00000000..c747d3e7 --- /dev/null +++ b/deploy/hubserving/kie_ser_re/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. \ No newline at end of file diff --git a/deploy/hubserving/kie_ser_re/config.json b/deploy/hubserving/kie_ser_re/config.json new file mode 100644 index 00000000..4d796a86 --- /dev/null +++ b/deploy/hubserving/kie_ser_re/config.json @@ -0,0 +1,16 @@ +{ + "modules_info": { + "kie_ser_re": { + "init_args": { + "version": "1.0.0", + "use_gpu": true + }, + "predict_args": { + } + } + }, + "port": 8872, + "use_multiprocess": false, + "workers": 2 +} + diff --git a/deploy/hubserving/kie_ser_re/module.py b/deploy/hubserving/kie_ser_re/module.py new file mode 100644 index 00000000..5a63a8a1 --- /dev/null +++ b/deploy/hubserving/kie_ser_re/module.py @@ -0,0 +1,147 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import sys +sys.path.insert(0, ".") +import copy + +import time +import paddlehub +from paddlehub.common.logger import logger +from paddlehub.module.module import moduleinfo, runnable, serving +import cv2 +import numpy as np +import paddlehub as hub + +from tools.infer.utility import base64_to_cv2 +from ppstructure.kie.predict_kie_token_ser_re import SerRePredictor +from ppstructure.utility import parse_args + +from deploy.hubserving.kie_ser_re.params import read_params + + +@moduleinfo( + name="kie_ser_re", + version="1.0.0", + summary="kie ser re service", + author="paddle-dev", + author_email="paddle-dev@baidu.com", + type="cv/KIE_SER_RE") +class KIESerRE(hub.Module): + def _initialize(self, use_gpu=False, enable_mkldnn=False): + """ + initialize with the necessary elements + """ + cfg = self.merge_configs() + + cfg.use_gpu = use_gpu + if use_gpu: + try: + _places = os.environ["CUDA_VISIBLE_DEVICES"] + int(_places[0]) + print("use gpu: ", use_gpu) + print("CUDA_VISIBLE_DEVICES: ", _places) + cfg.gpu_mem = 8000 + except: + raise RuntimeError( + "Environment Variable CUDA_VISIBLE_DEVICES is not set correctly. If you wanna use gpu, please set CUDA_VISIBLE_DEVICES via export CUDA_VISIBLE_DEVICES=cuda_device_id." + ) + cfg.ir_optim = True + cfg.enable_mkldnn = enable_mkldnn + + self.ser_re_predictor = SerRePredictor(cfg) + + def merge_configs(self, ): + # deafult cfg + backup_argv = copy.deepcopy(sys.argv) + sys.argv = sys.argv[:1] + cfg = parse_args() + + update_cfg_map = vars(read_params()) + + for key in update_cfg_map: + cfg.__setattr__(key, update_cfg_map[key]) + + sys.argv = copy.deepcopy(backup_argv) + return cfg + + def read_images(self, paths=[]): + images = [] + for img_path in paths: + assert os.path.isfile( + img_path), "The {} isn't a valid file.".format(img_path) + img = cv2.imread(img_path) + if img is None: + logger.info("error in loading image:{}".format(img_path)) + continue + images.append(img) + return images + + def predict(self, images=[], paths=[]): + """ + Get the chinese texts in the predicted images. + Args: + images (list(numpy.ndarray)): images data, shape of each is [H, W, C]. If images not paths + paths (list[str]): The paths of images. If paths not images + Returns: + res (list): The result of chinese texts and save path of images. + """ + if images != [] and isinstance(images, list) and paths == []: + predicted_data = images + elif images == [] and isinstance(paths, list) and paths != []: + predicted_data = self.read_images(paths) + else: + raise TypeError("The input data is inconsistent with expectations.") + + assert predicted_data != [], "There is not any image to be predicted. Please check the input data." + + all_results = [] + for img in predicted_data: + if img is None: + logger.info("error in loading image") + all_results.append([]) + continue + print(img.shape) + starttime = time.time() + re_res, _ = self.ser_re_predictor(img) + print(re_res) + elapse = time.time() - starttime + logger.info("Predict time: {}".format(elapse)) + all_results.append(re_res) + return all_results + + @serving + def serving_method(self, images, **kwargs): + """ + Run as a service. + """ + images_decode = [base64_to_cv2(image) for image in images] + results = self.predict(images_decode, **kwargs) + return results + + +if __name__ == '__main__': + ocr = OCRSystem() + ocr._initialize() + image_path = [ + './doc/imgs/11.jpg', + './doc/imgs/12.jpg', + ] + res = ocr.predict(paths=image_path) + print(res) diff --git a/deploy/hubserving/kie_ser_re/params.py b/deploy/hubserving/kie_ser_re/params.py new file mode 100755 index 00000000..8c3214a5 --- /dev/null +++ b/deploy/hubserving/kie_ser_re/params.py @@ -0,0 +1,40 @@ +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from deploy.hubserving.ocr_system.params import read_params as pp_ocr_read_params + + +class Config(object): + pass + + +def read_params(): + cfg = pp_ocr_read_params() + + # SER params + cfg.kie_algorithm = "LayoutXLM" + cfg.use_visual_backbone = False + + cfg.ser_model_dir = "./inference/ser_vi_layoutxlm_xfund_infer" + cfg.re_model_dir = "./inference/re_vi_layoutxlm_xfund_infer" + + cfg.ser_dict_path = "train_data/XFUND/class_list_xfun.txt" + cfg.vis_font_path = "./doc/fonts/simfang.ttf" + cfg.ocr_order_method = "tb-yx" + + return cfg diff --git a/deploy/hubserving/readme.md b/deploy/hubserving/readme.md index c583cc96..8f4d0869 100755 --- a/deploy/hubserving/readme.md +++ b/deploy/hubserving/readme.md @@ -30,6 +30,8 @@ deploy/hubserving/ └─ structure_layout 版面分析服务包 └─ structure_table 表格识别服务包 └─ structure_system PP-Structure服务包 + └─ kie_ser 关键信息抽取-SER服务包 + └─ kie_ser_re 关键信息抽取-SER+RE服务包 ``` 每个服务包下包含3个文件。以2阶段串联服务包为例,目录如下: @@ -42,6 +44,7 @@ deploy/hubserving/ocr_system/ ``` ## 1. 近期更新 +* 2022.10.09 新增关键信息抽取服务。 * 2022.08.23 新增版面分析服务。 * 2022.05.05 新增PP-OCRv3检测和识别模型。 * 2022.03.30 新增PP-Structure和表格识别两种服务。 @@ -57,12 +60,15 @@ pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/simple ### 2.2 下载推理模型 安装服务模块前,需要准备推理模型并放到正确路径。默认使用的是PP-OCRv3模型,默认模型路径为: + ``` 检测模型:./inference/ch_PP-OCRv3_det_infer/ 识别模型:./inference/ch_PP-OCRv3_rec_infer/ 方向分类器:./inference/ch_ppocr_mobile_v2.0_cls_infer/ 版面分析模型:./inference/picodet_lcnet_x1_0_fgd_layout_infer/ 表格结构识别模型:./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/ +关键信息抽取SER模型:./inference/ser_vi_layoutxlm_xfund_infer/ +关键信息抽取RE模型:./inference/re_vi_layoutxlm_xfund_infer/ ``` **模型路径可在`params.py`中查看和修改。** 更多模型可以从PaddleOCR提供的模型库[PP-OCR](../../doc/doc_ch/models_list.md)和[PP-Structure](../../ppstructure/docs/models_list.md)下载,也可以替换成自己训练转换好的模型。 @@ -92,6 +98,12 @@ hub install deploy/hubserving/structure_system/ # 或,安装版面分析服务模块: hub install deploy/hubserving/structure_layout/ + +# 或,安装关键信息抽取SER服务模块: +hub install deploy/hubserving/kie_ser/ + +# 或,安装关键信息抽取SER+RE服务模块: +hub install deploy/hubserving/kie_ser_re/ ``` * 在Windows环境下(文件夹的分隔符为`\`),安装示例如下: @@ -116,6 +128,12 @@ hub install deploy\hubserving\structure_system\ # 或,安装版面分析服务模块: hub install deploy\hubserving\structure_layout\ + +# 或,安装关键信息抽取SER服务模块: +hub install deploy\hubserving\kie_ser\ + +# 或,安装关键信息抽取SER+RE服务模块: +hub install deploy\hubserving\kie_ser_re\ ``` ### 2.4 启动服务 @@ -194,6 +212,8 @@ hub serving start -c deploy/hubserving/ocr_system/config.json `http://127.0.0.1:8869/predict/structure_table` `http://127.0.0.1:8870/predict/structure_system` `http://127.0.0.1:8870/predict/structure_layout` +`http://127.0.0.1:8871/predict/kie_ser` +`http://127.0.0.1:8872/predict/kie_ser_re` - **image_dir**:测试图像路径,可以是单张图片路径,也可以是图像集合目录路径 - **visualize**:是否可视化结果,默认为False - **output**:可视化结果保存路径,默认为`./hubserving_result` @@ -216,15 +236,18 @@ hub serving start -c deploy/hubserving/ocr_system/config.json 不同模块返回的字段不同,如,文本识别服务模块返回结果不含`text_region`字段,具体信息如下: -| 字段名/模块名 | ocr_det | ocr_cls | ocr_rec | ocr_system | structure_table | structure_system | Structure_layout | -| --- | --- | --- | --- | --- | --- | --- | --- | +| 字段名/模块名 | ocr_det | ocr_cls | ocr_rec | ocr_system | structure_table | structure_system | Structure_layout | kie_ser | kie_re | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | |angle| | ✔ | | ✔ | ||| -|text| | |✔|✔| | ✔ | | -|confidence| |✔ |✔| | | ✔| | -|text_region| ✔| | |✔ | | ✔| | -|html| | | | |✔ |✔|| -|regions| | | | |✔ |✔ | | -|layout| | | | | | | ✔ | +|text| | |✔|✔| | ✔ | | ✔ | ✔ | +|confidence| |✔ |✔| | | ✔| |✔ | ✔ | +|text_region| ✔| | |✔ | | ✔| |✔ | ✔ | +|html| | | | |✔ |✔||| | +|regions| | | | |✔ |✔ | || | +|layout| | | | | | | ✔ || | +|ser_res| | | | | | | | ✔ | | +|re_res| | | | | | | | | ✔ | + **说明:** 如果需要增加、删除、修改返回字段,可在相应模块的`module.py`文件中进行修改,完整流程参考下一节自定义修改服务模块。 diff --git a/deploy/hubserving/readme_en.md b/deploy/hubserving/readme_en.md index f09fe464..613f0ed4 100755 --- a/deploy/hubserving/readme_en.md +++ b/deploy/hubserving/readme_en.md @@ -30,6 +30,8 @@ deploy/hubserving/ └─ structure_layout layout analysis service package └─ structure_table table recognition service package └─ structure_system PP-Structure service package + └─ kie_ser KIE(SER) service package + └─ kie_ser_re KIE(SER+RE) service package ``` Each service pack contains 3 files. Take the 2-stage series connection service package as an example, the directory is as follows: @@ -42,9 +44,10 @@ deploy/hubserving/ocr_system/ ``` ## 1. Update -* 2022.05.05 add PP-OCRv3 text detection and recognition models. -* 2022.03.30 add PP-Structure and table recognition services。 -* 2022.08.23 add layout analysis services。 +* 2022.10.09 add KIE services. +* 2022.08.23 add layout analysis services. +* 2022.03.30 add PP-Structure and table recognition services. +* 2022.05.05 add PP-OCRv3 text detection and recognition services. ## 2. Quick start service @@ -65,6 +68,8 @@ text recognition model: ./inference/ch_PP-OCRv3_rec_infer/ text angle classifier: ./inference/ch_ppocr_mobile_v2.0_cls_infer/ layout parse model: ./inference/picodet_lcnet_x1_0_fgd_layout_infer/ tanle recognition: ./inference/ch_ppstructure_mobile_v2.0_SLANet_infer/ +KIE(SER): ./inference/ser_vi_layoutxlm_xfund_infer/ +KIE(SER+RE): ./inference/re_vi_layoutxlm_xfund_infer/ ``` **The model path can be found and modified in `params.py`.** More models provided by PaddleOCR can be obtained from the [model library](../../doc/doc_en/models_list_en.md). You can also use models trained by yourself. @@ -92,8 +97,11 @@ hub install deploy/hubserving/structure_table/ # Or install PP-Structure service module hub install deploy/hubserving/structure_system/ -# Or install layout analysis service module -hub install deploy/hubserving/structure_layout/ +# Or install KIE(SER) service module +hub install deploy/hubserving/kie_ser/ + +# Or install KIE(SER+RE) service module +hub install deploy/hubserving/kie_ser_re/ ``` * On Windows platform, the examples are as follows. @@ -118,6 +126,12 @@ hub install deploy\hubserving\structure_system\ # Or install layout analysis service module hub install deploy\hubserving\structure_layout\ + +# Or install KIE(SER) service module +hub install deploy\hubserving\kie_ser\ + +# Or install KIE(SER+RE) service module +hub install deploy\hubserving\kie_ser_re\ ``` ### 2.4 Start service @@ -201,6 +215,8 @@ For example, if using the configuration file to start the text angle classificat `http://127.0.0.1:8869/predict/structure_table` `http://127.0.0.1:8870/predict/structure_system` `http://127.0.0.1:8870/predict/structure_layout` +`http://127.0.0.1:8871/predict/kie_ser` +`http://127.0.0.1:8872/predict/kie_ser_re` - **image_dir**:Test image path, can be a single image path or an image directory path - **visualize**:Whether to visualize the results, the default value is False - **output**:The floder to save Visualization result, default value is `./hubserving_result` @@ -225,15 +241,17 @@ The returned result is a list. Each item in the list is a dict. The dict may con The fields returned by different modules are different. For example, the results returned by the text recognition service module do not contain `text_region`. The details are as follows: -| field name/module name | ocr_det | ocr_cls | ocr_rec | ocr_system | structure_table | structure_system | structure_layout | -| --- | --- | --- | --- | --- | --- |--- |--- | -|angle| | ✔ | | ✔ | || | -|text| | |✔|✔| | ✔ | | -|confidence| |✔ |✔| | | ✔| | -|text_region| ✔| | |✔ | | ✔| | -|html| | | | |✔ |✔| | -|regions| | | | |✔ |✔ | | -|layout| | | | | | |✔ | +| field name/module name | ocr_det | ocr_cls | ocr_rec | ocr_system | structure_table | structure_system | structure_layout | kie_ser | kie_re | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +|angle| | ✔ | | ✔ | ||| +|text| | |✔|✔| | ✔ | | ✔ | ✔ | +|confidence| |✔ |✔| | | ✔| |✔ | ✔ | +|text_region| ✔| | |✔ | | ✔| |✔ | ✔ | +|html| | | | |✔ |✔||| | +|regions| | | | |✔ |✔ | || | +|layout| | | | | | | ✔ || | +|ser_res| | | | | | | | ✔ | | +|re_res| | | | | | | | | ✔ | **Note:** If you need to add, delete or modify the returned fields, you can modify the file `module.py` of the corresponding module. For the complete process, refer to the user-defined modification service module in the next section. diff --git a/ppocr/data/imaug/label_ops.py b/ppocr/data/imaug/label_ops.py index dbfb9317..269ee7b2 100644 --- a/ppocr/data/imaug/label_ops.py +++ b/ppocr/data/imaug/label_ops.py @@ -1089,7 +1089,7 @@ class VQATokenLabelEncode(object): def _load_ocr_info(self, data): if self.infer_mode: - ocr_result = self.ocr_engine.ocr(data['image'], cls=False) + ocr_result = self.ocr_engine.ocr(data['image'], cls=False)[0] ocr_info = [] for res in ocr_result: ocr_info.append({ diff --git a/ppstructure/kie/predict_kie_token_ser_re.py b/ppstructure/kie/predict_kie_token_ser_re.py index 278e08da..c0bb237d 100644 --- a/ppstructure/kie/predict_kie_token_ser_re.py +++ b/ppstructure/kie/predict_kie_token_ser_re.py @@ -50,7 +50,6 @@ class SerRePredictor(object): utility.create_predictor(args, 're', logger) def __call__(self, img): - ori_im = img.copy() starttime = time.time() ser_results, ser_inputs, _ = self.ser_engine(img) re_input, entity_idx_dict_batch = make_input(ser_inputs, ser_results) -- GitLab