pyxllib 0.3.96__py3-none-any.whl → 0.3.200__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.
Files changed (358) hide show
  1. pyxllib/__init__.py +21 -21
  2. pyxllib/algo/__init__.py +8 -8
  3. pyxllib/algo/disjoint.py +54 -54
  4. pyxllib/algo/geo.py +541 -529
  5. pyxllib/algo/intervals.py +964 -964
  6. pyxllib/algo/matcher.py +389 -311
  7. pyxllib/algo/newbie.py +166 -166
  8. pyxllib/algo/pupil.py +629 -461
  9. pyxllib/algo/shapelylib.py +67 -67
  10. pyxllib/algo/specialist.py +241 -240
  11. pyxllib/algo/stat.py +494 -458
  12. pyxllib/algo/treelib.py +149 -149
  13. pyxllib/algo/unitlib.py +66 -66
  14. {pyxlpr → pyxllib/autogui}/__init__.py +5 -5
  15. pyxllib/autogui/activewin.py +246 -0
  16. pyxllib/autogui/all.py +9 -0
  17. pyxllib/{ext/autogui → autogui}/autogui.py +852 -823
  18. pyxllib/autogui/uiautolib.py +362 -0
  19. pyxllib/{ext/autogui → autogui}/virtualkey.py +102 -102
  20. pyxllib/autogui/wechat.py +827 -0
  21. pyxllib/autogui/wechat_msg.py +421 -0
  22. pyxllib/autogui/wxautolib.py +84 -0
  23. pyxllib/cv/__init__.py +5 -5
  24. pyxllib/cv/expert.py +267 -267
  25. pyxllib/cv/imfile.py +159 -159
  26. pyxllib/cv/imhash.py +39 -39
  27. pyxllib/cv/pupil.py +9 -9
  28. pyxllib/cv/rgbfmt.py +1525 -1525
  29. pyxllib/cv/slidercaptcha.py +137 -0
  30. pyxllib/cv/trackbartools.py +251 -251
  31. pyxllib/cv/xlcvlib.py +1040 -1040
  32. pyxllib/cv/xlpillib.py +423 -423
  33. pyxllib/data/echarts.py +240 -129
  34. pyxllib/data/jsonlib.py +89 -0
  35. pyxllib/data/oss.py +72 -72
  36. pyxllib/data/pglib.py +1127 -643
  37. pyxllib/data/sqlite.py +568 -341
  38. pyxllib/data/sqllib.py +297 -297
  39. pyxllib/ext/JLineViewer.py +505 -492
  40. pyxllib/ext/__init__.py +6 -6
  41. pyxllib/ext/demolib.py +246 -246
  42. pyxllib/ext/drissionlib.py +277 -0
  43. pyxllib/ext/kq5034lib.py +12 -1606
  44. pyxllib/ext/old.py +663 -663
  45. pyxllib/ext/qt.py +449 -449
  46. pyxllib/ext/robustprocfile.py +497 -0
  47. pyxllib/ext/seleniumlib.py +76 -76
  48. pyxllib/ext/tk.py +173 -173
  49. pyxllib/ext/unixlib.py +827 -826
  50. pyxllib/ext/utools.py +351 -338
  51. pyxllib/ext/webhook.py +124 -101
  52. pyxllib/ext/win32lib.py +40 -40
  53. pyxllib/ext/wjxlib.py +88 -0
  54. pyxllib/ext/wpsapi.py +124 -0
  55. pyxllib/ext/xlwork.py +9 -0
  56. pyxllib/ext/yuquelib.py +1105 -173
  57. pyxllib/file/__init__.py +17 -17
  58. pyxllib/file/docxlib.py +761 -761
  59. pyxllib/file/gitlib.py +309 -309
  60. pyxllib/file/libreoffice.py +165 -0
  61. pyxllib/file/movielib.py +148 -139
  62. pyxllib/file/newbie.py +10 -10
  63. pyxllib/file/onenotelib.py +1469 -1469
  64. pyxllib/file/packlib/__init__.py +330 -293
  65. pyxllib/file/packlib/zipfile.py +2441 -2441
  66. pyxllib/file/pdflib.py +426 -426
  67. pyxllib/file/pupil.py +185 -185
  68. pyxllib/file/specialist/__init__.py +685 -685
  69. pyxllib/file/specialist/dirlib.py +799 -799
  70. pyxllib/file/specialist/download.py +193 -186
  71. pyxllib/file/specialist/filelib.py +2829 -2618
  72. pyxllib/file/xlsxlib.py +3131 -2976
  73. pyxllib/file/xlsyncfile.py +341 -0
  74. pyxllib/prog/__init__.py +5 -5
  75. pyxllib/prog/cachetools.py +64 -0
  76. pyxllib/prog/deprecatedlib.py +233 -233
  77. pyxllib/prog/filelock.py +42 -0
  78. pyxllib/prog/ipyexec.py +253 -253
  79. pyxllib/prog/multiprogs.py +940 -0
  80. pyxllib/prog/newbie.py +451 -444
  81. pyxllib/prog/pupil.py +1197 -1128
  82. pyxllib/prog/sitepackages.py +33 -33
  83. pyxllib/prog/specialist/__init__.py +391 -217
  84. pyxllib/prog/specialist/bc.py +203 -200
  85. pyxllib/prog/specialist/browser.py +497 -488
  86. pyxllib/prog/specialist/common.py +347 -347
  87. pyxllib/prog/specialist/datetime.py +199 -131
  88. pyxllib/prog/specialist/tictoc.py +240 -241
  89. pyxllib/prog/specialist/xllog.py +180 -180
  90. pyxllib/prog/xlosenv.py +108 -101
  91. pyxllib/stdlib/__init__.py +17 -17
  92. pyxllib/stdlib/tablepyxl/__init__.py +10 -10
  93. pyxllib/stdlib/tablepyxl/style.py +303 -303
  94. pyxllib/stdlib/tablepyxl/tablepyxl.py +130 -130
  95. pyxllib/text/__init__.py +8 -8
  96. pyxllib/text/ahocorasick.py +39 -39
  97. pyxllib/text/airscript.js +744 -0
  98. pyxllib/text/charclasslib.py +121 -109
  99. pyxllib/text/jiebalib.py +267 -264
  100. pyxllib/text/jinjalib.py +32 -0
  101. pyxllib/text/jsa_ai_prompt.md +271 -0
  102. pyxllib/text/jscode.py +922 -767
  103. pyxllib/text/latex/__init__.py +158 -158
  104. pyxllib/text/levenshtein.py +303 -303
  105. pyxllib/text/nestenv.py +1215 -1215
  106. pyxllib/text/newbie.py +300 -288
  107. pyxllib/text/pupil/__init__.py +8 -8
  108. pyxllib/text/pupil/common.py +1121 -1095
  109. pyxllib/text/pupil/xlalign.py +326 -326
  110. pyxllib/text/pycode.py +47 -47
  111. pyxllib/text/specialist/__init__.py +8 -8
  112. pyxllib/text/specialist/common.py +112 -112
  113. pyxllib/text/specialist/ptag.py +186 -186
  114. pyxllib/text/spellchecker.py +172 -172
  115. pyxllib/text/templates/echart_base.html +11 -0
  116. pyxllib/text/templates/highlight_code.html +17 -0
  117. pyxllib/text/templates/latex_editor.html +103 -0
  118. pyxllib/text/vbacode.py +17 -17
  119. pyxllib/text/xmllib.py +747 -685
  120. pyxllib/xl.py +42 -38
  121. pyxllib/xlcv.py +17 -17
  122. pyxllib-0.3.200.dist-info/METADATA +48 -0
  123. pyxllib-0.3.200.dist-info/RECORD +126 -0
  124. {pyxllib-0.3.96.dist-info → pyxllib-0.3.200.dist-info}/WHEEL +1 -2
  125. {pyxllib-0.3.96.dist-info → pyxllib-0.3.200.dist-info/licenses}/LICENSE +190 -190
  126. pyxllib/ext/autogui/__init__.py +0 -8
  127. pyxllib-0.3.96.dist-info/METADATA +0 -51
  128. pyxllib-0.3.96.dist-info/RECORD +0 -333
  129. pyxllib-0.3.96.dist-info/top_level.txt +0 -2
  130. pyxlpr/ai/__init__.py +0 -5
  131. pyxlpr/ai/clientlib.py +0 -1281
  132. pyxlpr/ai/specialist.py +0 -286
  133. pyxlpr/ai/torch_app.py +0 -172
  134. pyxlpr/ai/xlpaddle.py +0 -655
  135. pyxlpr/ai/xltorch.py +0 -705
  136. pyxlpr/data/__init__.py +0 -11
  137. pyxlpr/data/coco.py +0 -1325
  138. pyxlpr/data/datacls.py +0 -365
  139. pyxlpr/data/datasets.py +0 -200
  140. pyxlpr/data/gptlib.py +0 -1291
  141. pyxlpr/data/icdar/__init__.py +0 -96
  142. pyxlpr/data/icdar/deteval.py +0 -377
  143. pyxlpr/data/icdar/icdar2013.py +0 -341
  144. pyxlpr/data/icdar/iou.py +0 -340
  145. pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -463
  146. pyxlpr/data/imtextline.py +0 -473
  147. pyxlpr/data/labelme.py +0 -866
  148. pyxlpr/data/removeline.py +0 -179
  149. pyxlpr/data/specialist.py +0 -57
  150. pyxlpr/eval/__init__.py +0 -85
  151. pyxlpr/paddleocr.py +0 -776
  152. pyxlpr/ppocr/__init__.py +0 -15
  153. pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -226
  154. pyxlpr/ppocr/data/__init__.py +0 -135
  155. pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -26
  156. pyxlpr/ppocr/data/imaug/__init__.py +0 -67
  157. pyxlpr/ppocr/data/imaug/copy_paste.py +0 -170
  158. pyxlpr/ppocr/data/imaug/east_process.py +0 -437
  159. pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -244
  160. pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -114
  161. pyxlpr/ppocr/data/imaug/label_ops.py +0 -789
  162. pyxlpr/ppocr/data/imaug/make_border_map.py +0 -184
  163. pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -106
  164. pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -126
  165. pyxlpr/ppocr/data/imaug/operators.py +0 -433
  166. pyxlpr/ppocr/data/imaug/pg_process.py +0 -906
  167. pyxlpr/ppocr/data/imaug/randaugment.py +0 -143
  168. pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -239
  169. pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -533
  170. pyxlpr/ppocr/data/imaug/sast_process.py +0 -777
  171. pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -17
  172. pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -120
  173. pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -168
  174. pyxlpr/ppocr/data/lmdb_dataset.py +0 -115
  175. pyxlpr/ppocr/data/pgnet_dataset.py +0 -104
  176. pyxlpr/ppocr/data/pubtab_dataset.py +0 -107
  177. pyxlpr/ppocr/data/simple_dataset.py +0 -372
  178. pyxlpr/ppocr/losses/__init__.py +0 -61
  179. pyxlpr/ppocr/losses/ace_loss.py +0 -52
  180. pyxlpr/ppocr/losses/basic_loss.py +0 -135
  181. pyxlpr/ppocr/losses/center_loss.py +0 -88
  182. pyxlpr/ppocr/losses/cls_loss.py +0 -30
  183. pyxlpr/ppocr/losses/combined_loss.py +0 -67
  184. pyxlpr/ppocr/losses/det_basic_loss.py +0 -208
  185. pyxlpr/ppocr/losses/det_db_loss.py +0 -80
  186. pyxlpr/ppocr/losses/det_east_loss.py +0 -63
  187. pyxlpr/ppocr/losses/det_pse_loss.py +0 -149
  188. pyxlpr/ppocr/losses/det_sast_loss.py +0 -121
  189. pyxlpr/ppocr/losses/distillation_loss.py +0 -272
  190. pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -140
  191. pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -113
  192. pyxlpr/ppocr/losses/rec_aster_loss.py +0 -99
  193. pyxlpr/ppocr/losses/rec_att_loss.py +0 -39
  194. pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -44
  195. pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -70
  196. pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -30
  197. pyxlpr/ppocr/losses/rec_sar_loss.py +0 -28
  198. pyxlpr/ppocr/losses/rec_srn_loss.py +0 -47
  199. pyxlpr/ppocr/losses/table_att_loss.py +0 -109
  200. pyxlpr/ppocr/metrics/__init__.py +0 -44
  201. pyxlpr/ppocr/metrics/cls_metric.py +0 -45
  202. pyxlpr/ppocr/metrics/det_metric.py +0 -82
  203. pyxlpr/ppocr/metrics/distillation_metric.py +0 -73
  204. pyxlpr/ppocr/metrics/e2e_metric.py +0 -86
  205. pyxlpr/ppocr/metrics/eval_det_iou.py +0 -274
  206. pyxlpr/ppocr/metrics/kie_metric.py +0 -70
  207. pyxlpr/ppocr/metrics/rec_metric.py +0 -75
  208. pyxlpr/ppocr/metrics/table_metric.py +0 -50
  209. pyxlpr/ppocr/modeling/architectures/__init__.py +0 -32
  210. pyxlpr/ppocr/modeling/architectures/base_model.py +0 -88
  211. pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -60
  212. pyxlpr/ppocr/modeling/backbones/__init__.py +0 -54
  213. pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -268
  214. pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -246
  215. pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -285
  216. pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -265
  217. pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -186
  218. pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -138
  219. pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -258
  220. pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -48
  221. pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -210
  222. pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -143
  223. pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -307
  224. pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -286
  225. pyxlpr/ppocr/modeling/heads/__init__.py +0 -54
  226. pyxlpr/ppocr/modeling/heads/cls_head.py +0 -52
  227. pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -118
  228. pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -121
  229. pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -37
  230. pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -128
  231. pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -253
  232. pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -206
  233. pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -163
  234. pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -393
  235. pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -202
  236. pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -88
  237. pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -826
  238. pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -402
  239. pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -280
  240. pyxlpr/ppocr/modeling/heads/self_attention.py +0 -406
  241. pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -246
  242. pyxlpr/ppocr/modeling/necks/__init__.py +0 -32
  243. pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -111
  244. pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -188
  245. pyxlpr/ppocr/modeling/necks/fpn.py +0 -138
  246. pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -314
  247. pyxlpr/ppocr/modeling/necks/rnn.py +0 -92
  248. pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -284
  249. pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -110
  250. pyxlpr/ppocr/modeling/transforms/__init__.py +0 -28
  251. pyxlpr/ppocr/modeling/transforms/stn.py +0 -135
  252. pyxlpr/ppocr/modeling/transforms/tps.py +0 -308
  253. pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -156
  254. pyxlpr/ppocr/optimizer/__init__.py +0 -61
  255. pyxlpr/ppocr/optimizer/learning_rate.py +0 -228
  256. pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -49
  257. pyxlpr/ppocr/optimizer/optimizer.py +0 -160
  258. pyxlpr/ppocr/optimizer/regularizer.py +0 -52
  259. pyxlpr/ppocr/postprocess/__init__.py +0 -55
  260. pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -33
  261. pyxlpr/ppocr/postprocess/db_postprocess.py +0 -234
  262. pyxlpr/ppocr/postprocess/east_postprocess.py +0 -143
  263. pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -200
  264. pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -52
  265. pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -15
  266. pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -29
  267. pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -14
  268. pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -118
  269. pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -654
  270. pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -355
  271. pyxlpr/ppocr/tools/__init__.py +0 -14
  272. pyxlpr/ppocr/tools/eval.py +0 -83
  273. pyxlpr/ppocr/tools/export_center.py +0 -77
  274. pyxlpr/ppocr/tools/export_model.py +0 -129
  275. pyxlpr/ppocr/tools/infer/predict_cls.py +0 -151
  276. pyxlpr/ppocr/tools/infer/predict_det.py +0 -300
  277. pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -169
  278. pyxlpr/ppocr/tools/infer/predict_rec.py +0 -414
  279. pyxlpr/ppocr/tools/infer/predict_system.py +0 -204
  280. pyxlpr/ppocr/tools/infer/utility.py +0 -629
  281. pyxlpr/ppocr/tools/infer_cls.py +0 -83
  282. pyxlpr/ppocr/tools/infer_det.py +0 -134
  283. pyxlpr/ppocr/tools/infer_e2e.py +0 -122
  284. pyxlpr/ppocr/tools/infer_kie.py +0 -153
  285. pyxlpr/ppocr/tools/infer_rec.py +0 -146
  286. pyxlpr/ppocr/tools/infer_table.py +0 -107
  287. pyxlpr/ppocr/tools/program.py +0 -596
  288. pyxlpr/ppocr/tools/test_hubserving.py +0 -117
  289. pyxlpr/ppocr/tools/train.py +0 -163
  290. pyxlpr/ppocr/tools/xlprog.py +0 -748
  291. pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -94
  292. pyxlpr/ppocr/utils/__init__.py +0 -24
  293. pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -117
  294. pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -162
  295. pyxlpr/ppocr/utils/dict/be_dict.txt +0 -145
  296. pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -140
  297. pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -8421
  298. pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -163
  299. pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -167
  300. pyxlpr/ppocr/utils/dict/en_dict.txt +0 -63
  301. pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -136
  302. pyxlpr/ppocr/utils/dict/french_dict.txt +0 -136
  303. pyxlpr/ppocr/utils/dict/german_dict.txt +0 -143
  304. pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -162
  305. pyxlpr/ppocr/utils/dict/it_dict.txt +0 -118
  306. pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -4399
  307. pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -153
  308. pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -3688
  309. pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -185
  310. pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -153
  311. pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -153
  312. pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -96
  313. pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -130
  314. pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -91
  315. pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -134
  316. pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -125
  317. pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -128
  318. pyxlpr/ppocr/utils/dict/table_dict.txt +0 -277
  319. pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -2759
  320. pyxlpr/ppocr/utils/dict/te_dict.txt +0 -151
  321. pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -114
  322. pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -142
  323. pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -137
  324. pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -110
  325. pyxlpr/ppocr/utils/dict90.txt +0 -90
  326. pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -574
  327. pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -83
  328. pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -87
  329. pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -457
  330. pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -592
  331. pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -162
  332. pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -162
  333. pyxlpr/ppocr/utils/en_dict.txt +0 -95
  334. pyxlpr/ppocr/utils/gen_label.py +0 -81
  335. pyxlpr/ppocr/utils/ic15_dict.txt +0 -36
  336. pyxlpr/ppocr/utils/iou.py +0 -54
  337. pyxlpr/ppocr/utils/logging.py +0 -69
  338. pyxlpr/ppocr/utils/network.py +0 -84
  339. pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -6623
  340. pyxlpr/ppocr/utils/profiler.py +0 -110
  341. pyxlpr/ppocr/utils/save_load.py +0 -150
  342. pyxlpr/ppocr/utils/stats.py +0 -72
  343. pyxlpr/ppocr/utils/utility.py +0 -80
  344. pyxlpr/ppstructure/__init__.py +0 -13
  345. pyxlpr/ppstructure/predict_system.py +0 -187
  346. pyxlpr/ppstructure/table/__init__.py +0 -13
  347. pyxlpr/ppstructure/table/eval_table.py +0 -72
  348. pyxlpr/ppstructure/table/matcher.py +0 -192
  349. pyxlpr/ppstructure/table/predict_structure.py +0 -136
  350. pyxlpr/ppstructure/table/predict_table.py +0 -221
  351. pyxlpr/ppstructure/table/table_metric/__init__.py +0 -16
  352. pyxlpr/ppstructure/table/table_metric/parallel.py +0 -51
  353. pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -247
  354. pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -13
  355. pyxlpr/ppstructure/table/tablepyxl/style.py +0 -283
  356. pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -118
  357. pyxlpr/ppstructure/utility.py +0 -71
  358. pyxlpr/xlai.py +0 -10
@@ -1,186 +1,193 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- # @Author : 陈坤泽
4
- # @Email : 877362867@qq.com
5
- # @Date : 2021/06/09 11:02
6
-
7
- import logging
8
- import os
9
- import shutil
10
- from typing import Callable, List, Optional
11
- from urllib import request
12
-
13
- import requests
14
- from bs4 import BeautifulSoup
15
-
16
- from pyxllib.file.specialist import File, Dir
17
-
18
-
19
- def download_file(url, fn=None, *, encoding=None, if_exists=None, ext=None, temp=False):
20
- """ 类似writefile,只是源数据是从url里下载
21
-
22
- :param url: 数据下载链接
23
- :param fn: 保存位置,会从url智能提取文件名
24
- :param if_exists: 详见 File.write 参数解释
25
- :para temp: 将文件写到临时文件夹
26
- :return:
27
- """
28
- if not fn: fn = url.split('/')[-1]
29
- root = Dir.TEMP if temp else None
30
- fn = File(fn, root, suffix=ext).write(requests.get(url).content,
31
- encoding=encoding, if_exists=if_exists, etag=(not fn))
32
- return fn.to_str()
33
-
34
-
35
- def read_from_ubuntu(url):
36
- """从paste.ubuntu.com获取数据"""
37
- if isinstance(url, int): # 允许输入一个数字ID来获取网页内容
38
- url = 'https://paste.ubuntu.com/' + str(url) + '/'
39
- r = requests.get(url)
40
- soup = BeautifulSoup(r.text, 'lxml')
41
- content = soup.find_all(name='div', attrs={'class': 'paste'})[2]
42
- return content.get_text()
43
-
44
-
45
- def download(
46
- url: str, dir: str, *, filename: Optional[str] = None, progress: bool = True
47
- ) -> str:
48
- """ 取自fvcore:Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
49
-
50
- Download a file from a given URL to a directory. If file exists, will not
51
- overwrite the existing file.
52
-
53
- Args:
54
- url (str):
55
- dir (str): the directory to download the file
56
- filename (str or None): the basename to save the file.
57
- Will use the name in the URL if not given.
58
- progress (bool): whether to use tqdm to draw a progress bar.
59
-
60
- Returns:
61
- str: the path to the downloaded file or the existing one.
62
- """
63
- os.makedirs(dir, exist_ok=True)
64
- if filename is None:
65
- filename = url.split("/")[-1]
66
- assert len(filename), "Cannot obtain filename from url {}".format(url)
67
- fpath = os.path.join(dir, filename)
68
- logger = logging.getLogger(__name__)
69
-
70
- if os.path.isfile(fpath):
71
- logger.info("File {} exists! Skipping download.".format(filename))
72
- return fpath
73
-
74
- tmp = fpath + ".tmp" # download to a tmp file first, to be more atomic.
75
- try:
76
- logger.info("Downloading from {} ...".format(url))
77
- if progress:
78
- import tqdm
79
-
80
- def hook(t: tqdm.tqdm) -> Callable[[int, int, Optional[int]], None]:
81
- last_b: List[int] = [0]
82
-
83
- def inner(b: int, bsize: int, tsize: Optional[int] = None) -> None:
84
- if tsize is not None:
85
- t.total = tsize
86
- t.update((b - last_b[0]) * bsize) # type: ignore
87
- last_b[0] = b
88
-
89
- return inner
90
-
91
- with tqdm.tqdm( # type: ignore
92
- unit="B", unit_scale=True, miniters=1, desc=filename, leave=True
93
- ) as t:
94
- tmp, _ = request.urlretrieve(url, filename=tmp, reporthook=hook(t))
95
-
96
- else:
97
- tmp, _ = request.urlretrieve(url, filename=tmp)
98
- statinfo = os.stat(tmp)
99
- size = statinfo.st_size
100
- if size == 0:
101
- raise IOError("Downloaded an empty file from {}!".format(url))
102
- # download to tmp first and move to fpath, to make this function more
103
- # atomic.
104
- shutil.move(tmp, fpath)
105
- except IOError:
106
- logger.error("Failed to download {}".format(url))
107
- raise
108
- finally:
109
- try:
110
- os.unlink(tmp)
111
- except IOError:
112
- pass
113
-
114
- logger.info("Successfully downloaded " + fpath + ". " + str(size) + " bytes.")
115
- return fpath
116
-
117
-
118
- def ensure_localfile(localfile, from_url, *, if_exists=None, progress=True):
119
- """ 判断本地文件 localfile 是否存在,如果不存在,自动从指定的 from_url 下载下来
120
-
121
- TODO 增加 md5校验、自动解压 等功能
122
-
123
- :param if_exists: 参数含义见 file.exist_preprcs
124
- 使用 'replace' 可以强制下载重置文件
125
- :param progress: 是否显示下载进度
126
-
127
- >> ensure_localfile('ufo.csv', r'https://gitee.com/code4101/TestData/raw/master/ufo.csv')
128
- """
129
- path, file = str(localfile), File(localfile)
130
-
131
- if file.exist_preprcs(if_exists):
132
- dirname, name = os.path.split(path)
133
- download(from_url, dirname, filename=name, progress=progress)
134
- return localfile
135
-
136
-
137
- def ensure_localdir(localdir, from_url, *, if_exists=None, progress=True, wrap=0):
138
- """ 判断本地目录 localdir 是否存在,如果不存在,自动从指定的 from_url 下载下来
139
-
140
- :param from_url: 相比 ensure_localfile,这个链接一般是一个压缩包,下载到本地后要解压到目标目录
141
- :param wrap:
142
- wrap=1,如果压缩包里的文件有多个,可以多加一层目录包装起来
143
- wrap<0,有的从url下载的压缩包,还会自带一层目录,为了避免冗余,要去掉
144
- """
145
- from pyxllib.file.packlib import unpack_archive
146
- d = Dir(localdir)
147
- if not d.is_dir():
148
- if d.exist_preprcs(if_exists):
149
- pack_file = download(from_url, d.parent, progress=progress)
150
- unpack_archive(pack_file, localdir, wrap=wrap)
151
- os.remove(pack_file)
152
-
153
- return localdir
154
-
155
-
156
- def get_font_file(name):
157
- """ 获得指定名称的字体文件
158
-
159
- :param name: 记得要写后缀,例如 "simfang.ttf"
160
- simfang.ttf,仿宋
161
- msyh.ttf,微软雅黑
162
- """
163
- from pyxllib.file.specialist import ensure_localfile, XlPath
164
-
165
- # 0 当前目录有,则优先返回当前目录的文件
166
- p = XlPath(name)
167
- if p.is_file():
168
- return p
169
-
170
- # 1 windows直接找系统的字体目录
171
- font_file = XlPath(f'C:/Windows/Fonts/{name}')
172
- if font_file.is_file():
173
- return font_file
174
-
175
- # 2 否则下载到.xlpr/fonts
176
- # 注意不能下载到C:/Windows/Fonts,会遇到权限问题,报错
177
- font_file = XlPath.userdir() / f'.xlpr/fonts/{name}'
178
- # 去github上paddleocr项目下载
179
- # from_url = f'https://raw.githubusercontent.com/code4101/data1/main/fonts/{name}'
180
- from_url = f'https://xmutpriu.com/download/fonts/{name}'
181
- try:
182
- ensure_localfile(font_file, from_url)
183
- except TimeoutError as e:
184
- raise TimeoutError(f'{font_file} 下载失败:{from_url}')
185
-
186
- return font_file
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # @Author : 陈坤泽
4
+ # @Email : 877362867@qq.com
5
+ # @Date : 2021/06/09 11:02
6
+
7
+ import logging
8
+ import os
9
+ import shutil
10
+ from typing import Callable, List, Optional
11
+ from urllib import request
12
+
13
+ import requests
14
+ from bs4 import BeautifulSoup
15
+
16
+ from pyxllib.file.specialist import File, Dir, refinepath
17
+
18
+
19
+ def download_file(url, fn=None, *, encoding=None, if_exists=None, ext=None, temp=False):
20
+ r""" 类似writefile,只是源数据是从url里下载
21
+
22
+ :param url: 数据下载链接
23
+ :param fn: 保存位置,会从url智能提取文件名
24
+ :param if_exists: 详见 File.write 参数解释
25
+ :para temp: 将文件写到临时文件夹
26
+ :return:
27
+
28
+ >> download_file(image_url) # 保存在当前工作目录下
29
+ D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg
30
+ >> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png") # 指定路径
31
+ D:/home/chenkunze/slns/xlproject/xlsln/ckz2024/a.png
32
+ >> download_file(image_url, fn=r"D:/home/chenkunze/slns/xlproject/xlsln/ckz2024") # 暂不支持目录
33
+ ValueError: 不能用目录初始化一个File对象 D:\home\chenkunze\slns\xlproject\xlsln\ckz2023
34
+ """
35
+ if not fn: fn = refinepath(url.split('/')[-1])[-80:] # 这里故意截断文件名最长80个字符
36
+ root = Dir.TEMP if temp else None
37
+ fn = File(fn, root, suffix=ext).write(requests.get(url).content,
38
+ encoding=encoding, if_exists=if_exists, etag=(not fn))
39
+ return fn.to_str()
40
+
41
+
42
+ def read_from_ubuntu(url):
43
+ """从paste.ubuntu.com获取数据"""
44
+ if isinstance(url, int): # 允许输入一个数字ID来获取网页内容
45
+ url = 'https://paste.ubuntu.com/' + str(url) + '/'
46
+ r = requests.get(url)
47
+ soup = BeautifulSoup(r.text, 'lxml')
48
+ content = soup.find_all(name='div', attrs={'class': 'paste'})[2]
49
+ return content.get_text()
50
+
51
+
52
+ def download(
53
+ url: str, dir: str, *, filename: Optional[str] = None, progress: bool = True
54
+ ) -> str:
55
+ """ 取自fvcore:Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
56
+
57
+ Download a file from a given URL to a directory. If file exists, will not
58
+ overwrite the existing file.
59
+
60
+ Args:
61
+ url (str):
62
+ dir (str): the directory to download the file
63
+ filename (str or None): the basename to save the file.
64
+ Will use the name in the URL if not given.
65
+ progress (bool): whether to use tqdm to draw a progress bar.
66
+
67
+ Returns:
68
+ str: the path to the downloaded file or the existing one.
69
+ """
70
+ os.makedirs(dir, exist_ok=True)
71
+ if filename is None:
72
+ filename = url.split("/")[-1]
73
+ assert len(filename), "Cannot obtain filename from url {}".format(url)
74
+ fpath = os.path.join(dir, filename)
75
+ logger = logging.getLogger(__name__)
76
+
77
+ if os.path.isfile(fpath):
78
+ logger.info("File {} exists! Skipping download.".format(filename))
79
+ return fpath
80
+
81
+ tmp = fpath + ".tmp" # download to a tmp file first, to be more atomic.
82
+ try:
83
+ logger.info("Downloading from {} ...".format(url))
84
+ if progress:
85
+ import tqdm
86
+
87
+ def hook(t: tqdm.tqdm) -> Callable[[int, int, Optional[int]], None]:
88
+ last_b: List[int] = [0]
89
+
90
+ def inner(b: int, bsize: int, tsize: Optional[int] = None) -> None:
91
+ if tsize is not None:
92
+ t.total = tsize
93
+ t.update((b - last_b[0]) * bsize) # type: ignore
94
+ last_b[0] = b
95
+
96
+ return inner
97
+
98
+ with tqdm.tqdm( # type: ignore
99
+ unit="B", unit_scale=True, miniters=1, desc=filename, leave=True
100
+ ) as t:
101
+ tmp, _ = request.urlretrieve(url, filename=tmp, reporthook=hook(t))
102
+
103
+ else:
104
+ tmp, _ = request.urlretrieve(url, filename=tmp)
105
+ statinfo = os.stat(tmp)
106
+ size = statinfo.st_size
107
+ if size == 0:
108
+ raise IOError("Downloaded an empty file from {}!".format(url))
109
+ # download to tmp first and move to fpath, to make this function more
110
+ # atomic.
111
+ shutil.move(tmp, fpath)
112
+ except IOError:
113
+ logger.error("Failed to download {}".format(url))
114
+ raise
115
+ finally:
116
+ try:
117
+ os.unlink(tmp)
118
+ except IOError:
119
+ pass
120
+
121
+ logger.info("Successfully downloaded " + fpath + ". " + str(size) + " bytes.")
122
+ return fpath
123
+
124
+
125
+ def ensure_localfile(localfile, from_url, *, if_exists=None, progress=True):
126
+ """ 判断本地文件 localfile 是否存在,如果不存在,自动从指定的 from_url 下载下来
127
+
128
+ TODO 增加 md5校验、自动解压 等功能
129
+
130
+ :param if_exists: 参数含义见 file.exist_preprcs
131
+ 使用 'replace' 可以强制下载重置文件
132
+ :param progress: 是否显示下载进度
133
+
134
+ >> ensure_localfile('ufo.csv', r'https://gitee.com/code4101/TestData/raw/master/ufo.csv')
135
+ """
136
+ path, file = str(localfile), File(localfile)
137
+
138
+ if file.exist_preprcs(if_exists):
139
+ dirname, name = os.path.split(path)
140
+ download(from_url, dirname, filename=name, progress=progress)
141
+ return localfile
142
+
143
+
144
+ def ensure_localdir(localdir, from_url, *, if_exists=None, progress=True, wrap=0):
145
+ """ 判断本地目录 localdir 是否存在,如果不存在,自动从指定的 from_url 下载下来
146
+
147
+ :param from_url: 相比 ensure_localfile,这个链接一般是一个压缩包,下载到本地后要解压到目标目录
148
+ :param wrap:
149
+ wrap=1,如果压缩包里的文件有多个,可以多加一层目录包装起来
150
+ wrap<0,有的从url下载的压缩包,还会自带一层目录,为了避免冗余,要去掉
151
+ """
152
+ from pyxllib.file.packlib import unpack_archive
153
+ d = Dir(localdir)
154
+ if not d.is_dir():
155
+ if d.exist_preprcs(if_exists):
156
+ pack_file = download(from_url, d.parent, progress=progress)
157
+ unpack_archive(pack_file, localdir, wrap=wrap)
158
+ os.remove(pack_file)
159
+
160
+ return localdir
161
+
162
+
163
+ def get_font_file(name):
164
+ """ 获得指定名称的字体文件
165
+
166
+ :param name: 记得要写后缀,例如 "simfang.ttf"
167
+ simfang.ttf,仿宋
168
+ msyh.ttf,微软雅黑
169
+ """
170
+ from pyxllib.file.specialist import ensure_localfile, XlPath
171
+
172
+ # 0 当前目录有,则优先返回当前目录的文件
173
+ p = XlPath(name)
174
+ if p.is_file():
175
+ return p
176
+
177
+ # 1 windows直接找系统的字体目录
178
+ font_file = XlPath(f'C:/Windows/Fonts/{name}')
179
+ if font_file.is_file():
180
+ return font_file
181
+
182
+ # 2 否则下载到.xlpr/fonts
183
+ # 注意不能下载到C:/Windows/Fonts,会遇到权限问题,报错
184
+ font_file = XlPath.userdir() / f'.xlpr/fonts/{name}'
185
+ # 去github上paddleocr项目下载
186
+ # from_url = f'https://raw.githubusercontent.com/code4101/data1/main/fonts/{name}'
187
+ from_url = f'https://xmutpriu.com/download/fonts/{name}'
188
+ try:
189
+ ensure_localfile(font_file, from_url)
190
+ except TimeoutError as e:
191
+ raise TimeoutError(f'{font_file} 下载失败:{from_url}')
192
+
193
+ return font_file