python-doctr 0.9.0__py3-none-any.whl → 0.10.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 (61) hide show
  1. doctr/datasets/cord.py +10 -1
  2. doctr/datasets/funsd.py +11 -1
  3. doctr/datasets/ic03.py +11 -1
  4. doctr/datasets/ic13.py +10 -1
  5. doctr/datasets/iiit5k.py +26 -16
  6. doctr/datasets/imgur5k.py +10 -1
  7. doctr/datasets/sroie.py +11 -1
  8. doctr/datasets/svhn.py +11 -1
  9. doctr/datasets/svt.py +11 -1
  10. doctr/datasets/synthtext.py +11 -1
  11. doctr/datasets/utils.py +7 -2
  12. doctr/datasets/vocabs.py +6 -2
  13. doctr/datasets/wildreceipt.py +12 -1
  14. doctr/file_utils.py +19 -0
  15. doctr/io/elements.py +12 -4
  16. doctr/models/builder.py +2 -2
  17. doctr/models/classification/magc_resnet/tensorflow.py +13 -6
  18. doctr/models/classification/mobilenet/pytorch.py +2 -0
  19. doctr/models/classification/mobilenet/tensorflow.py +14 -8
  20. doctr/models/classification/predictor/pytorch.py +11 -7
  21. doctr/models/classification/predictor/tensorflow.py +10 -6
  22. doctr/models/classification/resnet/tensorflow.py +21 -8
  23. doctr/models/classification/textnet/tensorflow.py +11 -5
  24. doctr/models/classification/vgg/tensorflow.py +9 -3
  25. doctr/models/classification/vit/tensorflow.py +10 -4
  26. doctr/models/classification/zoo.py +22 -10
  27. doctr/models/detection/differentiable_binarization/tensorflow.py +34 -12
  28. doctr/models/detection/fast/tensorflow.py +14 -11
  29. doctr/models/detection/linknet/tensorflow.py +23 -11
  30. doctr/models/detection/predictor/tensorflow.py +2 -2
  31. doctr/models/factory/hub.py +5 -6
  32. doctr/models/kie_predictor/base.py +4 -0
  33. doctr/models/kie_predictor/pytorch.py +4 -0
  34. doctr/models/kie_predictor/tensorflow.py +8 -1
  35. doctr/models/modules/transformer/tensorflow.py +0 -2
  36. doctr/models/modules/vision_transformer/pytorch.py +1 -1
  37. doctr/models/modules/vision_transformer/tensorflow.py +1 -1
  38. doctr/models/predictor/base.py +24 -12
  39. doctr/models/predictor/pytorch.py +4 -0
  40. doctr/models/predictor/tensorflow.py +8 -1
  41. doctr/models/preprocessor/tensorflow.py +1 -1
  42. doctr/models/recognition/crnn/tensorflow.py +8 -6
  43. doctr/models/recognition/master/tensorflow.py +9 -4
  44. doctr/models/recognition/parseq/tensorflow.py +10 -8
  45. doctr/models/recognition/sar/tensorflow.py +7 -3
  46. doctr/models/recognition/vitstr/tensorflow.py +9 -4
  47. doctr/models/utils/pytorch.py +1 -1
  48. doctr/models/utils/tensorflow.py +15 -15
  49. doctr/transforms/functional/pytorch.py +1 -1
  50. doctr/transforms/modules/pytorch.py +7 -6
  51. doctr/transforms/modules/tensorflow.py +15 -12
  52. doctr/utils/geometry.py +106 -19
  53. doctr/utils/metrics.py +1 -1
  54. doctr/utils/reconstitution.py +151 -65
  55. doctr/version.py +1 -1
  56. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/METADATA +11 -11
  57. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/RECORD +61 -61
  58. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/WHEEL +1 -1
  59. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/LICENSE +0 -0
  60. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/top_level.txt +0 -0
  61. {python_doctr-0.9.0.dist-info → python_doctr-0.10.0.dist-info}/zip-safe +0 -0
@@ -2,6 +2,7 @@
2
2
 
3
3
  # This program is licensed under the Apache License 2.0.
4
4
  # See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details.
5
+ import logging
5
6
  from typing import Any, Dict, Optional
6
7
 
7
8
  import numpy as np
@@ -13,10 +14,109 @@ from .fonts import get_font
13
14
  __all__ = ["synthesize_page", "synthesize_kie_page"]
14
15
 
15
16
 
17
+ # Global variable to avoid multiple warnings
18
+ ROTATION_WARNING = False
19
+
20
+
21
+ def _warn_rotation(entry: Dict[str, Any]) -> None: # pragma: no cover
22
+ global ROTATION_WARNING
23
+ if not ROTATION_WARNING and len(entry["geometry"]) == 4:
24
+ logging.warning("Polygons with larger rotations will lead to inaccurate rendering")
25
+ ROTATION_WARNING = True
26
+
27
+
28
+ def _synthesize(
29
+ response: Image.Image,
30
+ entry: Dict[str, Any],
31
+ w: int,
32
+ h: int,
33
+ draw_proba: bool = False,
34
+ font_family: Optional[str] = None,
35
+ smoothing_factor: float = 0.75,
36
+ min_font_size: int = 6,
37
+ max_font_size: int = 50,
38
+ ) -> Image.Image:
39
+ if len(entry["geometry"]) == 2:
40
+ (xmin, ymin), (xmax, ymax) = entry["geometry"]
41
+ polygon = [(xmin, ymin), (xmax, ymin), (xmax, ymax), (xmin, ymax)]
42
+ else:
43
+ polygon = entry["geometry"]
44
+
45
+ # Calculate the bounding box of the word
46
+ x_coords, y_coords = zip(*polygon)
47
+ xmin, ymin, xmax, ymax = (
48
+ int(round(w * min(x_coords))),
49
+ int(round(h * min(y_coords))),
50
+ int(round(w * max(x_coords))),
51
+ int(round(h * max(y_coords))),
52
+ )
53
+ word_width = xmax - xmin
54
+ word_height = ymax - ymin
55
+
56
+ # If lines are provided instead of words, concatenate the word entries
57
+ if "words" in entry:
58
+ word_text = " ".join(word["value"] for word in entry["words"])
59
+ else:
60
+ word_text = entry["value"]
61
+ # Find the optimal font size
62
+ try:
63
+ font_size = min(word_height, max_font_size)
64
+ font = get_font(font_family, font_size)
65
+ text_width, text_height = font.getbbox(word_text)[2:4]
66
+
67
+ while (text_width > word_width or text_height > word_height) and font_size > min_font_size:
68
+ font_size = max(int(font_size * smoothing_factor), min_font_size)
69
+ font = get_font(font_family, font_size)
70
+ text_width, text_height = font.getbbox(word_text)[2:4]
71
+ except ValueError:
72
+ font = get_font(font_family, min_font_size)
73
+
74
+ # Create a mask for the word
75
+ mask = Image.new("L", (w, h), 0)
76
+ ImageDraw.Draw(mask).polygon([(int(round(w * x)), int(round(h * y))) for x, y in polygon], fill=255)
77
+
78
+ # Draw the word text
79
+ d = ImageDraw.Draw(response)
80
+ try:
81
+ try:
82
+ d.text((xmin, ymin), word_text, font=font, fill=(0, 0, 0), anchor="lt")
83
+ except UnicodeEncodeError:
84
+ d.text((xmin, ymin), anyascii(word_text), font=font, fill=(0, 0, 0), anchor="lt")
85
+ # Catch generic exceptions to avoid crashing the whole rendering
86
+ except Exception: # pragma: no cover
87
+ logging.warning(f"Could not render word: {word_text}")
88
+
89
+ if draw_proba:
90
+ confidence = (
91
+ entry["confidence"]
92
+ if "confidence" in entry
93
+ else sum(w["confidence"] for w in entry["words"]) / len(entry["words"])
94
+ )
95
+ p = int(255 * confidence)
96
+ color = (255 - p, 0, p) # Red to blue gradient based on probability
97
+ d.rectangle([(xmin, ymin), (xmax, ymax)], outline=color, width=2)
98
+
99
+ prob_font = get_font(font_family, 20)
100
+ prob_text = f"{confidence:.2f}"
101
+ prob_text_width, prob_text_height = prob_font.getbbox(prob_text)[2:4]
102
+
103
+ # Position the probability slightly above the bounding box
104
+ prob_x_offset = (word_width - prob_text_width) // 2
105
+ prob_y_offset = ymin - prob_text_height - 2
106
+ prob_y_offset = max(0, prob_y_offset)
107
+
108
+ d.text((xmin + prob_x_offset, prob_y_offset), prob_text, font=prob_font, fill=color, anchor="lt")
109
+
110
+ return response
111
+
112
+
16
113
  def synthesize_page(
17
114
  page: Dict[str, Any],
18
115
  draw_proba: bool = False,
19
116
  font_family: Optional[str] = None,
117
+ smoothing_factor: float = 0.95,
118
+ min_font_size: int = 8,
119
+ max_font_size: int = 50,
20
120
  ) -> np.ndarray:
21
121
  """Draw a the content of the element page (OCR response) on a blank page.
22
122
 
@@ -24,8 +124,10 @@ def synthesize_page(
24
124
  ----
25
125
  page: exported Page object to represent
26
126
  draw_proba: if True, draw words in colors to represent confidence. Blue: p=1, red: p=0
27
- font_size: size of the font, default font = 13
28
127
  font_family: family of the font
128
+ smoothing_factor: factor to smooth the font size
129
+ min_font_size: minimum font size
130
+ max_font_size: maximum font size
29
131
 
30
132
  Returns:
31
133
  -------
@@ -33,41 +135,42 @@ def synthesize_page(
33
135
  """
34
136
  # Draw template
35
137
  h, w = page["dimensions"]
36
- response = 255 * np.ones((h, w, 3), dtype=np.int32)
138
+ response = Image.new("RGB", (w, h), color=(255, 255, 255))
37
139
 
38
- # Draw each word
39
140
  for block in page["blocks"]:
40
- for line in block["lines"]:
41
- for word in line["words"]:
42
- # Get absolute word geometry
43
- (xmin, ymin), (xmax, ymax) = word["geometry"]
44
- xmin, xmax = int(round(w * xmin)), int(round(w * xmax))
45
- ymin, ymax = int(round(h * ymin)), int(round(h * ymax))
46
-
47
- # White drawing context adapted to font size, 0.75 factor to convert pts --> pix
48
- font = get_font(font_family, int(0.75 * (ymax - ymin)))
49
- img = Image.new("RGB", (xmax - xmin, ymax - ymin), color=(255, 255, 255))
50
- d = ImageDraw.Draw(img)
51
- # Draw in black the value of the word
52
- try:
53
- d.text((0, 0), word["value"], font=font, fill=(0, 0, 0))
54
- except UnicodeEncodeError:
55
- # When character cannot be encoded, use its anyascii version
56
- d.text((0, 0), anyascii(word["value"]), font=font, fill=(0, 0, 0))
57
-
58
- # Colorize if draw_proba
59
- if draw_proba:
60
- p = int(255 * word["confidence"])
61
- mask = np.where(np.array(img) == 0, 1, 0)
62
- proba: np.ndarray = np.array([255 - p, 0, p])
63
- color = mask * proba[np.newaxis, np.newaxis, :]
64
- white_mask = 255 * (1 - mask)
65
- img = color + white_mask
66
-
67
- # Write to response page
68
- response[ymin:ymax, xmin:xmax, :] = np.array(img)
69
-
70
- return response
141
+ # If lines are provided use these to get better rendering results
142
+ if len(block["lines"]) > 1:
143
+ for line in block["lines"]:
144
+ _warn_rotation(block) # pragma: no cover
145
+ response = _synthesize(
146
+ response=response,
147
+ entry=line,
148
+ w=w,
149
+ h=h,
150
+ draw_proba=draw_proba,
151
+ font_family=font_family,
152
+ smoothing_factor=smoothing_factor,
153
+ min_font_size=min_font_size,
154
+ max_font_size=max_font_size,
155
+ )
156
+ # Otherwise, draw each word
157
+ else:
158
+ for line in block["lines"]:
159
+ _warn_rotation(block) # pragma: no cover
160
+ for word in line["words"]:
161
+ response = _synthesize(
162
+ response=response,
163
+ entry=word,
164
+ w=w,
165
+ h=h,
166
+ draw_proba=draw_proba,
167
+ font_family=font_family,
168
+ smoothing_factor=smoothing_factor,
169
+ min_font_size=min_font_size,
170
+ max_font_size=max_font_size,
171
+ )
172
+
173
+ return np.array(response, dtype=np.uint8)
71
174
 
72
175
 
73
176
  def synthesize_kie_page(
@@ -81,8 +184,10 @@ def synthesize_kie_page(
81
184
  ----
82
185
  page: exported Page object to represent
83
186
  draw_proba: if True, draw words in colors to represent confidence. Blue: p=1, red: p=0
84
- font_size: size of the font, default font = 13
85
187
  font_family: family of the font
188
+ smoothing_factor: factor to smooth the font size
189
+ min_font_size: minimum font size
190
+ max_font_size: maximum font size
86
191
 
87
192
  Returns:
88
193
  -------
@@ -90,37 +195,18 @@ def synthesize_kie_page(
90
195
  """
91
196
  # Draw template
92
197
  h, w = page["dimensions"]
93
- response = 255 * np.ones((h, w, 3), dtype=np.int32)
198
+ response = Image.new("RGB", (w, h), color=(255, 255, 255))
94
199
 
95
200
  # Draw each word
96
201
  for predictions in page["predictions"].values():
97
202
  for prediction in predictions:
98
- # Get aboslute word geometry
99
- (xmin, ymin), (xmax, ymax) = prediction["geometry"]
100
- xmin, xmax = int(round(w * xmin)), int(round(w * xmax))
101
- ymin, ymax = int(round(h * ymin)), int(round(h * ymax))
102
-
103
- # White drawing context adapted to font size, 0.75 factor to convert pts --> pix
104
- font = get_font(font_family, int(0.75 * (ymax - ymin)))
105
- img = Image.new("RGB", (xmax - xmin, ymax - ymin), color=(255, 255, 255))
106
- d = ImageDraw.Draw(img)
107
- # Draw in black the value of the word
108
- try:
109
- d.text((0, 0), prediction["value"], font=font, fill=(0, 0, 0))
110
- except UnicodeEncodeError:
111
- # When character cannot be encoded, use its anyascii version
112
- d.text((0, 0), anyascii(prediction["value"]), font=font, fill=(0, 0, 0))
113
-
114
- # Colorize if draw_proba
115
- if draw_proba:
116
- p = int(255 * prediction["confidence"])
117
- mask = np.where(np.array(img) == 0, 1, 0)
118
- proba: np.ndarray = np.array([255 - p, 0, p])
119
- color = mask * proba[np.newaxis, np.newaxis, :]
120
- white_mask = 255 * (1 - mask)
121
- img = color + white_mask
122
-
123
- # Write to response page
124
- response[ymin:ymax, xmin:xmax, :] = np.array(img)
125
-
126
- return response
203
+ _warn_rotation(prediction) # pragma: no cover
204
+ response = _synthesize(
205
+ response=response,
206
+ entry=prediction,
207
+ w=w,
208
+ h=h,
209
+ draw_proba=draw_proba,
210
+ font_family=font_family,
211
+ )
212
+ return np.array(response, dtype=np.uint8)
doctr/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = 'v0.9.0'
1
+ __version__ = 'v0.10.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-doctr
3
- Version: 0.9.0
3
+ Version: 0.10.0
4
4
  Summary: Document Text Recognition (docTR): deep Learning for high-performance OCR on documents.
5
5
  Author-email: Mindee <contact@mindee.com>
6
6
  Maintainer: François-Guillaume Fernandez, Charles Gaillard, Olivier Dulcy, Felix Dittrich
@@ -226,7 +226,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
226
226
  Requires-Python: <4,>=3.9.0
227
227
  Description-Content-Type: text/markdown
228
228
  License-File: LICENSE
229
- Requires-Dist: numpy<2.0.0,>=1.16.0
229
+ Requires-Dist: numpy<3.0.0,>=1.16.0
230
230
  Requires-Dist: scipy<2.0.0,>=1.4.0
231
231
  Requires-Dist: h5py<4.0.0,>=3.1.0
232
232
  Requires-Dist: opencv-python<5.0.0,>=4.5.0
@@ -243,17 +243,17 @@ Requires-Dist: tqdm>=4.30.0
243
243
  Provides-Extra: contrib
244
244
  Requires-Dist: onnxruntime>=1.11.0; extra == "contrib"
245
245
  Provides-Extra: dev
246
- Requires-Dist: tensorflow<2.16.0,>=2.11.0; extra == "dev"
246
+ Requires-Dist: tensorflow<3.0.0,>=2.15.0; extra == "dev"
247
+ Requires-Dist: tf-keras<3.0.0,>=2.15.0; extra == "dev"
247
248
  Requires-Dist: tf2onnx<2.0.0,>=1.16.0; extra == "dev"
248
- Requires-Dist: torch<3.0.0,>=1.12.0; extra == "dev"
249
- Requires-Dist: torchvision>=0.13.0; extra == "dev"
249
+ Requires-Dist: torch<3.0.0,>=2.0.0; extra == "dev"
250
+ Requires-Dist: torchvision>=0.15.0; extra == "dev"
250
251
  Requires-Dist: onnx<3.0.0,>=1.12.0; extra == "dev"
251
252
  Requires-Dist: weasyprint>=55.0; extra == "dev"
252
253
  Requires-Dist: matplotlib>=3.1.0; extra == "dev"
253
254
  Requires-Dist: mplcursors>=0.3; extra == "dev"
254
255
  Requires-Dist: pytest>=5.3.2; extra == "dev"
255
256
  Requires-Dist: coverage[toml]>=4.5.4; extra == "dev"
256
- Requires-Dist: hdf5storage>=0.1.18; extra == "dev"
257
257
  Requires-Dist: onnxruntime>=1.11.0; extra == "dev"
258
258
  Requires-Dist: requests>=2.20.0; extra == "dev"
259
259
  Requires-Dist: psutil>=5.9.5; extra == "dev"
@@ -286,16 +286,16 @@ Requires-Dist: pre-commit>=2.17.0; extra == "quality"
286
286
  Provides-Extra: testing
287
287
  Requires-Dist: pytest>=5.3.2; extra == "testing"
288
288
  Requires-Dist: coverage[toml]>=4.5.4; extra == "testing"
289
- Requires-Dist: hdf5storage>=0.1.18; extra == "testing"
290
289
  Requires-Dist: onnxruntime>=1.11.0; extra == "testing"
291
290
  Requires-Dist: requests>=2.20.0; extra == "testing"
292
291
  Requires-Dist: psutil>=5.9.5; extra == "testing"
293
292
  Provides-Extra: tf
294
- Requires-Dist: tensorflow<2.16.0,>=2.11.0; extra == "tf"
293
+ Requires-Dist: tensorflow<3.0.0,>=2.15.0; extra == "tf"
294
+ Requires-Dist: tf-keras<3.0.0,>=2.15.0; extra == "tf"
295
295
  Requires-Dist: tf2onnx<2.0.0,>=1.16.0; extra == "tf"
296
296
  Provides-Extra: torch
297
- Requires-Dist: torch<3.0.0,>=1.12.0; extra == "torch"
298
- Requires-Dist: torchvision>=0.13.0; extra == "torch"
297
+ Requires-Dist: torch<3.0.0,>=2.0.0; extra == "torch"
298
+ Requires-Dist: torchvision>=0.15.0; extra == "torch"
299
299
  Requires-Dist: onnx<3.0.0,>=1.12.0; extra == "torch"
300
300
  Provides-Extra: viz
301
301
  Requires-Dist: matplotlib>=3.1.0; extra == "viz"
@@ -464,7 +464,7 @@ pip install "python-doctr[torch,viz,html,contib]"
464
464
  For MacBooks with M1 chip, you will need some additional packages or specific versions:
465
465
 
466
466
  - TensorFlow 2: [metal plugin](https://developer.apple.com/metal/tensorflow-plugin/)
467
- - PyTorch: [version >= 1.12.0](https://pytorch.org/get-started/locally/#start-locally)
467
+ - PyTorch: [version >= 2.0.0](https://pytorch.org/get-started/locally/#start-locally)
468
468
 
469
469
  ### Developer mode
470
470
 
@@ -1,32 +1,32 @@
1
1
  doctr/__init__.py,sha256=q-1tv1hf-BRaZtxsrbPVxYNL6ZtyIOSDvlZOSt85TmU,170
2
- doctr/file_utils.py,sha256=3LUSkLXfMsxJgLY_Gah9Qlb7-l-Bxx1y6Wm9hlVXJig,3738
2
+ doctr/file_utils.py,sha256=YRxb_xnV980ONPrYTS9XtKCeWsNfo_DamnqaeSvWygI,4442
3
3
  doctr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- doctr/version.py,sha256=BSHwM5KsOpEVgNNeYRIr89q04Tayoadwt508Blp8nAo,23
4
+ doctr/version.py,sha256=hPF6G3uWBAkCELBsDxYD6Z0PDEzrjDfFIIWewytUf-U,24
5
5
  doctr/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  doctr/contrib/artefacts.py,sha256=xXkTkZVMrjalzffeBDOXktRhMn-EmUVEdURpDsV0-h8,5351
7
7
  doctr/contrib/base.py,sha256=dKUcKvVMyPFvZp_-IekocFNG3JmCJ1cNt0V8BQ5zdV0,3426
8
8
  doctr/datasets/__init__.py,sha256=umI2ABbgWIKuhswl8RGaF6CefFiI8DdEGVb0Kbd8aZA,574
9
- doctr/datasets/cord.py,sha256=p9ObLgqV3uB7TYoS5Puag0q-JtFTPrXUztkxL36U69U,4746
9
+ doctr/datasets/cord.py,sha256=J10eXeu6i90qnQjGNHR2C1o20-1vQeMKliTRthJvTBg,5288
10
10
  doctr/datasets/detection.py,sha256=H6inFO6rjdvU_Asm9UTod5r5bjjpmJJWGityv0RTJ8M,3607
11
11
  doctr/datasets/doc_artefacts.py,sha256=KKOlwE1oUG-sbC43an-TTh2m9PopuryXtUWM471TgO4,3258
12
- doctr/datasets/funsd.py,sha256=RtWztUkgPmzjmNbZi55OU8mKzK8fvLSJXpHb3K9ccNg,4174
13
- doctr/datasets/ic03.py,sha256=2HEHvW9tLYFiSEaPeNM4vrqL3ICjth6LUUXPcHjrHjQ,5066
14
- doctr/datasets/ic13.py,sha256=5qjGMmotEOo_8N2gp0XUdZPW5t2gvVe-cTestlfD6Mc,4010
15
- doctr/datasets/iiit5k.py,sha256=7y4pv4WG-FdXCn7aXLsUodXnk63gRBR8325HfqqlQ3k,3936
12
+ doctr/datasets/funsd.py,sha256=_3r3BCWtUtQhH317JkNSfWMUWLouvMvJVtReRAPnVyE,4710
13
+ doctr/datasets/ic03.py,sha256=49vfjAcM0v1Pwp1dCDZa-MfX8dChbVze_K3O4c3W_mA,5577
14
+ doctr/datasets/ic13.py,sha256=l8fmVmtXaJZbOu7UDfmnCvIkF61TWUczfOAnOUSXVG0,4517
15
+ doctr/datasets/iiit5k.py,sha256=_z1EVQB0QOM7MjW5nXLawJiQ9HY_XVjK6Na5G8BYcr0,4417
16
16
  doctr/datasets/iiithws.py,sha256=MFWgIW5bNJSvxWU-USZvbYVHNlkBsnzzMaSGrbut-zQ,2778
17
- doctr/datasets/imgur5k.py,sha256=CeSh2R_U-1iPTg-DZOgY5L6t4F-fX1WkqiMP0C6jivQ,6679
17
+ doctr/datasets/imgur5k.py,sha256=aNwHH9PT5aLqDFlbaSQ9oZuuvgbT1Z5eCowPVC9nnqQ,7222
18
18
  doctr/datasets/loader.py,sha256=77ErVBRQsXAhe4pTJstZ-wk4wOZSFdw9w-_OMv89IKg,2803
19
19
  doctr/datasets/mjsynth.py,sha256=Sybpaxiib8jDOc33OQgl2gGQ4XX8kKsnZaNokKmt08o,4063
20
20
  doctr/datasets/ocr.py,sha256=wSAU62NUdFgt52vxo65bXPsuKeVWArlAkD5kxWKypiM,2550
21
21
  doctr/datasets/orientation.py,sha256=PZfSQGfBSqzwRlg84L7BA7Lb2jseBvxkKqzh36TtFXk,1113
22
22
  doctr/datasets/recognition.py,sha256=bXNkHqJUgPx10lhPfMBK7B0wmpLd20-MFbuGJXAGW2w,1881
23
- doctr/datasets/sroie.py,sha256=bAkPLmw9aVSu_MyEix_FKFW0pbYye1w16vIkumnQ4E8,3939
24
- doctr/datasets/svhn.py,sha256=Q4M84eRGWLWQ5Bsw0zvouhHTUQl46B9-pS06ZYKT5j8,5251
25
- doctr/datasets/svt.py,sha256=eos2IUqeM8AW98zJ4PjHQ-hM0hUiJ-cumFhctQrpZp4,4551
26
- doctr/datasets/synthtext.py,sha256=Q0WKA_UJtgjdBaHHQ888n6ltT-NBuf5kTYQv5SB40IQ,5387
27
- doctr/datasets/utils.py,sha256=xdKi9z0hSvW0TOS_Pb_VJabX_pyCgRmMvRxIZBXpjg8,7584
28
- doctr/datasets/vocabs.py,sha256=TABYcaDr2ZviJJWaH2-DrZTLaQYUVTsUTAGgFia3c4k,3834
29
- doctr/datasets/wildreceipt.py,sha256=HvnAaxo9lLwC8UMUYYKKJo6HkG8xm2yIHopBsN5G1LA,4566
23
+ doctr/datasets/sroie.py,sha256=2FJawrbG0evONbOkiS9ns5zoHQPOGMrsUYkU7SuQtxo,4442
24
+ doctr/datasets/svhn.py,sha256=VbHt51ZC3Y7t9sp3E-rdXryPkjB0MVV3WEyMwgxCXDY,5767
25
+ doctr/datasets/svt.py,sha256=2pIM8GIPXUXqzMKz5p_bKxM_7IlnOyjOhQZ4A2x2fY8,5054
26
+ doctr/datasets/synthtext.py,sha256=AKReG9jprETBrc8HEQ5EbMeBuf3rHq3nM3z4nrwbc7c,5925
27
+ doctr/datasets/utils.py,sha256=Mz6ErQPhEAn_ogJ3-1L-7A0PTqtQicuzbtokBkEgTEI,7753
28
+ doctr/datasets/vocabs.py,sha256=-NL0lJqSK6ECj2sJBe4mCcT-NyrMybZLXzDUvRIQlEo,4143
29
+ doctr/datasets/wildreceipt.py,sha256=Ce9Eqv2rgOhinlMnT15To1X9KKv0XOqi4C_e4mNWNSw,5130
30
30
  doctr/datasets/datasets/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
31
31
  doctr/datasets/datasets/base.py,sha256=TUK8GMosZnkTBsJm8zOc7AIy3FUMIV2vOTu3YbTjnSQ,4874
32
32
  doctr/datasets/datasets/pytorch.py,sha256=M75erZOBP_Cg05Vk4D01yQZSyyqEbN0omHch1afe4pY,2039
@@ -36,7 +36,7 @@ doctr/datasets/generator/base.py,sha256=SpzbEqVYUpPZr5NTgccXtpw_yD37WxJ0Jx4HDwa_
36
36
  doctr/datasets/generator/pytorch.py,sha256=HUmdHUm7rU84gXv18BeXdYTDBCHabtw21Xdpm-p02ik,2134
37
37
  doctr/datasets/generator/tensorflow.py,sha256=Yj9vgEjdNnOwrM4Ew2w5TfkEwNXgy6ACZuEnExZcUMs,2229
38
38
  doctr/io/__init__.py,sha256=kS7tKGFvzxOCWBOun-Y8n9CsziwRKNynjwpZEUUI03M,106
39
- doctr/io/elements.py,sha256=bGAIS34Kq_KMGl4zHjIloGCjsbyB6VcrkGq7fvQY71k,24854
39
+ doctr/io/elements.py,sha256=-RkM5WQG72CA3zUUYs7Epa8M0jh3-qrGaN9nke0hj-g,25061
40
40
  doctr/io/html.py,sha256=cXDCMKztiFafCdPy_AMU5Ven52q1A0FJWXhPnJMLHGg,719
41
41
  doctr/io/pdf.py,sha256=V2GAwPFvGAjBqhT85Y6uVejlLy0vn5S94_0ZJVPQLiE,1350
42
42
  doctr/io/reader.py,sha256=68pr31K19Tej6UHAqhfAlD11paGX6h3IeSvEje8GaOg,2829
@@ -46,32 +46,32 @@ doctr/io/image/pytorch.py,sha256=13F8tFXultegdF9yZqCMXSM9Jn4ojwT9YLYWMF5nZ6M,331
46
46
  doctr/io/image/tensorflow.py,sha256=47a-zW4VoAeaoihTsppFJlFyK_8dvGzjGF1GB3Ti0Ig,3213
47
47
  doctr/models/__init__.py,sha256=yn_mXUL8B5L27Uaat1rLGRQHgLR8VLVxzBuPfNuN1YE,124
48
48
  doctr/models/_utils.py,sha256=zt-wXy0OP8Mw9JhnCLPFhX5d5efdcijgPlLnVKBdRhw,7540
49
- doctr/models/builder.py,sha256=9b6fCFDJvHo5XOyP8oz6PkrEjyGxyHUecEWYjdHv0IA,20665
49
+ doctr/models/builder.py,sha256=b_HeUevO_GoVgPZYmD2qg06Jx_PvSmNTETdsiNSoVM0,20661
50
50
  doctr/models/core.py,sha256=SMXYuX1o_Q2zrjcF-vzfqj7IkLKlDyzEOc-4HeiEZ8g,501
51
51
  doctr/models/zoo.py,sha256=G52XurwqjVdLRHOZWrEu2QbmZQWsCPdZVIPu874gL_E,9318
52
52
  doctr/models/classification/__init__.py,sha256=HeErE29Bs1-91FtS9HqNghHe89XZGzI_11MO_E6GJ7s,154
53
- doctr/models/classification/zoo.py,sha256=HM2p1fFM83CLqrz7-Vlj-_oBEPNRpuC1bD_0AKquh0E,3503
53
+ doctr/models/classification/zoo.py,sha256=BGPAt1-6ma7BfPU6Fw4z8cMOnbbIq5vY5A7Nxspuggg,3927
54
54
  doctr/models/classification/magc_resnet/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
55
55
  doctr/models/classification/magc_resnet/pytorch.py,sha256=UY65c3_Ux2o4hOm_USEQYP7O69bj76qbUB-PCb_0Lng,5603
56
- doctr/models/classification/magc_resnet/tensorflow.py,sha256=4UDrEcom_2wcyE1QjwmT-u6rtpzQ5ViyB1U6HxpT_XI,6423
56
+ doctr/models/classification/magc_resnet/tensorflow.py,sha256=DGyzKwDtPqVcmDkvHzZJlMxY8hH80cphCMtTeA5KIkw,6761
57
57
  doctr/models/classification/mobilenet/__init__.py,sha256=FBZ2YT2Cq3mj6vpDC3ff5TcMpagNWFhwxQ_brdsgBqo,172
58
- doctr/models/classification/mobilenet/pytorch.py,sha256=bko2qHGmGfJay2EZmEZlrzgnDah7vhLpibNYIxVFWqo,9318
59
- doctr/models/classification/mobilenet/tensorflow.py,sha256=VUMq9auHRcDafvjhayCq4fV1fLS14Nxp_O6OEtA7R6A,15601
58
+ doctr/models/classification/mobilenet/pytorch.py,sha256=p3bp9CwDo5-1sfRP5G33Gl66iAlcwlfUJwhCPwTFzsY,9392
59
+ doctr/models/classification/mobilenet/tensorflow.py,sha256=1J7mWvPmdMum0NZatTXwtV8nSoEoTBV4jU_ZnNIWv_w,15942
60
60
  doctr/models/classification/predictor/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
61
- doctr/models/classification/predictor/pytorch.py,sha256=NEeFSUJ5QhUqtG9pDw5s3ZzR8wSORhicmxESPTVSErw,2288
62
- doctr/models/classification/predictor/tensorflow.py,sha256=asJl1GiDFq8WJM_J56tx4xPR-Kqrnroc1ZGty5znkDg,2071
61
+ doctr/models/classification/predictor/pytorch.py,sha256=YwWCO3ZsxYe-W6WlEtVVDmDxKgbk-MXbEgyb0VwsPho,2640
62
+ doctr/models/classification/predictor/tensorflow.py,sha256=EQq_00FdJ_2uUIsSo5nqkcHFA1dgv6TL_Haw6ZEfH0A,2369
63
63
  doctr/models/classification/resnet/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
64
64
  doctr/models/classification/resnet/pytorch.py,sha256=VVkNit3HEezRfOPw8wfuiEEAUCEnYSauCvWaCFF3cwo,12442
65
- doctr/models/classification/resnet/tensorflow.py,sha256=jBGiL6Mucnq7JGkyIa4Y9A6BQz2ol88cm-eBxJjsTPo,13185
65
+ doctr/models/classification/resnet/tensorflow.py,sha256=Ivof4ki1VQILXiQG6w3IJ8n7x8oaBM5GJ-x4Gjmu6RI,13816
66
66
  doctr/models/classification/textnet/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
67
67
  doctr/models/classification/textnet/pytorch.py,sha256=z2BwTM-7ClEzanHWXB5Uie-_X62k1OZZ2Y6m08V_zUM,10163
68
- doctr/models/classification/textnet/tensorflow.py,sha256=RVg7Nic0cn8A3eswq-YauoqvnDrdxiuzvx_h4qAGubQ,9789
68
+ doctr/models/classification/textnet/tensorflow.py,sha256=YuqLBbi95uGMIP7o_l2RuMhanKCEy7vmGg4mNoOAjkc,10100
69
69
  doctr/models/classification/vgg/__init__.py,sha256=FBZ2YT2Cq3mj6vpDC3ff5TcMpagNWFhwxQ_brdsgBqo,172
70
70
  doctr/models/classification/vgg/pytorch.py,sha256=b_q9oWmtlazD4uk9DFYezWgsgAwwN-3ewEz15E2cJR4,3136
71
- doctr/models/classification/vgg/tensorflow.py,sha256=mVuyIXtX7iu622K0GwXkALOM7gzFtlGX9IABLP2NR2Y,4090
71
+ doctr/models/classification/vgg/tensorflow.py,sha256=fqbU_SO0DQA7vuJa-L67rEg9sw3S4oHIwXSOZ-vtxfM,4387
72
72
  doctr/models/classification/vit/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
73
73
  doctr/models/classification/vit/pytorch.py,sha256=770ZrCPX7LlVUjE9XNFrzcb2i_0lHStJ8Q4vXEhXEHs,6096
74
- doctr/models/classification/vit/tensorflow.py,sha256=TtglXtKAE6y_gfzk8DOhUwoQNIMhK86tmhCB1SbT-k0,5869
74
+ doctr/models/classification/vit/tensorflow.py,sha256=W2pbZH-4HTbcHWebNwj2Aq2QfUj8YEV1a_U4VoQUmgA,6173
75
75
  doctr/models/detection/__init__.py,sha256=RqSz5beehLiqhW0PwFLFmCfTyMjofO-0umcQJLDMHjY,105
76
76
  doctr/models/detection/core.py,sha256=K2uQTIu3ttgxj7YF7i1a-X6djIGCSFjZnQQ57JQBDv0,3566
77
77
  doctr/models/detection/zoo.py,sha256=OJP8K3CKzLRmhaSe0CtvFPioXBcZcvf8__As_6xflFo,3332
@@ -82,92 +82,92 @@ doctr/models/detection/_utils/tensorflow.py,sha256=9D2ita4ZqJus2byLe7bkSIhyYExAi
82
82
  doctr/models/detection/differentiable_binarization/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
83
83
  doctr/models/detection/differentiable_binarization/base.py,sha256=fFnXH8iGLXFk4La5G19rqvId_7RDOh5H-v_IRyb1hA0,16432
84
84
  doctr/models/detection/differentiable_binarization/pytorch.py,sha256=nYOLVLsLF4zrnXK9u6mTPue7X2JR7WQe2gUb_UMDI6I,15955
85
- doctr/models/detection/differentiable_binarization/tensorflow.py,sha256=l4QltrgDMLK_eY0dxEaCDzrB8rlhVpwUmOAPNIzd_70,14506
85
+ doctr/models/detection/differentiable_binarization/tensorflow.py,sha256=XWZr1jB9i487LcrUphn7tZrZTWwJ_T3VaBvN6my-Z4c,15277
86
86
  doctr/models/detection/fast/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
87
87
  doctr/models/detection/fast/base.py,sha256=Ydm8fzKwYO_NBMnGazAYg1hpzlXZcRWJ-oKGir36DsE,10927
88
88
  doctr/models/detection/fast/pytorch.py,sha256=4FYCaMZ2vzr_j4Phu2bOXs73L_Cfvgu4LDE0Q7m8hz0,16143
89
- doctr/models/detection/fast/tensorflow.py,sha256=ps0x_AYFW5GYA2SlVQip1S4x61o2mhlSNhhJdaALnF4,15797
89
+ doctr/models/detection/fast/tensorflow.py,sha256=ZzEtP--oSXc21hCb6_sGllcexTb3wBvRUuoU8FLbnE8,15904
90
90
  doctr/models/detection/linknet/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
91
91
  doctr/models/detection/linknet/base.py,sha256=R12TMBNeOsY_UTjSFbPr7-FmLsMIJSwxdHc3e3pFLKw,10617
92
92
  doctr/models/detection/linknet/pytorch.py,sha256=sodWXaCDv1taRl3g6lgwxitvhU-ZszfN-OIofsorkp8,13810
93
- doctr/models/detection/linknet/tensorflow.py,sha256=PK3adzBG6wz_SA5lMrh0KBKpbDu-e3FaKwTZ8-ZaN-s,12914
93
+ doctr/models/detection/linknet/tensorflow.py,sha256=tZquu24-mSNe_SPg7Hsar_Q1g1__b7p5MHx9js3-oaM,13240
94
94
  doctr/models/detection/predictor/__init__.py,sha256=lwmH917kRdbUUBsE02fELIuXQNRNePpIj3iK43ey6Bg,159
95
95
  doctr/models/detection/predictor/pytorch.py,sha256=sNuMGvcKQeeOcW8QG-xWK0W59DohGYxXlKv0yK2HcNQ,2689
96
- doctr/models/detection/predictor/tensorflow.py,sha256=W96CJhjYC3-MTcLA3FTH1lLX5DZ3ueYha2b_7A4GxNk,2448
96
+ doctr/models/detection/predictor/tensorflow.py,sha256=MwsrIDDfqbU0llJ9RAW8N1QzZA2dmoOmMMj4SGF0tr8,2448
97
97
  doctr/models/factory/__init__.py,sha256=cKPoH2V2157lLMTR2zsljG3_IQHziodqR-XK_LG0D_I,19
98
- doctr/models/factory/hub.py,sha256=5IsoyiLfZO_QxM6-dK0-oaAleY8bMvvi9yP_n_W1FHs,7464
98
+ doctr/models/factory/hub.py,sha256=_JJMgJGM-eT6kFtq8SgGIbmvnpGwRe2vUN-isei6xFg,7454
99
99
  doctr/models/kie_predictor/__init__.py,sha256=lwmH917kRdbUUBsE02fELIuXQNRNePpIj3iK43ey6Bg,159
100
- doctr/models/kie_predictor/base.py,sha256=YTGdKda8zqM1H9gB8B2zFEN7C8NjFA00I-o3fRtipvA,2115
101
- doctr/models/kie_predictor/pytorch.py,sha256=TcWjWb51aoXdfRal4diRbSbJohBOwpKsDUpci6d3VfE,7990
102
- doctr/models/kie_predictor/tensorflow.py,sha256=MJTP5BlSlG50emhofPPMTKl5MgRdRTGzRhg53tdsMoE,7626
100
+ doctr/models/kie_predictor/base.py,sha256=6ZFsOYWbyd6aN3OAX32ZaOHuDLeQT8_4b9phHb38McY,2316
101
+ doctr/models/kie_predictor/pytorch.py,sha256=hwPhjldL01h6HiMRQ6Kh69JzYql9iD211fUrEBIPfp4,8179
102
+ doctr/models/kie_predictor/tensorflow.py,sha256=ei-qEj8B9NooWnq4Pa1MIfkBePqAjX0peDeLO25XN_g,7864
103
103
  doctr/models/modules/__init__.py,sha256=pouP7obVTu4p6aHkyaqa1yHKbynpvT0Hgo-LO_1U2R4,83
104
104
  doctr/models/modules/layers/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
105
105
  doctr/models/modules/layers/pytorch.py,sha256=UIidAIKfXQxlX9MbVWADLGrrPE7J496BMfgRHR73jMY,6853
106
106
  doctr/models/modules/layers/tensorflow.py,sha256=etXoKXuIeFr_LD-L0x0fhVlL-cUrjL5vFTh4cmci2P8,7145
107
107
  doctr/models/modules/transformer/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
108
108
  doctr/models/modules/transformer/pytorch.py,sha256=93wDIrV7odRORV_wOLFNsw-QSH_COjUcp9J55PPp_qA,7664
109
- doctr/models/modules/transformer/tensorflow.py,sha256=NTF-Q6ClUIMdSWDqus6kPZjOlKC3XcJ3HqUeyZTqtnU,9113
109
+ doctr/models/modules/transformer/tensorflow.py,sha256=eJjxb9B0PYD4R4ga0VQjY0RKrGyzJhOty6i5TFNNBV0,9074
110
110
  doctr/models/modules/vision_transformer/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
111
- doctr/models/modules/vision_transformer/pytorch.py,sha256=D6BbqNPV_7OFRogM0iaiWbn_6uLe3Thbo6GKRSYpfTQ,3970
112
- doctr/models/modules/vision_transformer/tensorflow.py,sha256=PaDbTtCc5YGqZNd_NFMdxeq6oNxs0WtVGYwhLCjJWFY,4199
111
+ doctr/models/modules/vision_transformer/pytorch.py,sha256=h1L7w1SIKIQ9eDU8WEXzntdum-tWMgiVnuqU_Vz81cI,3968
112
+ doctr/models/modules/vision_transformer/tensorflow.py,sha256=OENBhKQf3rw6iUW2-h63pH8aCapTG5GyPN8pOtMGR7A,4197
113
113
  doctr/models/predictor/__init__.py,sha256=lwmH917kRdbUUBsE02fELIuXQNRNePpIj3iK43ey6Bg,159
114
- doctr/models/predictor/base.py,sha256=LY910Umd0u00rrZxQNoPDcizCdsMa2cnDEg6ZQEFFjg,8157
115
- doctr/models/predictor/pytorch.py,sha256=nc2QJSdUmFLel2x6kTTgRFRNFDXNZnOKwJMSF0WmRWQ,6518
116
- doctr/models/predictor/tensorflow.py,sha256=Foiji8uEXCLX62E1JWdvlWDX3psLAQtiNd4Fpl0vyuc,6243
114
+ doctr/models/predictor/base.py,sha256=FQqIG7H7ZTBGLWKmJtJ1mcAgSidlge07iZu3XeFpQD4,8754
115
+ doctr/models/predictor/pytorch.py,sha256=LWlpgkk16gLS03uUS2TlO56YHEcZVbGec413qCxU1lI,6703
116
+ doctr/models/predictor/tensorflow.py,sha256=y11toyEbZV_nVa2FfX5QchdX5o9xn9eX0pDwHWgl26k,6465
117
117
  doctr/models/preprocessor/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
118
118
  doctr/models/preprocessor/pytorch.py,sha256=blJVqP1Xsa5GBX4pWrmaHJetCjP08Im8fry7BzLks-U,4877
119
- doctr/models/preprocessor/tensorflow.py,sha256=6ZXPxKjXQ8NRTC_FGZZ_6-mEV_5xdzmZhJzdgR2cdl4,4625
119
+ doctr/models/preprocessor/tensorflow.py,sha256=1DvrgdReXqwj6QKYTHhMYzRE3RmrOQzBGC-6odTRVvg,4643
120
120
  doctr/models/recognition/__init__.py,sha256=902nfVyvjOuUGHDKSGZgoS0fKC52J3jcUJQJhIpvOIY,124
121
121
  doctr/models/recognition/core.py,sha256=dbg8SebgfK8CPHXR-7rzmCI9XMLXmWW0jLd1yLLv_34,1593
122
122
  doctr/models/recognition/utils.py,sha256=GhNehWmCjl3GJ1ZFneA3cBRrZZk36856uU5i727FaQg,3550
123
123
  doctr/models/recognition/zoo.py,sha256=GFe7TikjfjF5nxuINrFJP7jK3hqan44kjNWoIFyYylA,2506
124
124
  doctr/models/recognition/crnn/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
125
125
  doctr/models/recognition/crnn/pytorch.py,sha256=AE8Ey-Z5VZNGUldL-crbMdyKI__OUMBmn8nYC2790Pc,11802
126
- doctr/models/recognition/crnn/tensorflow.py,sha256=dcT1X_zLmEqPiWG628lQTe9WMmfEWubXgCWFYs1BhJo,11666
126
+ doctr/models/recognition/crnn/tensorflow.py,sha256=CgAU0VTG7nI-fNMsQuEY6XhyWkSvvYnFI2LUoztFbiA,11885
127
127
  doctr/models/recognition/master/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
128
128
  doctr/models/recognition/master/base.py,sha256=5yQ0mUaS_ZWmUUzTAobgAlNS3Vp90PFvrzAcQXUF758,1540
129
129
  doctr/models/recognition/master/pytorch.py,sha256=-RpyO6mBW3ql-BjNjnh5T-EMCvxIHLIJSUkB1lzX7Uw,12260
130
- doctr/models/recognition/master/tensorflow.py,sha256=rbrPMz49ySW8Wpd72dBNOH8dvcoAl3NwBi2ID7qVkxA,12140
130
+ doctr/models/recognition/master/tensorflow.py,sha256=vXHDyWzU3K2P8fOX_6IwWWYKAV_LGPg8y5domYWf61I,12368
131
131
  doctr/models/recognition/parseq/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
132
132
  doctr/models/recognition/parseq/base.py,sha256=8MMqibB8zZLw2qU-iyx79Zpr4MdEtbnF3f3ikfLrBjU,1534
133
133
  doctr/models/recognition/parseq/pytorch.py,sha256=PAojvRwtz1qzKzW3JI_tTm1pco7mPHuX-Y-lah5mZOk,19927
134
- doctr/models/recognition/parseq/tensorflow.py,sha256=Y0DCm4p2Sjxv8_9zAYP_9rkBQZTMMtlQHoYq4hLk8-0,21632
134
+ doctr/models/recognition/parseq/tensorflow.py,sha256=ormv2HpA7dLaajBQGDLN6jGGEMHLQCGpbquCeszxj3U,21816
135
135
  doctr/models/recognition/predictor/__init__.py,sha256=lwmH917kRdbUUBsE02fELIuXQNRNePpIj3iK43ey6Bg,159
136
136
  doctr/models/recognition/predictor/_utils.py,sha256=y6hDoGS8reluLmx8JmTxM2f1uhlYnjOouh0BOr6wNTA,3389
137
137
  doctr/models/recognition/predictor/pytorch.py,sha256=snMHU0GopDEJ9HDdzpVxuvfJxVL-91Le-rc_dSqKCA0,2785
138
138
  doctr/models/recognition/predictor/tensorflow.py,sha256=o4Mhbxf9BUofqTV863U7-Zi0H77imX3LfhqzYLc2m4k,2549
139
139
  doctr/models/recognition/sar/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
140
140
  doctr/models/recognition/sar/pytorch.py,sha256=pN68aLfuqWKN6dexxeMy3DFJq1YP-MWUsUFj4BBHtXs,15118
141
- doctr/models/recognition/sar/tensorflow.py,sha256=GLChryUwWZKAc77MxwDwTS8wc9GUzQaxlVv5PpYPuGA,15045
141
+ doctr/models/recognition/sar/tensorflow.py,sha256=CqxQp9zNXxvWsAcgFMlwB40prbtIkUMTWPWYnwgSiOk,15281
142
142
  doctr/models/recognition/vitstr/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
143
143
  doctr/models/recognition/vitstr/base.py,sha256=Xt7hq45tq999boF0XgW62x_cX5wJXx7VLxWA9H06U_o,1488
144
144
  doctr/models/recognition/vitstr/pytorch.py,sha256=21N7PJbaYmO_mQKW8uS0MGXTtTyFr4QYWRsX6PTKhtU,9568
145
- doctr/models/recognition/vitstr/tensorflow.py,sha256=_8k6Jxd715uH8lsBqUCn4C_3tlgE75h_BXt4AlfYrk8,9671
145
+ doctr/models/recognition/vitstr/tensorflow.py,sha256=Ighm92HE1h5A0Xv4fJR0wcwygxGehBmiz85XpFEDVsI,9915
146
146
  doctr/models/utils/__init__.py,sha256=zwLK6mpproUGFH-1PUNiQyoR9IrAAakj7RgOiTJaBjk,200
147
- doctr/models/utils/pytorch.py,sha256=bO8a432TzpHTuqAsFuAi2ld6NOT12E2rlghQlW4nAjg,5494
148
- doctr/models/utils/tensorflow.py,sha256=VccfK6cyPoWuWGWAWbl17MkLa1srtHU-HJCbb_MXePw,6322
147
+ doctr/models/utils/pytorch.py,sha256=RiCNOVnOoMMXboOcyOxMnmi_88x40Ed9q8gNrq8qOZM,5520
148
+ doctr/models/utils/tensorflow.py,sha256=JYGH16yYn_8cy1g0NEcizDzRhSaopAYH-K4ooCwt7Hk,6179
149
149
  doctr/transforms/__init__.py,sha256=0VHbvUZ7llFd1e_7_JdWTaxYMCvaR6KbUJaYJequmQI,23
150
150
  doctr/transforms/functional/__init__.py,sha256=FBZ2YT2Cq3mj6vpDC3ff5TcMpagNWFhwxQ_brdsgBqo,172
151
151
  doctr/transforms/functional/base.py,sha256=c2PYwU4ZDDDwTGqgaIdOTP71XZ7lo458yc3CimYxiWQ,6943
152
- doctr/transforms/functional/pytorch.py,sha256=itjgP7LgIdnPNbIjPqtrZHcxGAlTFg8NP8yBtg9bEco,5007
152
+ doctr/transforms/functional/pytorch.py,sha256=_7ZjWlwadGOvh4Qf--0mWYbtzK7A3Crbgo-2yNIF1yg,5031
153
153
  doctr/transforms/functional/tensorflow.py,sha256=35dYnCtA9A9SvjndEvckxD8rK_uZ1_4BTgBZ7WiBtGI,9959
154
154
  doctr/transforms/modules/__init__.py,sha256=a4GXc5YZWt26eeBKo2HqLmbDn1_qo-uko6GoPNrniC0,221
155
155
  doctr/transforms/modules/base.py,sha256=fwaXQhjuR514-fl4FqVZnb_NsOxkRtE8Yh_hiE2uCTU,9970
156
- doctr/transforms/modules/pytorch.py,sha256=RCQ1MT9M4bipp5ghIQnxArvg7SjnT7xzHgShtlZmJcA,10937
157
- doctr/transforms/modules/tensorflow.py,sha256=z1bR_Qk_QKSqeJByKrMTUsJyEekuCjr-ik8NO66nyyo,20348
156
+ doctr/transforms/modules/pytorch.py,sha256=J-6QwbQYD7mq0ohEvIPOCvNqlB-Wvd7mzMkYxGudyqo,10872
157
+ doctr/transforms/modules/tensorflow.py,sha256=zcTESs-A92Ktrqyumb6MeNb5NaCQqt1wzJ04uBb6T8U,20440
158
158
  doctr/utils/__init__.py,sha256=uQY9ibZ24V896fmihIsK23QOIZdKtk0HyKoCVJ_lLuM,95
159
159
  doctr/utils/common_types.py,sha256=KXG-4mvL1MPmkrjuhCs8vAfiaBmdGRmt2yQcNlgALM8,584
160
160
  doctr/utils/data.py,sha256=26iN_Ra1OJD_LHIEbefADMxU2yVtCpu3gYdhCW5K9B4,4280
161
161
  doctr/utils/fonts.py,sha256=QqtfTDNCEKPb1drUbpXEhVDxtHWhKCKcGHC1l_t2_iI,1336
162
- doctr/utils/geometry.py,sha256=zMgWMshx5uUqqUPgv8DJGAso96qa7yHu_0UnbzqsGOA,16459
163
- doctr/utils/metrics.py,sha256=rWZUZGDhIaR422riqH3E5Mhvy_D6QwjKIz55PnILWlI,20552
162
+ doctr/utils/geometry.py,sha256=Lwj9h8P5p7zLQDsf03nxrBRRyvVJRCnS1RINsSELafw,19641
163
+ doctr/utils/metrics.py,sha256=-9Ks1myFqa3NPfLKMYUxuH09Bd-dz_VZLzNrM95j5c4,20552
164
164
  doctr/utils/multithreading.py,sha256=iEM6o_qjutH-CxFTz7K1VQseYpVaHH3Hpw_yNDoQBSw,1989
165
- doctr/utils/reconstitution.py,sha256=O-AaibQRlfhKxCAiqd_lYhXzgoRtFMQgdRwCtuQU1fI,4770
165
+ doctr/utils/reconstitution.py,sha256=LPujIo2NMduqnfXH6gFcT5LZXnYgrjdq3X-RvzLJdlA,7323
166
166
  doctr/utils/repr.py,sha256=3GdMquo1NtwNkQPoB-nmDm_AFmU3sLc4T3VfGck9uoQ,2111
167
167
  doctr/utils/visualization.py,sha256=L6UXyxecH2NVSA_u-OL0_TJ0HGLD5ROAyEaL59I7buI,13277
168
- python_doctr-0.9.0.dist-info/LICENSE,sha256=75RTSsXOsAYhGpxsHc9U41ep6GS7vrUPufeekgoeOXM,11336
169
- python_doctr-0.9.0.dist-info/METADATA,sha256=KU5hLGiNSLrBVfS7SBrgNkr4vGIB-OSXaU-nPQf8fRM,33351
170
- python_doctr-0.9.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
171
- python_doctr-0.9.0.dist-info/top_level.txt,sha256=lCgp4pmjPI3HYph62XhfzA3jRwM715kGtJPmqIUJ9t8,6
172
- python_doctr-0.9.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
173
- python_doctr-0.9.0.dist-info/RECORD,,
168
+ python_doctr-0.10.0.dist-info/LICENSE,sha256=75RTSsXOsAYhGpxsHc9U41ep6GS7vrUPufeekgoeOXM,11336
169
+ python_doctr-0.10.0.dist-info/METADATA,sha256=aYC4njpsGWuHN6z2qS_n3PmBJ4mftnzHBV5tKoVLvf4,33350
170
+ python_doctr-0.10.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
171
+ python_doctr-0.10.0.dist-info/top_level.txt,sha256=lCgp4pmjPI3HYph62XhfzA3jRwM715kGtJPmqIUJ9t8,6
172
+ python_doctr-0.10.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
173
+ python_doctr-0.10.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5