pyxllib 0.3.96__py3-none-any.whl → 0.3.197__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.
- pyxllib/algo/geo.py +12 -0
- pyxllib/algo/intervals.py +1 -1
- pyxllib/algo/matcher.py +78 -0
- pyxllib/algo/pupil.py +187 -19
- pyxllib/algo/specialist.py +2 -1
- pyxllib/algo/stat.py +38 -2
- {pyxlpr → pyxllib/autogui}/__init__.py +1 -1
- pyxllib/autogui/activewin.py +246 -0
- pyxllib/autogui/all.py +9 -0
- pyxllib/{ext/autogui → autogui}/autogui.py +40 -11
- pyxllib/autogui/uiautolib.py +362 -0
- pyxllib/autogui/wechat.py +827 -0
- pyxllib/autogui/wechat_msg.py +421 -0
- pyxllib/autogui/wxautolib.py +84 -0
- pyxllib/cv/slidercaptcha.py +137 -0
- pyxllib/data/echarts.py +123 -12
- pyxllib/data/jsonlib.py +89 -0
- pyxllib/data/pglib.py +514 -30
- pyxllib/data/sqlite.py +231 -4
- pyxllib/ext/JLineViewer.py +14 -1
- pyxllib/ext/drissionlib.py +277 -0
- pyxllib/ext/kq5034lib.py +0 -1594
- pyxllib/ext/robustprocfile.py +497 -0
- pyxllib/ext/unixlib.py +6 -5
- pyxllib/ext/utools.py +108 -95
- pyxllib/ext/webhook.py +32 -14
- pyxllib/ext/wjxlib.py +88 -0
- pyxllib/ext/wpsapi.py +124 -0
- pyxllib/ext/xlwork.py +9 -0
- pyxllib/ext/yuquelib.py +1003 -71
- pyxllib/file/docxlib.py +1 -1
- pyxllib/file/libreoffice.py +165 -0
- pyxllib/file/movielib.py +9 -0
- pyxllib/file/packlib/__init__.py +112 -75
- pyxllib/file/pdflib.py +1 -1
- pyxllib/file/pupil.py +1 -1
- pyxllib/file/specialist/dirlib.py +1 -1
- pyxllib/file/specialist/download.py +10 -3
- pyxllib/file/specialist/filelib.py +266 -55
- pyxllib/file/xlsxlib.py +205 -50
- pyxllib/file/xlsyncfile.py +341 -0
- pyxllib/prog/cachetools.py +64 -0
- pyxllib/prog/filelock.py +42 -0
- pyxllib/prog/multiprogs.py +940 -0
- pyxllib/prog/newbie.py +9 -2
- pyxllib/prog/pupil.py +129 -60
- pyxllib/prog/specialist/__init__.py +176 -2
- pyxllib/prog/specialist/bc.py +5 -2
- pyxllib/prog/specialist/browser.py +11 -2
- pyxllib/prog/specialist/datetime.py +68 -0
- pyxllib/prog/specialist/tictoc.py +12 -13
- pyxllib/prog/specialist/xllog.py +5 -5
- pyxllib/prog/xlosenv.py +7 -0
- pyxllib/text/airscript.js +744 -0
- pyxllib/text/charclasslib.py +17 -5
- pyxllib/text/jiebalib.py +6 -3
- pyxllib/text/jinjalib.py +32 -0
- pyxllib/text/jsa_ai_prompt.md +271 -0
- pyxllib/text/jscode.py +159 -4
- pyxllib/text/nestenv.py +1 -1
- pyxllib/text/newbie.py +12 -0
- pyxllib/text/pupil/common.py +26 -0
- pyxllib/text/specialist/ptag.py +2 -2
- pyxllib/text/templates/echart_base.html +11 -0
- pyxllib/text/templates/highlight_code.html +17 -0
- pyxllib/text/templates/latex_editor.html +103 -0
- pyxllib/text/xmllib.py +76 -14
- pyxllib/xl.py +2 -1
- pyxllib-0.3.197.dist-info/METADATA +48 -0
- pyxllib-0.3.197.dist-info/RECORD +126 -0
- {pyxllib-0.3.96.dist-info → pyxllib-0.3.197.dist-info}/WHEEL +1 -2
- pyxllib/ext/autogui/__init__.py +0 -8
- pyxllib-0.3.96.dist-info/METADATA +0 -51
- pyxllib-0.3.96.dist-info/RECORD +0 -333
- pyxllib-0.3.96.dist-info/top_level.txt +0 -2
- pyxlpr/ai/__init__.py +0 -5
- pyxlpr/ai/clientlib.py +0 -1281
- pyxlpr/ai/specialist.py +0 -286
- pyxlpr/ai/torch_app.py +0 -172
- pyxlpr/ai/xlpaddle.py +0 -655
- pyxlpr/ai/xltorch.py +0 -705
- pyxlpr/data/__init__.py +0 -11
- pyxlpr/data/coco.py +0 -1325
- pyxlpr/data/datacls.py +0 -365
- pyxlpr/data/datasets.py +0 -200
- pyxlpr/data/gptlib.py +0 -1291
- pyxlpr/data/icdar/__init__.py +0 -96
- pyxlpr/data/icdar/deteval.py +0 -377
- pyxlpr/data/icdar/icdar2013.py +0 -341
- pyxlpr/data/icdar/iou.py +0 -340
- pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -463
- pyxlpr/data/imtextline.py +0 -473
- pyxlpr/data/labelme.py +0 -866
- pyxlpr/data/removeline.py +0 -179
- pyxlpr/data/specialist.py +0 -57
- pyxlpr/eval/__init__.py +0 -85
- pyxlpr/paddleocr.py +0 -776
- pyxlpr/ppocr/__init__.py +0 -15
- pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -226
- pyxlpr/ppocr/data/__init__.py +0 -135
- pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -26
- pyxlpr/ppocr/data/imaug/__init__.py +0 -67
- pyxlpr/ppocr/data/imaug/copy_paste.py +0 -170
- pyxlpr/ppocr/data/imaug/east_process.py +0 -437
- pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -244
- pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -114
- pyxlpr/ppocr/data/imaug/label_ops.py +0 -789
- pyxlpr/ppocr/data/imaug/make_border_map.py +0 -184
- pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -106
- pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -126
- pyxlpr/ppocr/data/imaug/operators.py +0 -433
- pyxlpr/ppocr/data/imaug/pg_process.py +0 -906
- pyxlpr/ppocr/data/imaug/randaugment.py +0 -143
- pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -239
- pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -533
- pyxlpr/ppocr/data/imaug/sast_process.py +0 -777
- pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -17
- pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -120
- pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -168
- pyxlpr/ppocr/data/lmdb_dataset.py +0 -115
- pyxlpr/ppocr/data/pgnet_dataset.py +0 -104
- pyxlpr/ppocr/data/pubtab_dataset.py +0 -107
- pyxlpr/ppocr/data/simple_dataset.py +0 -372
- pyxlpr/ppocr/losses/__init__.py +0 -61
- pyxlpr/ppocr/losses/ace_loss.py +0 -52
- pyxlpr/ppocr/losses/basic_loss.py +0 -135
- pyxlpr/ppocr/losses/center_loss.py +0 -88
- pyxlpr/ppocr/losses/cls_loss.py +0 -30
- pyxlpr/ppocr/losses/combined_loss.py +0 -67
- pyxlpr/ppocr/losses/det_basic_loss.py +0 -208
- pyxlpr/ppocr/losses/det_db_loss.py +0 -80
- pyxlpr/ppocr/losses/det_east_loss.py +0 -63
- pyxlpr/ppocr/losses/det_pse_loss.py +0 -149
- pyxlpr/ppocr/losses/det_sast_loss.py +0 -121
- pyxlpr/ppocr/losses/distillation_loss.py +0 -272
- pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -140
- pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -113
- pyxlpr/ppocr/losses/rec_aster_loss.py +0 -99
- pyxlpr/ppocr/losses/rec_att_loss.py +0 -39
- pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -44
- pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -70
- pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -30
- pyxlpr/ppocr/losses/rec_sar_loss.py +0 -28
- pyxlpr/ppocr/losses/rec_srn_loss.py +0 -47
- pyxlpr/ppocr/losses/table_att_loss.py +0 -109
- pyxlpr/ppocr/metrics/__init__.py +0 -44
- pyxlpr/ppocr/metrics/cls_metric.py +0 -45
- pyxlpr/ppocr/metrics/det_metric.py +0 -82
- pyxlpr/ppocr/metrics/distillation_metric.py +0 -73
- pyxlpr/ppocr/metrics/e2e_metric.py +0 -86
- pyxlpr/ppocr/metrics/eval_det_iou.py +0 -274
- pyxlpr/ppocr/metrics/kie_metric.py +0 -70
- pyxlpr/ppocr/metrics/rec_metric.py +0 -75
- pyxlpr/ppocr/metrics/table_metric.py +0 -50
- pyxlpr/ppocr/modeling/architectures/__init__.py +0 -32
- pyxlpr/ppocr/modeling/architectures/base_model.py +0 -88
- pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -60
- pyxlpr/ppocr/modeling/backbones/__init__.py +0 -54
- pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -268
- pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -246
- pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -285
- pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -265
- pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -186
- pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -138
- pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -258
- pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -48
- pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -210
- pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -143
- pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -307
- pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -286
- pyxlpr/ppocr/modeling/heads/__init__.py +0 -54
- pyxlpr/ppocr/modeling/heads/cls_head.py +0 -52
- pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -118
- pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -121
- pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -37
- pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -128
- pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -253
- pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -206
- pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -163
- pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -393
- pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -202
- pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -88
- pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -826
- pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -402
- pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -280
- pyxlpr/ppocr/modeling/heads/self_attention.py +0 -406
- pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -246
- pyxlpr/ppocr/modeling/necks/__init__.py +0 -32
- pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -111
- pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -188
- pyxlpr/ppocr/modeling/necks/fpn.py +0 -138
- pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -314
- pyxlpr/ppocr/modeling/necks/rnn.py +0 -92
- pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -284
- pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -110
- pyxlpr/ppocr/modeling/transforms/__init__.py +0 -28
- pyxlpr/ppocr/modeling/transforms/stn.py +0 -135
- pyxlpr/ppocr/modeling/transforms/tps.py +0 -308
- pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -156
- pyxlpr/ppocr/optimizer/__init__.py +0 -61
- pyxlpr/ppocr/optimizer/learning_rate.py +0 -228
- pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -49
- pyxlpr/ppocr/optimizer/optimizer.py +0 -160
- pyxlpr/ppocr/optimizer/regularizer.py +0 -52
- pyxlpr/ppocr/postprocess/__init__.py +0 -55
- pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -33
- pyxlpr/ppocr/postprocess/db_postprocess.py +0 -234
- pyxlpr/ppocr/postprocess/east_postprocess.py +0 -143
- pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -200
- pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -52
- pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -15
- pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -29
- pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -14
- pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -118
- pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -654
- pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -355
- pyxlpr/ppocr/tools/__init__.py +0 -14
- pyxlpr/ppocr/tools/eval.py +0 -83
- pyxlpr/ppocr/tools/export_center.py +0 -77
- pyxlpr/ppocr/tools/export_model.py +0 -129
- pyxlpr/ppocr/tools/infer/predict_cls.py +0 -151
- pyxlpr/ppocr/tools/infer/predict_det.py +0 -300
- pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -169
- pyxlpr/ppocr/tools/infer/predict_rec.py +0 -414
- pyxlpr/ppocr/tools/infer/predict_system.py +0 -204
- pyxlpr/ppocr/tools/infer/utility.py +0 -629
- pyxlpr/ppocr/tools/infer_cls.py +0 -83
- pyxlpr/ppocr/tools/infer_det.py +0 -134
- pyxlpr/ppocr/tools/infer_e2e.py +0 -122
- pyxlpr/ppocr/tools/infer_kie.py +0 -153
- pyxlpr/ppocr/tools/infer_rec.py +0 -146
- pyxlpr/ppocr/tools/infer_table.py +0 -107
- pyxlpr/ppocr/tools/program.py +0 -596
- pyxlpr/ppocr/tools/test_hubserving.py +0 -117
- pyxlpr/ppocr/tools/train.py +0 -163
- pyxlpr/ppocr/tools/xlprog.py +0 -748
- pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -94
- pyxlpr/ppocr/utils/__init__.py +0 -24
- pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -117
- pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -162
- pyxlpr/ppocr/utils/dict/be_dict.txt +0 -145
- pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -140
- pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -8421
- pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -163
- pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -167
- pyxlpr/ppocr/utils/dict/en_dict.txt +0 -63
- pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -136
- pyxlpr/ppocr/utils/dict/french_dict.txt +0 -136
- pyxlpr/ppocr/utils/dict/german_dict.txt +0 -143
- pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -162
- pyxlpr/ppocr/utils/dict/it_dict.txt +0 -118
- pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -4399
- pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -153
- pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -3688
- pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -185
- pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -153
- pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -153
- pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -96
- pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -130
- pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -91
- pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -134
- pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -125
- pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -128
- pyxlpr/ppocr/utils/dict/table_dict.txt +0 -277
- pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -2759
- pyxlpr/ppocr/utils/dict/te_dict.txt +0 -151
- pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -114
- pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -142
- pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -137
- pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -110
- pyxlpr/ppocr/utils/dict90.txt +0 -90
- pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -574
- pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -83
- pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -87
- pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -457
- pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -592
- pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -162
- pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -162
- pyxlpr/ppocr/utils/en_dict.txt +0 -95
- pyxlpr/ppocr/utils/gen_label.py +0 -81
- pyxlpr/ppocr/utils/ic15_dict.txt +0 -36
- pyxlpr/ppocr/utils/iou.py +0 -54
- pyxlpr/ppocr/utils/logging.py +0 -69
- pyxlpr/ppocr/utils/network.py +0 -84
- pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -6623
- pyxlpr/ppocr/utils/profiler.py +0 -110
- pyxlpr/ppocr/utils/save_load.py +0 -150
- pyxlpr/ppocr/utils/stats.py +0 -72
- pyxlpr/ppocr/utils/utility.py +0 -80
- pyxlpr/ppstructure/__init__.py +0 -13
- pyxlpr/ppstructure/predict_system.py +0 -187
- pyxlpr/ppstructure/table/__init__.py +0 -13
- pyxlpr/ppstructure/table/eval_table.py +0 -72
- pyxlpr/ppstructure/table/matcher.py +0 -192
- pyxlpr/ppstructure/table/predict_structure.py +0 -136
- pyxlpr/ppstructure/table/predict_table.py +0 -221
- pyxlpr/ppstructure/table/table_metric/__init__.py +0 -16
- pyxlpr/ppstructure/table/table_metric/parallel.py +0 -51
- pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -247
- pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -13
- pyxlpr/ppstructure/table/tablepyxl/style.py +0 -283
- pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -118
- pyxlpr/ppstructure/utility.py +0 -71
- pyxlpr/xlai.py +0 -10
- /pyxllib/{ext/autogui → autogui}/virtualkey.py +0 -0
- {pyxllib-0.3.96.dist-info → pyxllib-0.3.197.dist-info/licenses}/LICENSE +0 -0
pyxlpr/ppocr/tools/infer_cls.py
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
from __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import numpy as np
|
20
|
-
|
21
|
-
import os
|
22
|
-
import sys
|
23
|
-
|
24
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
25
|
-
sys.path.append(__dir__)
|
26
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
27
|
-
|
28
|
-
os.environ["FLAGS_allocator_strategy"] = 'auto_growth'
|
29
|
-
|
30
|
-
import paddle
|
31
|
-
|
32
|
-
from pyxlpr.ppocr.data import create_operators, transform
|
33
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
34
|
-
from pyxlpr.ppocr.postprocess import build_post_process
|
35
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
36
|
-
from pyxlpr.ppocr.utils.utility import get_image_file_list
|
37
|
-
import pyxlpr.ppocr.tools.program as program
|
38
|
-
|
39
|
-
|
40
|
-
def main():
|
41
|
-
global_config = config['Global']
|
42
|
-
|
43
|
-
# build post process
|
44
|
-
post_process_class = build_post_process(config['PostProcess'],
|
45
|
-
global_config)
|
46
|
-
|
47
|
-
# build model
|
48
|
-
model = build_model(config['Architecture'])
|
49
|
-
|
50
|
-
load_model(config, model)
|
51
|
-
|
52
|
-
# create data ops
|
53
|
-
transforms = []
|
54
|
-
for op in config['Eval']['dataset']['transforms']:
|
55
|
-
op_name = list(op)[0]
|
56
|
-
if 'Label' in op_name:
|
57
|
-
continue
|
58
|
-
elif op_name == 'KeepKeys':
|
59
|
-
op[op_name]['keep_keys'] = ['image']
|
60
|
-
transforms.append(op)
|
61
|
-
global_config['infer_mode'] = True
|
62
|
-
ops = create_operators(transforms, global_config)
|
63
|
-
|
64
|
-
model.eval()
|
65
|
-
for file in get_image_file_list(config['Global']['infer_img']):
|
66
|
-
logger.info("infer_img: {}".format(file))
|
67
|
-
with open(file, 'rb') as f:
|
68
|
-
img = f.read()
|
69
|
-
data = {'image': img}
|
70
|
-
batch = transform(data, ops)
|
71
|
-
|
72
|
-
images = np.expand_dims(batch[0], axis=0)
|
73
|
-
images = paddle.to_tensor(images)
|
74
|
-
preds = model(images)
|
75
|
-
post_result = post_process_class(preds)
|
76
|
-
for rec_reuslt in post_result:
|
77
|
-
logger.info('\t result: {}'.format(rec_reuslt))
|
78
|
-
logger.info("success!")
|
79
|
-
|
80
|
-
|
81
|
-
if __name__ == '__main__':
|
82
|
-
config, device, logger, vdl_writer = program.preprocess()
|
83
|
-
main()
|
pyxlpr/ppocr/tools/infer_det.py
DELETED
@@ -1,134 +0,0 @@
|
|
1
|
-
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
from __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import numpy as np
|
20
|
-
|
21
|
-
import os
|
22
|
-
import sys
|
23
|
-
|
24
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
25
|
-
sys.path.append(__dir__)
|
26
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
27
|
-
|
28
|
-
os.environ["FLAGS_allocator_strategy"] = 'auto_growth'
|
29
|
-
|
30
|
-
import cv2
|
31
|
-
import json
|
32
|
-
import paddle
|
33
|
-
|
34
|
-
from pyxlpr.ppocr.data import create_operators, transform
|
35
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
36
|
-
from pyxlpr.ppocr.postprocess import build_post_process
|
37
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
38
|
-
from pyxlpr.ppocr.utils.utility import get_image_file_list
|
39
|
-
import pyxlpr.ppocr.tools.program as program
|
40
|
-
|
41
|
-
|
42
|
-
def draw_det_res(dt_boxes, config, img, img_name, save_path):
|
43
|
-
if len(dt_boxes) > 0:
|
44
|
-
import cv2
|
45
|
-
src_im = img
|
46
|
-
for box in dt_boxes:
|
47
|
-
box = box.astype(np.int32).reshape((-1, 1, 2))
|
48
|
-
cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)
|
49
|
-
if not os.path.exists(save_path):
|
50
|
-
os.makedirs(save_path)
|
51
|
-
save_path = os.path.join(save_path, os.path.basename(img_name))
|
52
|
-
cv2.imwrite(save_path, src_im)
|
53
|
-
logger.info("The detected Image saved in {}".format(save_path))
|
54
|
-
|
55
|
-
|
56
|
-
@paddle.no_grad()
|
57
|
-
def main(config, logger):
|
58
|
-
global_config = config['Global']
|
59
|
-
|
60
|
-
# build model
|
61
|
-
model = build_model(config['Architecture'])
|
62
|
-
|
63
|
-
load_model(config, model)
|
64
|
-
# build post process
|
65
|
-
post_process_class = build_post_process(config['PostProcess'])
|
66
|
-
|
67
|
-
# create data ops
|
68
|
-
transforms = []
|
69
|
-
for op in config['Eval']['dataset']['transforms']:
|
70
|
-
op_name = list(op)[0]
|
71
|
-
if 'Label' in op_name:
|
72
|
-
continue
|
73
|
-
elif op_name == 'KeepKeys':
|
74
|
-
op[op_name]['keep_keys'] = ['image', 'shape']
|
75
|
-
transforms.append(op)
|
76
|
-
|
77
|
-
ops = create_operators(transforms, global_config)
|
78
|
-
|
79
|
-
save_res_path = config['Global']['save_res_path']
|
80
|
-
if not os.path.exists(os.path.dirname(save_res_path)):
|
81
|
-
os.makedirs(os.path.dirname(save_res_path))
|
82
|
-
|
83
|
-
model.eval()
|
84
|
-
with open(save_res_path, "wb") as fout:
|
85
|
-
for file in get_image_file_list(config['Global']['infer_img']):
|
86
|
-
logger.info("infer_img: {}".format(file))
|
87
|
-
with open(file, 'rb') as f:
|
88
|
-
img = f.read()
|
89
|
-
data = {'image': img}
|
90
|
-
batch = transform(data, ops)
|
91
|
-
|
92
|
-
images = np.expand_dims(batch[0], axis=0)
|
93
|
-
shape_list = np.expand_dims(batch[1], axis=0)
|
94
|
-
images = paddle.to_tensor(images)
|
95
|
-
preds = model(images)
|
96
|
-
post_result = post_process_class(preds, shape_list)
|
97
|
-
|
98
|
-
src_img = cv2.imread(file)
|
99
|
-
|
100
|
-
dt_boxes_json = []
|
101
|
-
# parser boxes if post_result is dict
|
102
|
-
if isinstance(post_result, dict):
|
103
|
-
det_box_json = {}
|
104
|
-
for k in post_result.keys():
|
105
|
-
boxes = post_result[k][0]['points']
|
106
|
-
dt_boxes_list = []
|
107
|
-
for box in boxes:
|
108
|
-
tmp_json = {"transcription": ""}
|
109
|
-
tmp_json['points'] = box.tolist()
|
110
|
-
dt_boxes_list.append(tmp_json)
|
111
|
-
det_box_json[k] = dt_boxes_list
|
112
|
-
save_det_path = os.path.dirname(config['Global'][
|
113
|
-
'save_res_path']) + "/det_results_{}/".format(k)
|
114
|
-
draw_det_res(boxes, config, src_img, file, save_det_path)
|
115
|
-
else:
|
116
|
-
boxes = post_result[0]['points']
|
117
|
-
dt_boxes_json = []
|
118
|
-
# write result
|
119
|
-
for box in boxes:
|
120
|
-
tmp_json = {"transcription": ""}
|
121
|
-
tmp_json['points'] = box.tolist()
|
122
|
-
dt_boxes_json.append(tmp_json)
|
123
|
-
save_det_path = os.path.dirname(config['Global'][
|
124
|
-
'save_res_path']) + "/det_results/"
|
125
|
-
draw_det_res(boxes, config, src_img, file, save_det_path)
|
126
|
-
otstr = file + "\t" + json.dumps(dt_boxes_json) + "\n"
|
127
|
-
fout.write(otstr.encode())
|
128
|
-
|
129
|
-
logger.info("success!")
|
130
|
-
|
131
|
-
|
132
|
-
if __name__ == '__main__':
|
133
|
-
config, device, logger, vdl_writer = program.preprocess()
|
134
|
-
main(config, logger)
|
pyxlpr/ppocr/tools/infer_e2e.py
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
from __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import numpy as np
|
20
|
-
|
21
|
-
import os
|
22
|
-
import sys
|
23
|
-
|
24
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
25
|
-
sys.path.append(__dir__)
|
26
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
27
|
-
|
28
|
-
os.environ["FLAGS_allocator_strategy"] = 'auto_growth'
|
29
|
-
|
30
|
-
import cv2
|
31
|
-
import json
|
32
|
-
import paddle
|
33
|
-
|
34
|
-
from pyxlpr.ppocr.data import create_operators, transform
|
35
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
36
|
-
from pyxlpr.ppocr.postprocess import build_post_process
|
37
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
38
|
-
from pyxlpr.ppocr.utils.utility import get_image_file_list
|
39
|
-
import pyxlpr.ppocr.tools.program as program
|
40
|
-
|
41
|
-
|
42
|
-
def draw_e2e_res(dt_boxes, strs, config, img, img_name):
|
43
|
-
if len(dt_boxes) > 0:
|
44
|
-
src_im = img
|
45
|
-
for box, str in zip(dt_boxes, strs):
|
46
|
-
box = box.astype(np.int32).reshape((-1, 1, 2))
|
47
|
-
cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)
|
48
|
-
cv2.putText(
|
49
|
-
src_im,
|
50
|
-
str,
|
51
|
-
org=(int(box[0, 0, 0]), int(box[0, 0, 1])),
|
52
|
-
fontFace=cv2.FONT_HERSHEY_COMPLEX,
|
53
|
-
fontScale=0.7,
|
54
|
-
color=(0, 255, 0),
|
55
|
-
thickness=1)
|
56
|
-
save_det_path = os.path.dirname(config['Global'][
|
57
|
-
'save_res_path']) + "/e2e_results/"
|
58
|
-
if not os.path.exists(save_det_path):
|
59
|
-
os.makedirs(save_det_path)
|
60
|
-
save_path = os.path.join(save_det_path, os.path.basename(img_name))
|
61
|
-
cv2.imwrite(save_path, src_im)
|
62
|
-
logger.info("The e2e Image saved in {}".format(save_path))
|
63
|
-
|
64
|
-
|
65
|
-
def main():
|
66
|
-
global_config = config['Global']
|
67
|
-
|
68
|
-
# build model
|
69
|
-
model = build_model(config['Architecture'])
|
70
|
-
|
71
|
-
load_model(config, model)
|
72
|
-
|
73
|
-
# build post process
|
74
|
-
post_process_class = build_post_process(config['PostProcess'],
|
75
|
-
global_config)
|
76
|
-
|
77
|
-
# create data ops
|
78
|
-
transforms = []
|
79
|
-
for op in config['Eval']['dataset']['transforms']:
|
80
|
-
op_name = list(op)[0]
|
81
|
-
if 'Label' in op_name:
|
82
|
-
continue
|
83
|
-
elif op_name == 'KeepKeys':
|
84
|
-
op[op_name]['keep_keys'] = ['image', 'shape']
|
85
|
-
transforms.append(op)
|
86
|
-
|
87
|
-
ops = create_operators(transforms, global_config)
|
88
|
-
|
89
|
-
save_res_path = config['Global']['save_res_path']
|
90
|
-
if not os.path.exists(os.path.dirname(save_res_path)):
|
91
|
-
os.makedirs(os.path.dirname(save_res_path))
|
92
|
-
|
93
|
-
model.eval()
|
94
|
-
with open(save_res_path, "wb") as fout:
|
95
|
-
for file in get_image_file_list(config['Global']['infer_img']):
|
96
|
-
logger.info("infer_img: {}".format(file))
|
97
|
-
with open(file, 'rb') as f:
|
98
|
-
img = f.read()
|
99
|
-
data = {'image': img}
|
100
|
-
batch = transform(data, ops)
|
101
|
-
images = np.expand_dims(batch[0], axis=0)
|
102
|
-
shape_list = np.expand_dims(batch[1], axis=0)
|
103
|
-
images = paddle.to_tensor(images)
|
104
|
-
preds = model(images)
|
105
|
-
post_result = post_process_class(preds, shape_list)
|
106
|
-
points, strs = post_result['points'], post_result['texts']
|
107
|
-
# write resule
|
108
|
-
dt_boxes_json = []
|
109
|
-
for poly, str in zip(points, strs):
|
110
|
-
tmp_json = {"transcription": str}
|
111
|
-
tmp_json['points'] = poly.tolist()
|
112
|
-
dt_boxes_json.append(tmp_json)
|
113
|
-
otstr = file + "\t" + json.dumps(dt_boxes_json) + "\n"
|
114
|
-
fout.write(otstr.encode())
|
115
|
-
src_img = cv2.imread(file)
|
116
|
-
draw_e2e_res(points, strs, config, src_img, file)
|
117
|
-
logger.info("success!")
|
118
|
-
|
119
|
-
|
120
|
-
if __name__ == '__main__':
|
121
|
-
config, device, logger, vdl_writer = program.preprocess()
|
122
|
-
main()
|
pyxlpr/ppocr/tools/infer_kie.py
DELETED
@@ -1,153 +0,0 @@
|
|
1
|
-
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
from __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import numpy as np
|
20
|
-
import paddle.nn.functional as F
|
21
|
-
|
22
|
-
import os
|
23
|
-
import sys
|
24
|
-
|
25
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
26
|
-
sys.path.append(__dir__)
|
27
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
28
|
-
|
29
|
-
os.environ["FLAGS_allocator_strategy"] = 'auto_growth'
|
30
|
-
|
31
|
-
import cv2
|
32
|
-
import paddle
|
33
|
-
|
34
|
-
from pyxlpr.ppocr.data import create_operators, transform
|
35
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
36
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
37
|
-
import pyxlpr.ppocr.tools.program as program
|
38
|
-
import time
|
39
|
-
|
40
|
-
|
41
|
-
def read_class_list(filepath):
|
42
|
-
dict = {}
|
43
|
-
with open(filepath, "r") as f:
|
44
|
-
lines = f.readlines()
|
45
|
-
for line in lines:
|
46
|
-
key, value = line.split(" ")
|
47
|
-
dict[key] = value.rstrip()
|
48
|
-
return dict
|
49
|
-
|
50
|
-
|
51
|
-
def draw_kie_result(batch, node, idx_to_cls, count):
|
52
|
-
img = batch[6].copy()
|
53
|
-
boxes = batch[7]
|
54
|
-
h, w = img.shape[:2]
|
55
|
-
pred_img = np.ones((h, w * 2, 3), dtype=np.uint8) * 255
|
56
|
-
max_value, max_idx = paddle.max(node, -1), paddle.argmax(node, -1)
|
57
|
-
node_pred_label = max_idx.numpy().tolist()
|
58
|
-
node_pred_score = max_value.numpy().tolist()
|
59
|
-
|
60
|
-
for i, box in enumerate(boxes):
|
61
|
-
if i >= len(node_pred_label):
|
62
|
-
break
|
63
|
-
new_box = [[box[0], box[1]], [box[2], box[1]], [box[2], box[3]],
|
64
|
-
[box[0], box[3]]]
|
65
|
-
Pts = np.array([new_box], np.int32)
|
66
|
-
cv2.polylines(
|
67
|
-
img, [Pts.reshape((-1, 1, 2))],
|
68
|
-
True,
|
69
|
-
color=(255, 255, 0),
|
70
|
-
thickness=1)
|
71
|
-
x_min = int(min([point[0] for point in new_box]))
|
72
|
-
y_min = int(min([point[1] for point in new_box]))
|
73
|
-
|
74
|
-
pred_label = str(node_pred_label[i])
|
75
|
-
if pred_label in idx_to_cls:
|
76
|
-
pred_label = idx_to_cls[pred_label]
|
77
|
-
pred_score = '{:.2f}'.format(node_pred_score[i])
|
78
|
-
text = pred_label + '(' + pred_score + ')'
|
79
|
-
cv2.putText(pred_img, text, (x_min * 2, y_min),
|
80
|
-
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)
|
81
|
-
vis_img = np.ones((h, w * 3, 3), dtype=np.uint8) * 255
|
82
|
-
vis_img[:, :w] = img
|
83
|
-
vis_img[:, w:] = pred_img
|
84
|
-
save_kie_path = os.path.dirname(config['Global'][
|
85
|
-
'save_res_path']) + "/kie_results/"
|
86
|
-
if not os.path.exists(save_kie_path):
|
87
|
-
os.makedirs(save_kie_path)
|
88
|
-
save_path = os.path.join(save_kie_path, str(count) + ".png")
|
89
|
-
cv2.imwrite(save_path, vis_img)
|
90
|
-
logger.info("The Kie Image saved in {}".format(save_path))
|
91
|
-
|
92
|
-
|
93
|
-
def main():
|
94
|
-
global_config = config['Global']
|
95
|
-
|
96
|
-
# build model
|
97
|
-
model = build_model(config['Architecture'])
|
98
|
-
load_model(config, model)
|
99
|
-
|
100
|
-
# create data ops
|
101
|
-
transforms = []
|
102
|
-
for op in config['Eval']['dataset']['transforms']:
|
103
|
-
transforms.append(op)
|
104
|
-
|
105
|
-
data_dir = config['Eval']['dataset']['data_dir']
|
106
|
-
|
107
|
-
ops = create_operators(transforms, global_config)
|
108
|
-
|
109
|
-
save_res_path = config['Global']['save_res_path']
|
110
|
-
class_path = config['Global']['class_path']
|
111
|
-
idx_to_cls = read_class_list(class_path)
|
112
|
-
if not os.path.exists(os.path.dirname(save_res_path)):
|
113
|
-
os.makedirs(os.path.dirname(save_res_path))
|
114
|
-
|
115
|
-
model.eval()
|
116
|
-
|
117
|
-
warmup_times = 0
|
118
|
-
count_t = []
|
119
|
-
with open(save_res_path, "wb") as fout:
|
120
|
-
with open(config['Global']['infer_img'], "rb") as f:
|
121
|
-
lines = f.readlines()
|
122
|
-
for index, data_line in enumerate(lines):
|
123
|
-
if index == 10:
|
124
|
-
warmup_t = time.time()
|
125
|
-
data_line = data_line.decode('utf-8')
|
126
|
-
substr = data_line.strip("\n").split("\t")
|
127
|
-
img_path, label = data_dir + "/" + substr[0], substr[1]
|
128
|
-
data = {'img_path': img_path, 'label': label}
|
129
|
-
with open(data['img_path'], 'rb') as f:
|
130
|
-
img = f.read()
|
131
|
-
data['image'] = img
|
132
|
-
st = time.time()
|
133
|
-
batch = transform(data, ops)
|
134
|
-
batch_pred = [0] * len(batch)
|
135
|
-
for i in range(len(batch)):
|
136
|
-
batch_pred[i] = paddle.to_tensor(
|
137
|
-
np.expand_dims(
|
138
|
-
batch[i], axis=0))
|
139
|
-
st = time.time()
|
140
|
-
node, edge = model(batch_pred)
|
141
|
-
node = F.softmax(node, -1)
|
142
|
-
count_t.append(time.time() - st)
|
143
|
-
draw_kie_result(batch, node, idx_to_cls, index)
|
144
|
-
logger.info("success!")
|
145
|
-
logger.info("It took {} s for predict {} images.".format(
|
146
|
-
np.sum(count_t), len(count_t)))
|
147
|
-
ips = len(count_t[warmup_times:]) / np.sum(count_t[warmup_times:])
|
148
|
-
logger.info("The ips is {} images/s".format(ips))
|
149
|
-
|
150
|
-
|
151
|
-
if __name__ == '__main__':
|
152
|
-
config, device, logger, vdl_writer = program.preprocess()
|
153
|
-
main()
|
pyxlpr/ppocr/tools/infer_rec.py
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
from __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import numpy as np
|
20
|
-
|
21
|
-
import os
|
22
|
-
import sys
|
23
|
-
import json
|
24
|
-
|
25
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
26
|
-
sys.path.append(__dir__)
|
27
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
28
|
-
|
29
|
-
os.environ["FLAGS_allocator_strategy"] = 'auto_growth'
|
30
|
-
|
31
|
-
import paddle
|
32
|
-
|
33
|
-
from pyxlpr.ppocr.data import create_operators, transform
|
34
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
35
|
-
from pyxlpr.ppocr.postprocess import build_post_process
|
36
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
37
|
-
from pyxlpr.ppocr.utils.utility import get_image_file_list
|
38
|
-
import pyxlpr.ppocr.tools.program as program
|
39
|
-
|
40
|
-
|
41
|
-
def main():
|
42
|
-
global_config = config['Global']
|
43
|
-
|
44
|
-
# build post process
|
45
|
-
post_process_class = build_post_process(config['PostProcess'],
|
46
|
-
global_config)
|
47
|
-
|
48
|
-
# build model
|
49
|
-
if hasattr(post_process_class, 'character'):
|
50
|
-
char_num = len(getattr(post_process_class, 'character'))
|
51
|
-
if config['Architecture']["algorithm"] in ["Distillation",
|
52
|
-
]: # distillation model
|
53
|
-
for key in config['Architecture']["Models"]:
|
54
|
-
config['Architecture']["Models"][key]["Head"][
|
55
|
-
'out_channels'] = char_num
|
56
|
-
else: # base rec model
|
57
|
-
config['Architecture']["Head"]['out_channels'] = char_num
|
58
|
-
|
59
|
-
model = build_model(config['Architecture'])
|
60
|
-
|
61
|
-
load_model(config, model)
|
62
|
-
|
63
|
-
# create data ops
|
64
|
-
transforms = []
|
65
|
-
for op in config['Eval']['dataset']['transforms']:
|
66
|
-
op_name = list(op)[0]
|
67
|
-
if 'Label' in op_name:
|
68
|
-
continue
|
69
|
-
elif op_name in ['RecResizeImg']:
|
70
|
-
op[op_name]['infer_mode'] = True
|
71
|
-
elif op_name == 'KeepKeys':
|
72
|
-
if config['Architecture']['algorithm'] == "SRN":
|
73
|
-
op[op_name]['keep_keys'] = [
|
74
|
-
'image', 'encoder_word_pos', 'gsrm_word_pos',
|
75
|
-
'gsrm_slf_attn_bias1', 'gsrm_slf_attn_bias2'
|
76
|
-
]
|
77
|
-
elif config['Architecture']['algorithm'] == "SAR":
|
78
|
-
op[op_name]['keep_keys'] = ['image', 'valid_ratio']
|
79
|
-
else:
|
80
|
-
op[op_name]['keep_keys'] = ['image']
|
81
|
-
transforms.append(op)
|
82
|
-
global_config['infer_mode'] = True
|
83
|
-
ops = create_operators(transforms, global_config)
|
84
|
-
|
85
|
-
save_res_path = config['Global'].get('save_res_path',
|
86
|
-
"./output/rec/predicts_rec.txt")
|
87
|
-
if not os.path.exists(os.path.dirname(save_res_path)):
|
88
|
-
os.makedirs(os.path.dirname(save_res_path))
|
89
|
-
|
90
|
-
model.eval()
|
91
|
-
|
92
|
-
with open(save_res_path, "w") as fout:
|
93
|
-
for file in get_image_file_list(config['Global']['infer_img']):
|
94
|
-
logger.info("infer_img: {}".format(file))
|
95
|
-
with open(file, 'rb') as f:
|
96
|
-
img = f.read()
|
97
|
-
data = {'image': img}
|
98
|
-
batch = transform(data, ops)
|
99
|
-
if config['Architecture']['algorithm'] == "SRN":
|
100
|
-
encoder_word_pos_list = np.expand_dims(batch[1], axis=0)
|
101
|
-
gsrm_word_pos_list = np.expand_dims(batch[2], axis=0)
|
102
|
-
gsrm_slf_attn_bias1_list = np.expand_dims(batch[3], axis=0)
|
103
|
-
gsrm_slf_attn_bias2_list = np.expand_dims(batch[4], axis=0)
|
104
|
-
|
105
|
-
others = [
|
106
|
-
paddle.to_tensor(encoder_word_pos_list),
|
107
|
-
paddle.to_tensor(gsrm_word_pos_list),
|
108
|
-
paddle.to_tensor(gsrm_slf_attn_bias1_list),
|
109
|
-
paddle.to_tensor(gsrm_slf_attn_bias2_list)
|
110
|
-
]
|
111
|
-
if config['Architecture']['algorithm'] == "SAR":
|
112
|
-
valid_ratio = np.expand_dims(batch[-1], axis=0)
|
113
|
-
img_metas = [paddle.to_tensor(valid_ratio)]
|
114
|
-
|
115
|
-
images = np.expand_dims(batch[0], axis=0)
|
116
|
-
images = paddle.to_tensor(images)
|
117
|
-
if config['Architecture']['algorithm'] == "SRN":
|
118
|
-
preds = model(images, others)
|
119
|
-
elif config['Architecture']['algorithm'] == "SAR":
|
120
|
-
preds = model(images, img_metas)
|
121
|
-
else:
|
122
|
-
preds = model(images)
|
123
|
-
post_result = post_process_class(preds)
|
124
|
-
info = None
|
125
|
-
if isinstance(post_result, dict):
|
126
|
-
rec_info = dict()
|
127
|
-
for key in post_result:
|
128
|
-
if len(post_result[key][0]) >= 2:
|
129
|
-
rec_info[key] = {
|
130
|
-
"label": post_result[key][0][0],
|
131
|
-
"score": float(post_result[key][0][1]),
|
132
|
-
}
|
133
|
-
info = json.dumps(rec_info)
|
134
|
-
else:
|
135
|
-
if len(post_result[0]) >= 2:
|
136
|
-
info = post_result[0][0] + "\t" + str(post_result[0][1])
|
137
|
-
|
138
|
-
if info is not None:
|
139
|
-
logger.info("\t result: {}".format(info))
|
140
|
-
fout.write(file + "\t" + info)
|
141
|
-
logger.info("success!")
|
142
|
-
|
143
|
-
|
144
|
-
if __name__ == '__main__':
|
145
|
-
config, device, logger, vdl_writer = program.preprocess()
|
146
|
-
main()
|