deepdoctection 0.42.1__py3-none-any.whl → 0.43__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.

Potentially problematic release.


This version of deepdoctection might be problematic. Click here for more details.

Files changed (124) hide show
  1. deepdoctection/__init__.py +2 -1
  2. deepdoctection/analyzer/__init__.py +2 -1
  3. deepdoctection/analyzer/config.py +904 -0
  4. deepdoctection/analyzer/dd.py +36 -62
  5. deepdoctection/analyzer/factory.py +311 -141
  6. deepdoctection/configs/conf_dd_one.yaml +100 -44
  7. deepdoctection/configs/profiles.jsonl +32 -0
  8. deepdoctection/dataflow/__init__.py +9 -6
  9. deepdoctection/dataflow/base.py +33 -15
  10. deepdoctection/dataflow/common.py +96 -75
  11. deepdoctection/dataflow/custom.py +36 -29
  12. deepdoctection/dataflow/custom_serialize.py +135 -91
  13. deepdoctection/dataflow/parallel_map.py +33 -31
  14. deepdoctection/dataflow/serialize.py +15 -10
  15. deepdoctection/dataflow/stats.py +41 -28
  16. deepdoctection/datapoint/__init__.py +4 -6
  17. deepdoctection/datapoint/annotation.py +104 -66
  18. deepdoctection/datapoint/box.py +190 -130
  19. deepdoctection/datapoint/convert.py +66 -39
  20. deepdoctection/datapoint/image.py +151 -95
  21. deepdoctection/datapoint/view.py +383 -236
  22. deepdoctection/datasets/__init__.py +2 -6
  23. deepdoctection/datasets/adapter.py +11 -11
  24. deepdoctection/datasets/base.py +118 -81
  25. deepdoctection/datasets/dataflow_builder.py +18 -12
  26. deepdoctection/datasets/info.py +76 -57
  27. deepdoctection/datasets/instances/__init__.py +6 -2
  28. deepdoctection/datasets/instances/doclaynet.py +17 -14
  29. deepdoctection/datasets/instances/fintabnet.py +16 -22
  30. deepdoctection/datasets/instances/funsd.py +11 -6
  31. deepdoctection/datasets/instances/iiitar13k.py +9 -9
  32. deepdoctection/datasets/instances/layouttest.py +9 -9
  33. deepdoctection/datasets/instances/publaynet.py +9 -9
  34. deepdoctection/datasets/instances/pubtables1m.py +13 -13
  35. deepdoctection/datasets/instances/pubtabnet.py +13 -15
  36. deepdoctection/datasets/instances/rvlcdip.py +8 -8
  37. deepdoctection/datasets/instances/xfund.py +11 -9
  38. deepdoctection/datasets/registry.py +18 -11
  39. deepdoctection/datasets/save.py +12 -11
  40. deepdoctection/eval/__init__.py +3 -2
  41. deepdoctection/eval/accmetric.py +72 -52
  42. deepdoctection/eval/base.py +29 -10
  43. deepdoctection/eval/cocometric.py +14 -12
  44. deepdoctection/eval/eval.py +56 -41
  45. deepdoctection/eval/registry.py +6 -3
  46. deepdoctection/eval/tedsmetric.py +24 -9
  47. deepdoctection/eval/tp_eval_callback.py +13 -12
  48. deepdoctection/extern/__init__.py +1 -1
  49. deepdoctection/extern/base.py +176 -97
  50. deepdoctection/extern/d2detect.py +127 -92
  51. deepdoctection/extern/deskew.py +19 -10
  52. deepdoctection/extern/doctrocr.py +157 -106
  53. deepdoctection/extern/fastlang.py +25 -17
  54. deepdoctection/extern/hfdetr.py +137 -60
  55. deepdoctection/extern/hflayoutlm.py +329 -248
  56. deepdoctection/extern/hflm.py +67 -33
  57. deepdoctection/extern/model.py +108 -762
  58. deepdoctection/extern/pdftext.py +37 -12
  59. deepdoctection/extern/pt/nms.py +15 -1
  60. deepdoctection/extern/pt/ptutils.py +13 -9
  61. deepdoctection/extern/tessocr.py +87 -54
  62. deepdoctection/extern/texocr.py +29 -14
  63. deepdoctection/extern/tp/tfutils.py +36 -8
  64. deepdoctection/extern/tp/tpcompat.py +54 -16
  65. deepdoctection/extern/tp/tpfrcnn/config/config.py +20 -4
  66. deepdoctection/extern/tpdetect.py +4 -2
  67. deepdoctection/mapper/__init__.py +1 -1
  68. deepdoctection/mapper/cats.py +117 -76
  69. deepdoctection/mapper/cocostruct.py +35 -17
  70. deepdoctection/mapper/d2struct.py +56 -29
  71. deepdoctection/mapper/hfstruct.py +32 -19
  72. deepdoctection/mapper/laylmstruct.py +221 -185
  73. deepdoctection/mapper/maputils.py +71 -35
  74. deepdoctection/mapper/match.py +76 -62
  75. deepdoctection/mapper/misc.py +68 -44
  76. deepdoctection/mapper/pascalstruct.py +13 -12
  77. deepdoctection/mapper/prodigystruct.py +33 -19
  78. deepdoctection/mapper/pubstruct.py +42 -32
  79. deepdoctection/mapper/tpstruct.py +39 -19
  80. deepdoctection/mapper/xfundstruct.py +20 -13
  81. deepdoctection/pipe/__init__.py +1 -2
  82. deepdoctection/pipe/anngen.py +104 -62
  83. deepdoctection/pipe/base.py +226 -107
  84. deepdoctection/pipe/common.py +206 -123
  85. deepdoctection/pipe/concurrency.py +74 -47
  86. deepdoctection/pipe/doctectionpipe.py +108 -47
  87. deepdoctection/pipe/language.py +41 -24
  88. deepdoctection/pipe/layout.py +45 -18
  89. deepdoctection/pipe/lm.py +146 -78
  90. deepdoctection/pipe/order.py +196 -113
  91. deepdoctection/pipe/refine.py +111 -63
  92. deepdoctection/pipe/registry.py +1 -1
  93. deepdoctection/pipe/segment.py +213 -142
  94. deepdoctection/pipe/sub_layout.py +76 -46
  95. deepdoctection/pipe/text.py +52 -33
  96. deepdoctection/pipe/transform.py +8 -6
  97. deepdoctection/train/d2_frcnn_train.py +87 -69
  98. deepdoctection/train/hf_detr_train.py +72 -40
  99. deepdoctection/train/hf_layoutlm_train.py +85 -46
  100. deepdoctection/train/tp_frcnn_train.py +56 -28
  101. deepdoctection/utils/concurrency.py +59 -16
  102. deepdoctection/utils/context.py +40 -19
  103. deepdoctection/utils/develop.py +25 -17
  104. deepdoctection/utils/env_info.py +85 -36
  105. deepdoctection/utils/error.py +16 -10
  106. deepdoctection/utils/file_utils.py +246 -62
  107. deepdoctection/utils/fs.py +162 -43
  108. deepdoctection/utils/identifier.py +29 -16
  109. deepdoctection/utils/logger.py +49 -32
  110. deepdoctection/utils/metacfg.py +83 -21
  111. deepdoctection/utils/pdf_utils.py +119 -62
  112. deepdoctection/utils/settings.py +24 -10
  113. deepdoctection/utils/tqdm.py +10 -5
  114. deepdoctection/utils/transform.py +182 -46
  115. deepdoctection/utils/utils.py +61 -28
  116. deepdoctection/utils/viz.py +150 -104
  117. deepdoctection-0.43.dist-info/METADATA +376 -0
  118. deepdoctection-0.43.dist-info/RECORD +149 -0
  119. deepdoctection/analyzer/_config.py +0 -146
  120. deepdoctection-0.42.1.dist-info/METADATA +0 -431
  121. deepdoctection-0.42.1.dist-info/RECORD +0 -148
  122. {deepdoctection-0.42.1.dist-info → deepdoctection-0.43.dist-info}/WHEEL +0 -0
  123. {deepdoctection-0.42.1.dist-info → deepdoctection-0.43.dist-info}/licenses/LICENSE +0 -0
  124. {deepdoctection-0.42.1.dist-info → deepdoctection-0.43.dist-info}/top_level.txt +0 -0
@@ -16,8 +16,9 @@
16
16
  # limitations under the License.
17
17
 
18
18
  """
19
- Module for mapping annotations into standard Detectron2 dataset dict. Also providing some tools for W&B mapping and
20
- visualising
19
+ Module for mapping annotations into standard Detectron2 dataset dict.
20
+
21
+ Also providing some tools for W&B mapping and visualisation.
21
22
  """
22
23
  from __future__ import annotations
23
24
 
@@ -57,11 +58,14 @@ def image_to_d2_frcnn_training(
57
58
  available, for otherwise the annotation will be filtered.
58
59
  Note, that the returned dict will not suffice for training as gt for RPN and anchors still need to be created.
59
60
 
60
- :param dp: Image
61
- :param add_mask: True is not implemented (yet).
62
- :param category_names: A list of category names for training a model. Pass nothing to train with all annotations
63
- :return: Dict with 'image', 'width', 'height', 'image_id', 'annotations' where 'annotations' is a list of dict
64
- with 'bbox_mode' (D2 internal bounding box description), 'bbox' and 'category_id'.
61
+ Args:
62
+ dp: Image
63
+ add_mask: `True` is not implemented (yet).
64
+ category_names: A list of category names for training a model. Pass nothing to train with all annotations
65
+
66
+ Returns:
67
+ Dict with 'image', 'width', 'height', 'image_id', 'annotations' where 'annotations' is a list of dict
68
+ with 'bbox_mode' (D2 internal bounding box description), 'bbox' and 'category_id'.
65
69
  """
66
70
  if not os.path.isfile(dp.location) and dp.image is None:
67
71
  return None
@@ -110,11 +114,14 @@ def pt_nms_image_annotations_depr(
110
114
  annotation, e.g. given by name or returned through different predictors. This is the pt version, for tf check
111
115
  `mapper.tpstruct`
112
116
 
113
- :param anns: A sequence of ImageAnnotations. All annotations will be treated as if they belong to one category
114
- :param threshold: NMS threshold
115
- :param image_id: id in order to get the embedding bounding box
116
- :param prio: If an annotation has prio, it will overwrite its given score to 1 so that it will never be suppressed
117
- :return: A list of annotation_ids that belong to the given input sequence and that survive the NMS process
117
+ Args:
118
+ anns: A sequence of ImageAnnotations. All annotations will be treated as if they belong to one category
119
+ threshold: NMS threshold
120
+ image_id: id in order to get the embedding bounding box
121
+ prio: If an annotation has prio, it will overwrite its given score to 1 so that it will never be suppressed
122
+
123
+ Returns:
124
+ A list of `annotation_id`s that belong to the given input sequence and that survive the NMS process
118
125
  """
119
126
  if len(anns) == 1:
120
127
  return [anns[0].annotation_id]
@@ -151,15 +158,18 @@ def pt_nms_image_annotations(
151
158
  anns: Sequence[ImageAnnotation], threshold: float, image_id: Optional[str] = None, prio: str = ""
152
159
  ) -> Sequence[str]:
153
160
  """
154
- Processing given image annotations through NMS. This is useful, if you want to supress some specific image
155
- annotation, e.g. given by name or returned through different predictors. This is the pt version, for tf check
161
+ Processes given image annotations through NMS (Non-Maximum Suppression). Useful for suppressing specific image
162
+ annotations, e.g., given by name or returned through different predictors. This is the pt version, for tf check
156
163
  `mapper.tpstruct`
157
164
 
158
- :param anns: A sequence of ImageAnnotations. All annotations will be treated as if they belong to one category
159
- :param threshold: NMS threshold
160
- :param image_id: id in order to get the embedding bounding box
161
- :param prio: If an annotation has prio, it will overwrite its given score to 1 so that it will never be suppressed
162
- :return: A list of annotation_ids that belong to the given input sequence and that survive the NMS process
165
+ Args:
166
+ anns: A sequence of `ImageAnnotation`. All annotations will be treated as if they belong to one category.
167
+ threshold: NMS threshold.
168
+ image_id: ID to get the embedding bounding box.
169
+ prio: If an annotation has priority, its score will be set to 1 so that it will never be suppressed.
170
+
171
+ Returns:
172
+ A list of `annotation_id` that belong to the given input sequence and that survive the NMS process.
163
173
  """
164
174
  if len(anns) == 1:
165
175
  return [anns[0].annotation_id]
@@ -213,6 +223,16 @@ def pt_nms_image_annotations(
213
223
  def _get_category_attributes(
214
224
  ann: ImageAnnotation, cat_to_sub_cat: Optional[Mapping[ObjectTypes, ObjectTypes]] = None
215
225
  ) -> tuple[ObjectTypes, int, Optional[float]]:
226
+ """
227
+ Gets the category attributes for an annotation, optionally using a mapping from category to sub-category.
228
+
229
+ Args:
230
+ ann: `ImageAnnotation`
231
+ cat_to_sub_cat: Optional mapping from `ObjectTypes` to `ObjectTypes`.
232
+
233
+ Returns:
234
+ Tuple of `ObjectTypes`, `category_id`, and `score`.
235
+ """
216
236
  if cat_to_sub_cat:
217
237
  sub_cat_key = cat_to_sub_cat.get(get_type(ann.category_name))
218
238
  if sub_cat_key in ann.sub_categories:
@@ -230,16 +250,23 @@ def to_wandb_image(
230
250
  cat_to_sub_cat: Optional[Mapping[ObjectTypes, ObjectTypes]] = None,
231
251
  ) -> tuple[str, Wbimage]:
232
252
  """
233
- Converting a deepdoctection image into a wandb image
234
-
235
- :param dp: deepdoctection image
236
- :param categories: dict of categories. The categories refer to categories of `ImageAnnotation`s.
237
- :param sub_categories: dict of sub categories. If provided, these categories will define the classes for the table
238
- :param cat_to_sub_cat: dict of category to sub category keys. Suppose your category `foo` has a sub category defined
239
- by the key `sub_foo`. The range sub category values must then be given by `sub_categories`
240
- and to extract the sub category values one must pass `{"foo": "sub_foo"}
241
-
242
- :return: a W&B image
253
+ Converts a deepdoctection `Image` into a `W&B` image.
254
+
255
+ Args:
256
+ dp: deepdoctection `Image`
257
+ categories: Dict of categories. The categories refer to categories of `ImageAnnotation`.
258
+ sub_categories: Dict of `sub_categories`. If provided, these categories will define the classes for the table.
259
+ cat_to_sub_cat: Dict of category to sub_category keys. Suppose your category `foo` has a sub-category defined
260
+ by the key `sub_foo`. The range of sub-category values must then be given by `sub_categories`,
261
+ and to extract the sub-category values, one must pass `{"foo": "sub_foo"}`.
262
+
263
+ Returns:
264
+ Tuple of `image_id` and a W&B image.
265
+
266
+ Example:
267
+ ```python
268
+ to_wandb_image(dp, categories)
269
+ ```
243
270
  """
244
271
  if dp.image is None:
245
272
  raise ValueError("Cannot convert to W&B image type when Image.image is None")
@@ -46,13 +46,19 @@ def image_to_hf_detr_training(
46
46
  category_names: Optional[Union[TypeOrStr, Sequence[Union[TypeOrStr]]]] = None,
47
47
  ) -> Optional[JsonDict]:
48
48
  """
49
- Maps an image to a detr input datapoint dict, that, after collating can be used for training.
49
+ Maps an `image` to a detr input datapoint `dict`, that, after collating, can be used for training.
50
50
 
51
- :param dp: Image
52
- :param add_mask: True is not implemented (yet).
53
- :param category_names: A list of category names for training a model. Pass nothing to train with all annotations
54
- :return: Dict with 'image', 'width', 'height', 'image_id', 'annotations' where 'annotations' is a list of dict
55
- with 'boxes' and 'class_labels'.
51
+ Args:
52
+ dp: `Image`
53
+ add_mask: `True` is not implemented (yet).
54
+ category_names: A list of `category_name`s for training a model. Pass nothing to train with all annotations.
55
+
56
+ Returns:
57
+ Dict with `image`, `width`, `height`, `image_id`, `annotations` where `annotations` is a list of dicts with
58
+ `boxes` and `class_labels`.
59
+
60
+ Note:
61
+ If `add_mask` is True, segmentation in `deepdoctection` is not supported.
56
62
  """
57
63
 
58
64
  if not os.path.isfile(dp.location) and dp.image is None:
@@ -96,12 +102,13 @@ def image_to_hf_detr_training(
96
102
  @dataclass
97
103
  class DetrDataCollator:
98
104
  """
99
- Data collator that will prepare a list of raw features to a BatchFeature that can be used
100
- to train a Detr or Tabletransformer model.
105
+ Data collator that will prepare a list of raw features to a `BatchFeature` that can be used to train a Detr or
106
+ Tabletransformer model.
101
107
 
102
- :param feature_extractor: DetrFeatureExtractor
103
- :param padder: An optional PadTransform instance
104
- :param return_tensors: "pt" or None
108
+ Args:
109
+ feature_extractor: `DetrFeatureExtractor`
110
+ padder: An optional `PadTransform` instance.
111
+ return_tensors: "pt" or None.
105
112
  """
106
113
 
107
114
  feature_extractor: DetrFeatureExtractor # TODO: Replace deprecated DetrFeatureExtractor with DetrImageProcessor
@@ -110,12 +117,15 @@ class DetrDataCollator:
110
117
 
111
118
  def __call__(self, raw_features: list[JsonDict]) -> BatchFeature:
112
119
  """
113
- Creating BatchFeature from a list of dict of raw features.
120
+ Creating `BatchFeature` from a list of dict of raw features.
114
121
 
115
- :param raw_features: A list of dict with keys: 'image' or 'file_name', "width', "height' and 'annotations'.
116
- 'annotations' mus be a list of dict as well, where each dict element must contain
117
- annotation information following COCO standard.
118
- :return: BatchFeature
122
+ Args:
123
+ raw_features: A list of dicts with keys: `image` or `file_name`, `width`, `height`, and `annotations`.
124
+ `annotations` must be a list of dicts as well, where each dict element must contain
125
+ annotation information following `COCO` standard.
126
+
127
+ Returns:
128
+ `BatchFeature`
119
129
  """
120
130
  images_input = []
121
131
 
@@ -136,10 +146,13 @@ class DetrDataCollator:
136
146
 
137
147
  def maybe_pad_image_and_transform(self, feature: JsonDict) -> JsonDict:
138
148
  """
139
- Pads an 'image' and transforming bounding boxes from annotations.
149
+ Pads an `image` and transforms bounding boxes from `annotations`.
150
+
151
+ Args:
152
+ feature: A dict of `raw_features`.
140
153
 
141
- :param feature: A dict of raw_features
142
- :return: Same as input
154
+ Returns:
155
+ Same as input.
143
156
  """
144
157
  if self.padder is None:
145
158
  return feature