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
@@ -1,117 +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
|
-
import os
|
15
|
-
import sys
|
16
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
17
|
-
sys.path.append(__dir__)
|
18
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
19
|
-
|
20
|
-
from pyxlpr.ppocr.utils.logging import get_logger
|
21
|
-
logger = get_logger()
|
22
|
-
|
23
|
-
import cv2
|
24
|
-
import numpy as np
|
25
|
-
import time
|
26
|
-
from PIL import Image
|
27
|
-
from pyxlpr.ppocr.utils.utility import get_image_file_list
|
28
|
-
from pyxlpr.ppocr.tools.infer.utility import draw_ocr, draw_boxes
|
29
|
-
|
30
|
-
import requests
|
31
|
-
import json
|
32
|
-
import base64
|
33
|
-
|
34
|
-
|
35
|
-
def cv2_to_base64(image):
|
36
|
-
return base64.b64encode(image).decode('utf8')
|
37
|
-
|
38
|
-
|
39
|
-
def draw_server_result(image_file, res):
|
40
|
-
img = cv2.imread(image_file)
|
41
|
-
image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
|
42
|
-
if len(res) == 0:
|
43
|
-
return np.array(image)
|
44
|
-
keys = res[0].keys()
|
45
|
-
if 'text_region' not in keys: # for ocr_rec, draw function is invalid
|
46
|
-
logger.info("draw function is invalid for ocr_rec!")
|
47
|
-
return None
|
48
|
-
elif 'text' not in keys: # for ocr_det
|
49
|
-
logger.info("draw text boxes only!")
|
50
|
-
boxes = []
|
51
|
-
for dno in range(len(res)):
|
52
|
-
boxes.append(res[dno]['text_region'])
|
53
|
-
boxes = np.array(boxes)
|
54
|
-
draw_img = draw_boxes(image, boxes)
|
55
|
-
return draw_img
|
56
|
-
else: # for ocr_system
|
57
|
-
logger.info("draw boxes and texts!")
|
58
|
-
boxes = []
|
59
|
-
texts = []
|
60
|
-
scores = []
|
61
|
-
for dno in range(len(res)):
|
62
|
-
boxes.append(res[dno]['text_region'])
|
63
|
-
texts.append(res[dno]['text'])
|
64
|
-
scores.append(res[dno]['confidence'])
|
65
|
-
boxes = np.array(boxes)
|
66
|
-
scores = np.array(scores)
|
67
|
-
draw_img = draw_ocr(
|
68
|
-
image, boxes, texts, scores, draw_txt=True, drop_score=0.5)
|
69
|
-
return draw_img
|
70
|
-
|
71
|
-
|
72
|
-
def main(url, image_path):
|
73
|
-
image_file_list = get_image_file_list(image_path)
|
74
|
-
is_visualize = False
|
75
|
-
headers = {"Content-type": "application/json"}
|
76
|
-
cnt = 0
|
77
|
-
total_time = 0
|
78
|
-
for image_file in image_file_list:
|
79
|
-
img = open(image_file, 'rb').read()
|
80
|
-
if img is None:
|
81
|
-
logger.info("error in loading image:{}".format(image_file))
|
82
|
-
continue
|
83
|
-
|
84
|
-
# 发送HTTP请求
|
85
|
-
starttime = time.time()
|
86
|
-
data = {'images': [cv2_to_base64(img)]}
|
87
|
-
r = requests.post(url=url, headers=headers, data=json.dumps(data))
|
88
|
-
elapse = time.time() - starttime
|
89
|
-
total_time += elapse
|
90
|
-
logger.info("Predict time of %s: %.3fs" % (image_file, elapse))
|
91
|
-
res = r.json()["results"][0]
|
92
|
-
logger.info(res)
|
93
|
-
|
94
|
-
if is_visualize:
|
95
|
-
draw_img = draw_server_result(image_file, res)
|
96
|
-
if draw_img is not None:
|
97
|
-
draw_img_save = "./server_results/"
|
98
|
-
if not os.path.exists(draw_img_save):
|
99
|
-
os.makedirs(draw_img_save)
|
100
|
-
cv2.imwrite(
|
101
|
-
os.path.join(draw_img_save, os.path.basename(image_file)),
|
102
|
-
draw_img[:, :, ::-1])
|
103
|
-
logger.info("The visualized image saved in {}".format(
|
104
|
-
os.path.join(draw_img_save, os.path.basename(image_file))))
|
105
|
-
cnt += 1
|
106
|
-
if cnt % 100 == 0:
|
107
|
-
logger.info("{} processed".format(cnt))
|
108
|
-
logger.info("avg time cost: {}".format(float(total_time) / cnt))
|
109
|
-
|
110
|
-
|
111
|
-
if __name__ == '__main__':
|
112
|
-
if len(sys.argv) != 3:
|
113
|
-
logger.info("Usage: %s server_url image_path" % sys.argv[0])
|
114
|
-
else:
|
115
|
-
server_url = sys.argv[1]
|
116
|
-
image_path = sys.argv[2]
|
117
|
-
main(server_url, image_path)
|
pyxlpr/ppocr/tools/train.py
DELETED
@@ -1,163 +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 os
|
20
|
-
import sys
|
21
|
-
|
22
|
-
__dir__ = os.path.dirname(os.path.abspath(__file__))
|
23
|
-
sys.path.append(__dir__)
|
24
|
-
sys.path.append(os.path.abspath(os.path.join(__dir__, '..')))
|
25
|
-
|
26
|
-
import yaml
|
27
|
-
import paddle
|
28
|
-
import paddle.distributed as dist
|
29
|
-
|
30
|
-
paddle.seed(2)
|
31
|
-
|
32
|
-
from pyxlpr.ppocr.data import build_dataloader
|
33
|
-
from pyxlpr.ppocr.modeling.architectures import build_model
|
34
|
-
from pyxlpr.ppocr.losses import build_loss
|
35
|
-
from pyxlpr.ppocr.optimizer import build_optimizer
|
36
|
-
from pyxlpr.ppocr.postprocess import build_post_process
|
37
|
-
from pyxlpr.ppocr.metrics import build_metric
|
38
|
-
from pyxlpr.ppocr.utils.save_load import load_model
|
39
|
-
import pyxlpr.ppocr.tools.program as program
|
40
|
-
|
41
|
-
dist.get_world_size()
|
42
|
-
|
43
|
-
|
44
|
-
def main(config, device, logger, vdl_writer):
|
45
|
-
# init dist environment
|
46
|
-
if config['Global']['distributed']:
|
47
|
-
dist.init_parallel_env()
|
48
|
-
|
49
|
-
global_config = config['Global']
|
50
|
-
|
51
|
-
# 1 创建训练、验证集的dataloader,build dataloader
|
52
|
-
train_dataloader = build_dataloader(config, 'Train', device, logger)
|
53
|
-
if len(train_dataloader) == 0:
|
54
|
-
logger.error(
|
55
|
-
"No Images in train dataset, please ensure\n" +
|
56
|
-
"\t1. The images num in the train label_file_list should be larger than or equal with batch size.\n"
|
57
|
-
+
|
58
|
-
"\t2. The annotation file and path in the configuration file are provided normally."
|
59
|
-
)
|
60
|
-
return
|
61
|
-
|
62
|
-
# Eval数据集是可选的,可以不设置
|
63
|
-
if config['Eval']:
|
64
|
-
valid_dataloader = build_dataloader(config, 'Eval', device, logger)
|
65
|
-
else:
|
66
|
-
valid_dataloader = None
|
67
|
-
|
68
|
-
# print('train_dataloader', len(train_dataloader))
|
69
|
-
# exit()
|
70
|
-
# 2 创建后处理方法,build post process
|
71
|
-
post_process_class = build_post_process(config['PostProcess'],
|
72
|
-
global_config)
|
73
|
-
|
74
|
-
# 3 build model
|
75
|
-
# for rec algorithm
|
76
|
-
if hasattr(post_process_class, 'character'):
|
77
|
-
char_num = len(getattr(post_process_class, 'character'))
|
78
|
-
if config['Architecture']["algorithm"] in ["Distillation",
|
79
|
-
]: # distillation model
|
80
|
-
for key in config['Architecture']["Models"]:
|
81
|
-
config['Architecture']["Models"][key]["Head"][
|
82
|
-
'out_channels'] = char_num
|
83
|
-
else: # base rec model
|
84
|
-
config['Architecture']["Head"]['out_channels'] = char_num
|
85
|
-
|
86
|
-
model = build_model(config['Architecture'])
|
87
|
-
if config['Global']['distributed']:
|
88
|
-
model = paddle.DataParallel(model)
|
89
|
-
|
90
|
-
# 4 build loss
|
91
|
-
loss_class = build_loss(config['Loss'])
|
92
|
-
|
93
|
-
# 5 build optim
|
94
|
-
optimizer, lr_scheduler = build_optimizer(
|
95
|
-
config['Optimizer'],
|
96
|
-
epochs=config['Global']['epoch_num'],
|
97
|
-
step_each_epoch=len(train_dataloader),
|
98
|
-
parameters=model.parameters())
|
99
|
-
|
100
|
-
# 6 build metric
|
101
|
-
eval_class = build_metric(config['Metric'])
|
102
|
-
# load pretrain model
|
103
|
-
pre_best_model_dict = load_model(config, model, optimizer)
|
104
|
-
logger.info('train dataloader has {} iters'.format(len(train_dataloader)))
|
105
|
-
if valid_dataloader is not None:
|
106
|
-
logger.info('valid dataloader has {} iters'.format(
|
107
|
-
len(valid_dataloader)))
|
108
|
-
|
109
|
-
use_amp = config["Global"].get("use_amp", False)
|
110
|
-
if use_amp:
|
111
|
-
AMP_RELATED_FLAGS_SETTING = {
|
112
|
-
'FLAGS_cudnn_batchnorm_spatial_persistent': 1,
|
113
|
-
'FLAGS_max_inplace_grad_add': 8,
|
114
|
-
}
|
115
|
-
paddle.fluid.set_flags(AMP_RELATED_FLAGS_SETTING)
|
116
|
-
scale_loss = config["Global"].get("scale_loss", 1.0)
|
117
|
-
use_dynamic_loss_scaling = config["Global"].get(
|
118
|
-
"use_dynamic_loss_scaling", False)
|
119
|
-
scaler = paddle.amp.GradScaler(
|
120
|
-
init_loss_scaling=scale_loss,
|
121
|
-
use_dynamic_loss_scaling=use_dynamic_loss_scaling)
|
122
|
-
else:
|
123
|
-
scaler = None
|
124
|
-
|
125
|
-
# start train
|
126
|
-
program.train(config, train_dataloader, valid_dataloader, device, model,
|
127
|
-
loss_class, optimizer, lr_scheduler, post_process_class,
|
128
|
-
eval_class, pre_best_model_dict, logger, vdl_writer, scaler)
|
129
|
-
|
130
|
-
|
131
|
-
def test_reader(config, device, logger):
|
132
|
-
loader = build_dataloader(config, 'Train', device, logger)
|
133
|
-
import time
|
134
|
-
starttime = time.time()
|
135
|
-
count = 0
|
136
|
-
try:
|
137
|
-
for data in loader():
|
138
|
-
count += 1
|
139
|
-
if count % 1 == 0:
|
140
|
-
batch_time = time.time() - starttime
|
141
|
-
starttime = time.time()
|
142
|
-
logger.info("reader: {}, {}, {}".format(
|
143
|
-
count, len(data[0]), batch_time))
|
144
|
-
except Exception as e:
|
145
|
-
logger.info(e)
|
146
|
-
logger.info("finish reader: {}, Success!".format(count))
|
147
|
-
|
148
|
-
|
149
|
-
if __name__ == '__main__':
|
150
|
-
r""" 示例用法
|
151
|
-
脚本:D:\slns\PaddleOCR\tools\train.py
|
152
|
-
参数:
|
153
|
-
-c configs/det/det_mv3_db.yml
|
154
|
-
-o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained
|
155
|
-
工作目录:D:\home\chenkunze\pp
|
156
|
-
"""
|
157
|
-
|
158
|
-
# 用于获取配置、设备、日志、visualdl相关信息
|
159
|
-
config, device, logger, vdl_writer = program.preprocess(is_train=True)
|
160
|
-
|
161
|
-
# 如果不想用配置文件,只要能在内存设置好这几个对象,也可以直接调用main
|
162
|
-
main(config, device, logger, vdl_writer)
|
163
|
-
# test_reader(config, device, logger)
|