magic-pdf 1.2.2__py3-none-any.whl → 1.3.0__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 (101) hide show
  1. magic_pdf/data/batch_build_dataset.py +156 -0
  2. magic_pdf/data/dataset.py +44 -24
  3. magic_pdf/data/utils.py +108 -9
  4. magic_pdf/dict2md/ocr_mkcontent.py +4 -3
  5. magic_pdf/libs/pdf_image_tools.py +11 -6
  6. magic_pdf/libs/performance_stats.py +12 -1
  7. magic_pdf/libs/version.py +1 -1
  8. magic_pdf/model/batch_analyze.py +175 -201
  9. magic_pdf/model/doc_analyze_by_custom_model.py +137 -92
  10. magic_pdf/model/pdf_extract_kit.py +5 -38
  11. magic_pdf/model/sub_modules/language_detection/utils.py +2 -4
  12. magic_pdf/model/sub_modules/language_detection/yolov11/YOLOv11.py +24 -19
  13. magic_pdf/model/sub_modules/layout/doclayout_yolo/DocLayoutYOLO.py +3 -1
  14. magic_pdf/model/sub_modules/mfd/yolov8/YOLOv8.py +3 -1
  15. magic_pdf/model/sub_modules/mfr/unimernet/Unimernet.py +31 -102
  16. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/__init__.py +13 -0
  17. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/modeling_unimernet.py +189 -0
  18. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_mbart/__init__.py +8 -0
  19. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_mbart/configuration_unimer_mbart.py +163 -0
  20. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_mbart/modeling_unimer_mbart.py +2351 -0
  21. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_swin/__init__.py +9 -0
  22. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_swin/configuration_unimer_swin.py +132 -0
  23. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_swin/image_processing_unimer_swin.py +132 -0
  24. magic_pdf/model/sub_modules/mfr/unimernet/unimernet_hf/unimer_swin/modeling_unimer_swin.py +1084 -0
  25. magic_pdf/model/sub_modules/model_init.py +50 -37
  26. magic_pdf/model/sub_modules/model_utils.py +17 -11
  27. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/__init__.py +1 -0
  28. magic_pdf/model/sub_modules/ocr/{paddleocr → paddleocr2pytorch}/ocr_utils.py +102 -97
  29. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorch_paddle.py +193 -0
  30. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/base_ocr_v20.py +39 -0
  31. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/data/__init__.py +8 -0
  32. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/data/imaug/__init__.py +48 -0
  33. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/data/imaug/operators.py +418 -0
  34. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/architectures/__init__.py +25 -0
  35. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/architectures/base_model.py +105 -0
  36. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/__init__.py +62 -0
  37. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/det_mobilenet_v3.py +269 -0
  38. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/rec_hgnet.py +290 -0
  39. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/rec_lcnetv3.py +516 -0
  40. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/rec_mobilenet_v3.py +136 -0
  41. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/rec_mv1_enhance.py +234 -0
  42. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/backbones/rec_svtrnet.py +638 -0
  43. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/common.py +76 -0
  44. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/heads/__init__.py +43 -0
  45. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/heads/cls_head.py +23 -0
  46. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/heads/det_db_head.py +109 -0
  47. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/heads/rec_ctc_head.py +54 -0
  48. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/heads/rec_multi_head.py +58 -0
  49. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/necks/__init__.py +29 -0
  50. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/necks/db_fpn.py +456 -0
  51. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/necks/intracl.py +117 -0
  52. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/modeling/necks/rnn.py +228 -0
  53. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/postprocess/__init__.py +33 -0
  54. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/postprocess/cls_postprocess.py +20 -0
  55. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/postprocess/db_postprocess.py +179 -0
  56. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/postprocess/rec_postprocess.py +690 -0
  57. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/__init__.py +0 -0
  58. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/arch_config.yaml +383 -0
  59. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/arabic_dict.txt +162 -0
  60. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/chinese_cht_dict.txt +8421 -0
  61. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/cyrillic_dict.txt +163 -0
  62. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/devanagari_dict.txt +167 -0
  63. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/en_dict.txt +95 -0
  64. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/japan_dict.txt +4399 -0
  65. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/ka_dict.txt +153 -0
  66. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/korean_dict.txt +3688 -0
  67. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/latin_dict.txt +185 -0
  68. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/ppocr_keys_v1.txt +6623 -0
  69. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/ta_dict.txt +128 -0
  70. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/dict/te_dict.txt +151 -0
  71. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/pytorchocr/utils/resources/models_config.yml +49 -0
  72. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/__init__.py +1 -0
  73. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/__init__.py +1 -0
  74. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/predict_cls.py +106 -0
  75. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/predict_det.py +217 -0
  76. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/predict_rec.py +440 -0
  77. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/predict_system.py +104 -0
  78. magic_pdf/model/sub_modules/ocr/paddleocr2pytorch/tools/infer/pytorchocr_utility.py +227 -0
  79. magic_pdf/model/sub_modules/table/rapidtable/rapid_table.py +10 -18
  80. magic_pdf/pdf_parse_union_core_v2.py +112 -74
  81. magic_pdf/pre_proc/ocr_dict_merge.py +9 -1
  82. magic_pdf/pre_proc/ocr_span_list_modify.py +51 -0
  83. magic_pdf/resources/model_config/model_configs.yaml +1 -1
  84. magic_pdf/tools/cli.py +30 -12
  85. magic_pdf/tools/common.py +90 -12
  86. {magic_pdf-1.2.2.dist-info → magic_pdf-1.3.0.dist-info}/METADATA +50 -40
  87. magic_pdf-1.3.0.dist-info/RECORD +202 -0
  88. magic_pdf/model/sub_modules/ocr/paddleocr/ppocr_273_mod.py +0 -204
  89. magic_pdf/model/sub_modules/ocr/paddleocr/ppocr_291_mod.py +0 -213
  90. magic_pdf/model/sub_modules/table/structeqtable/struct_eqtable.py +0 -37
  91. magic_pdf/model/sub_modules/table/tablemaster/tablemaster_paddle.py +0 -71
  92. magic_pdf/resources/model_config/UniMERNet/demo.yaml +0 -46
  93. magic_pdf/resources/model_config/layoutlmv3/layoutlmv3_base_inference.yaml +0 -351
  94. magic_pdf-1.2.2.dist-info/RECORD +0 -147
  95. /magic_pdf/model/sub_modules/{ocr/paddleocr/__init__.py → mfr/unimernet/unimernet_hf/unimer_mbart/tokenization_unimer_mbart.py} +0 -0
  96. /magic_pdf/model/sub_modules/{table/structeqtable → ocr/paddleocr2pytorch/pytorchocr}/__init__.py +0 -0
  97. /magic_pdf/model/sub_modules/{table/tablemaster → ocr/paddleocr2pytorch/pytorchocr/modeling}/__init__.py +0 -0
  98. {magic_pdf-1.2.2.dist-info → magic_pdf-1.3.0.dist-info}/LICENSE.md +0 -0
  99. {magic_pdf-1.2.2.dist-info → magic_pdf-1.3.0.dist-info}/WHEEL +0 -0
  100. {magic_pdf-1.2.2.dist-info → magic_pdf-1.3.0.dist-info}/entry_points.txt +0 -0
  101. {magic_pdf-1.2.2.dist-info → magic_pdf-1.3.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,234 @@
1
+ import os, sys
2
+ import torch
3
+ import torch.nn as nn
4
+ import torch.nn.functional as F
5
+
6
+ from ..common import Activation
7
+
8
+
9
+ class ConvBNLayer(nn.Module):
10
+ def __init__(self,
11
+ num_channels,
12
+ filter_size,
13
+ num_filters,
14
+ stride,
15
+ padding,
16
+ channels=None,
17
+ num_groups=1,
18
+ act='hard_swish'):
19
+ super(ConvBNLayer, self).__init__()
20
+ self.act = act
21
+ self._conv = nn.Conv2d(
22
+ in_channels=num_channels,
23
+ out_channels=num_filters,
24
+ kernel_size=filter_size,
25
+ stride=stride,
26
+ padding=padding,
27
+ groups=num_groups,
28
+ bias=False)
29
+
30
+ self._batch_norm = nn.BatchNorm2d(
31
+ num_filters,
32
+ )
33
+ if self.act is not None:
34
+ self._act = Activation(act_type=act, inplace=True)
35
+
36
+ def forward(self, inputs):
37
+ y = self._conv(inputs)
38
+ y = self._batch_norm(y)
39
+ if self.act is not None:
40
+ y = self._act(y)
41
+ return y
42
+
43
+
44
+ class DepthwiseSeparable(nn.Module):
45
+ def __init__(self,
46
+ num_channels,
47
+ num_filters1,
48
+ num_filters2,
49
+ num_groups,
50
+ stride,
51
+ scale,
52
+ dw_size=3,
53
+ padding=1,
54
+ use_se=False):
55
+ super(DepthwiseSeparable, self).__init__()
56
+ self.use_se = use_se
57
+ self._depthwise_conv = ConvBNLayer(
58
+ num_channels=num_channels,
59
+ num_filters=int(num_filters1 * scale),
60
+ filter_size=dw_size,
61
+ stride=stride,
62
+ padding=padding,
63
+ num_groups=int(num_groups * scale))
64
+ if use_se:
65
+ self._se = SEModule(int(num_filters1 * scale))
66
+ self._pointwise_conv = ConvBNLayer(
67
+ num_channels=int(num_filters1 * scale),
68
+ filter_size=1,
69
+ num_filters=int(num_filters2 * scale),
70
+ stride=1,
71
+ padding=0)
72
+
73
+ def forward(self, inputs):
74
+ y = self._depthwise_conv(inputs)
75
+ if self.use_se:
76
+ y = self._se(y)
77
+ y = self._pointwise_conv(y)
78
+ return y
79
+
80
+
81
+ class MobileNetV1Enhance(nn.Module):
82
+ def __init__(self,
83
+ in_channels=3,
84
+ scale=0.5,
85
+ last_conv_stride=1,
86
+ last_pool_type='max',
87
+ **kwargs):
88
+ super().__init__()
89
+ self.scale = scale
90
+ self.block_list = []
91
+
92
+ self.conv1 = ConvBNLayer(
93
+ num_channels=in_channels,
94
+ filter_size=3,
95
+ channels=3,
96
+ num_filters=int(32 * scale),
97
+ stride=2,
98
+ padding=1)
99
+
100
+ conv2_1 = DepthwiseSeparable(
101
+ num_channels=int(32 * scale),
102
+ num_filters1=32,
103
+ num_filters2=64,
104
+ num_groups=32,
105
+ stride=1,
106
+ scale=scale)
107
+ self.block_list.append(conv2_1)
108
+
109
+ conv2_2 = DepthwiseSeparable(
110
+ num_channels=int(64 * scale),
111
+ num_filters1=64,
112
+ num_filters2=128,
113
+ num_groups=64,
114
+ stride=1,
115
+ scale=scale)
116
+ self.block_list.append(conv2_2)
117
+
118
+ conv3_1 = DepthwiseSeparable(
119
+ num_channels=int(128 * scale),
120
+ num_filters1=128,
121
+ num_filters2=128,
122
+ num_groups=128,
123
+ stride=1,
124
+ scale=scale)
125
+ self.block_list.append(conv3_1)
126
+
127
+ conv3_2 = DepthwiseSeparable(
128
+ num_channels=int(128 * scale),
129
+ num_filters1=128,
130
+ num_filters2=256,
131
+ num_groups=128,
132
+ stride=(2, 1),
133
+ scale=scale)
134
+ self.block_list.append(conv3_2)
135
+
136
+ conv4_1 = DepthwiseSeparable(
137
+ num_channels=int(256 * scale),
138
+ num_filters1=256,
139
+ num_filters2=256,
140
+ num_groups=256,
141
+ stride=1,
142
+ scale=scale)
143
+ self.block_list.append(conv4_1)
144
+
145
+ conv4_2 = DepthwiseSeparable(
146
+ num_channels=int(256 * scale),
147
+ num_filters1=256,
148
+ num_filters2=512,
149
+ num_groups=256,
150
+ stride=(2, 1),
151
+ scale=scale)
152
+ self.block_list.append(conv4_2)
153
+
154
+ for _ in range(5):
155
+ conv5 = DepthwiseSeparable(
156
+ num_channels=int(512 * scale),
157
+ num_filters1=512,
158
+ num_filters2=512,
159
+ num_groups=512,
160
+ stride=1,
161
+ dw_size=5,
162
+ padding=2,
163
+ scale=scale,
164
+ use_se=False)
165
+ self.block_list.append(conv5)
166
+
167
+ conv5_6 = DepthwiseSeparable(
168
+ num_channels=int(512 * scale),
169
+ num_filters1=512,
170
+ num_filters2=1024,
171
+ num_groups=512,
172
+ stride=(2, 1),
173
+ dw_size=5,
174
+ padding=2,
175
+ scale=scale,
176
+ use_se=True)
177
+ self.block_list.append(conv5_6)
178
+
179
+ conv6 = DepthwiseSeparable(
180
+ num_channels=int(1024 * scale),
181
+ num_filters1=1024,
182
+ num_filters2=1024,
183
+ num_groups=1024,
184
+ stride=last_conv_stride,
185
+ dw_size=5,
186
+ padding=2,
187
+ use_se=True,
188
+ scale=scale)
189
+ self.block_list.append(conv6)
190
+
191
+ self.block_list = nn.Sequential(*self.block_list)
192
+ if last_pool_type == 'avg':
193
+ self.pool = nn.AvgPool2d(kernel_size=2, stride=2, padding=0)
194
+ else:
195
+ self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
196
+ self.out_channels = int(1024 * scale)
197
+
198
+ def forward(self, inputs):
199
+ y = self.conv1(inputs)
200
+ y = self.block_list(y)
201
+ y = self.pool(y)
202
+ return y
203
+
204
+ def hardsigmoid(x):
205
+ return F.relu6(x + 3., inplace=True) / 6.
206
+
207
+ class SEModule(nn.Module):
208
+ def __init__(self, channel, reduction=4):
209
+ super(SEModule, self).__init__()
210
+ self.avg_pool = nn.AdaptiveAvgPool2d(1)
211
+ self.conv1 = nn.Conv2d(
212
+ in_channels=channel,
213
+ out_channels=channel // reduction,
214
+ kernel_size=1,
215
+ stride=1,
216
+ padding=0,
217
+ bias=True)
218
+ self.conv2 = nn.Conv2d(
219
+ in_channels=channel // reduction,
220
+ out_channels=channel,
221
+ kernel_size=1,
222
+ stride=1,
223
+ padding=0,
224
+ bias=True)
225
+
226
+ def forward(self, inputs):
227
+ outputs = self.avg_pool(inputs)
228
+ outputs = self.conv1(outputs)
229
+ outputs = F.relu(outputs)
230
+ outputs = self.conv2(outputs)
231
+ outputs = hardsigmoid(outputs)
232
+ x = torch.mul(inputs, outputs)
233
+
234
+ return x