doctra 0.3.2__py3-none-any.whl → 0.4.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.
- doctra/__init__.py +4 -0
- doctra/cli/main.py +168 -0
- doctra/engines/image_restoration/__init__.py +10 -0
- doctra/engines/image_restoration/docres_engine.py +566 -0
- doctra/engines/vlm/service.py +0 -12
- doctra/parsers/enhanced_pdf_parser.py +370 -0
- doctra/parsers/structured_pdf_parser.py +11 -60
- doctra/parsers/table_chart_extractor.py +8 -44
- doctra/third_party/docres/data/MBD/MBD.py +110 -0
- doctra/third_party/docres/data/MBD/MBD_utils.py +291 -0
- doctra/third_party/docres/data/MBD/infer.py +151 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/aspp.py +95 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/__init__.py +13 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/drn.py +402 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/mobilenet.py +151 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/resnet.py +170 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/xception.py +288 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/decoder.py +59 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/deeplab.py +81 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/__init__.py +12 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/batchnorm.py +282 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/comm.py +129 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/replicate.py +88 -0
- doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/unittest.py +29 -0
- doctra/third_party/docres/data/preprocess/crop_merge_image.py +142 -0
- doctra/third_party/docres/inference.py +370 -0
- doctra/third_party/docres/models/restormer_arch.py +308 -0
- doctra/third_party/docres/utils.py +464 -0
- doctra/ui/app.py +5 -32
- doctra/utils/progress.py +13 -98
- doctra/utils/structured_utils.py +45 -49
- doctra/version.py +1 -1
- {doctra-0.3.2.dist-info → doctra-0.4.0.dist-info}/METADATA +1 -1
- doctra-0.4.0.dist-info/RECORD +67 -0
- doctra-0.3.2.dist-info/RECORD +0 -44
- {doctra-0.3.2.dist-info → doctra-0.4.0.dist-info}/WHEEL +0 -0
- {doctra-0.3.2.dist-info → doctra-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {doctra-0.3.2.dist-info → doctra-0.4.0.dist-info}/top_level.txt +0 -0
doctra/utils/progress.py
CHANGED
@@ -40,7 +40,6 @@ def _detect_environment() -> Tuple[bool, bool, bool]:
|
|
40
40
|
Returns (is_notebook, is_tty, is_windows).
|
41
41
|
"""
|
42
42
|
is_notebook = "ipykernel" in sys.modules or "jupyter" in sys.modules
|
43
|
-
# Colab/Kaggle specifics
|
44
43
|
if "google.colab" in sys.modules:
|
45
44
|
is_notebook = True
|
46
45
|
if "kaggle_secrets" in sys.modules or "kaggle_web_client" in sys.modules:
|
@@ -59,7 +58,6 @@ def _select_emoji(key: str) -> str:
|
|
59
58
|
- ascii: ASCII text tokens
|
60
59
|
- none: empty prefix
|
61
60
|
"""
|
62
|
-
# Maps
|
63
61
|
default_map = {
|
64
62
|
"loading": "🔄",
|
65
63
|
"charts": "📊",
|
@@ -70,14 +68,13 @@ def _select_emoji(key: str) -> str:
|
|
70
68
|
"processing": "⚙️",
|
71
69
|
}
|
72
70
|
safe_map = {
|
73
|
-
# Use BMP or geometric shapes likely to render everywhere
|
74
71
|
"loading": "⏳",
|
75
72
|
"charts": "▦",
|
76
73
|
"tables": "▤",
|
77
74
|
"figures": "▧",
|
78
75
|
"ocr": "🔎",
|
79
76
|
"vlm": "★",
|
80
|
-
"processing": "⚙",
|
77
|
+
"processing": "⚙",
|
81
78
|
}
|
82
79
|
ascii_map = {
|
83
80
|
"loading": "[loading]",
|
@@ -89,13 +86,11 @@ def _select_emoji(key: str) -> str:
|
|
89
86
|
"processing": "[processing]",
|
90
87
|
}
|
91
88
|
|
92
|
-
# Determine effective mode
|
93
89
|
mode = _PROGRESS_CONFIG.emoji_mode
|
94
90
|
is_notebook, _, is_windows = _detect_environment()
|
95
91
|
if not _PROGRESS_CONFIG.use_emoji:
|
96
92
|
mode = "none"
|
97
93
|
elif mode == "default":
|
98
|
-
# Heuristics: prefer safe in Colab/Kaggle notebooks and Windows terminals
|
99
94
|
if is_windows or "google.colab" in sys.modules or "kaggle_secrets" in sys.modules:
|
100
95
|
mode = "safe"
|
101
96
|
|
@@ -105,7 +100,6 @@ def _select_emoji(key: str) -> str:
|
|
105
100
|
return ascii_map.get(key, "")
|
106
101
|
if mode == "safe":
|
107
102
|
return safe_map.get(key, safe_map["processing"])
|
108
|
-
# default
|
109
103
|
return default_map.get(key, default_map["processing"])
|
110
104
|
|
111
105
|
|
@@ -119,17 +113,13 @@ def _supports_unicode_output() -> bool:
|
|
119
113
|
except Exception:
|
120
114
|
pass
|
121
115
|
|
122
|
-
# Heuristics for common notebook environments that support emoji
|
123
116
|
env = os.environ
|
124
117
|
if any(k in env for k in ("COLAB_GPU", "GCE_METADATA_HOST", "KAGGLE_KERNEL_RUN_TYPE", "JPY_PARENT_PID")):
|
125
118
|
return True
|
126
119
|
|
127
|
-
# On modern Windows terminals with UTF-8 code page, assume yes
|
128
120
|
if sys.platform.startswith("win"):
|
129
|
-
# If user opted-in to force ASCII, respect it
|
130
121
|
if _PROGRESS_CONFIG.force_ascii:
|
131
122
|
return False
|
132
|
-
# Try to detect WT/Terminal/VSCode which usually handle Unicode
|
133
123
|
if any(k in env for k in ("WT_SESSION", "TERM_PROGRAM", "VSCODE_PID")):
|
134
124
|
return True
|
135
125
|
|
@@ -161,19 +151,15 @@ def create_beautiful_progress_bar(
|
|
161
151
|
:return: Configured tqdm progress bar instance
|
162
152
|
"""
|
163
153
|
|
164
|
-
# Enhanced styling parameters - notebook-friendly format
|
165
154
|
is_notebook, is_tty, is_windows = _detect_environment()
|
166
155
|
if is_notebook:
|
167
|
-
# Simpler format for notebooks to avoid display issues
|
168
156
|
bar_format = "{desc}: {percentage:3.0f}%|{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}]"
|
169
157
|
else:
|
170
|
-
# Full format for terminal
|
171
158
|
bar_format = (
|
172
159
|
"{l_bar}{bar:30}| {n_fmt}/{total_fmt} "
|
173
160
|
"[{elapsed}<{remaining}, {rate_fmt}{postfix}]"
|
174
161
|
)
|
175
162
|
|
176
|
-
# Color schemes based on operation type
|
177
163
|
color_schemes = {
|
178
164
|
"loading": {"colour": "cyan", "ncols": 100},
|
179
165
|
"charts": {"colour": "green", "ncols": 100},
|
@@ -184,7 +170,6 @@ def create_beautiful_progress_bar(
|
|
184
170
|
"processing": {"colour": "white", "ncols": 100},
|
185
171
|
}
|
186
172
|
|
187
|
-
# Determine color scheme based on description
|
188
173
|
desc_lower = desc.lower()
|
189
174
|
if "loading" in desc_lower or "model" in desc_lower:
|
190
175
|
color_scheme = color_schemes["loading"]
|
@@ -201,45 +186,37 @@ def create_beautiful_progress_bar(
|
|
201
186
|
else:
|
202
187
|
color_scheme = color_schemes["processing"]
|
203
188
|
|
204
|
-
# Emoji categories
|
205
189
|
emoji_categories = {"loading", "charts", "tables", "figures", "ocr", "vlm", "processing"}
|
206
190
|
|
207
|
-
# Add appropriate emoji to description (can be disabled)
|
208
191
|
if _PROGRESS_CONFIG.use_emoji:
|
209
192
|
prefix_key = next((k for k in emoji_categories if k in desc_lower), "processing")
|
210
193
|
prefix = _select_emoji(prefix_key)
|
211
194
|
if prefix:
|
212
195
|
desc = f"{prefix} {desc}"
|
213
196
|
|
214
|
-
# Enhanced tqdm configuration
|
215
197
|
tqdm_config = {
|
216
198
|
"total": total,
|
217
199
|
"desc": desc,
|
218
200
|
"leave": leave,
|
219
201
|
"bar_format": bar_format,
|
220
202
|
"ncols": _PROGRESS_CONFIG.ncols_env or color_scheme["ncols"],
|
221
|
-
# Prefer Unicode unless user forces ASCII or environment lacks Unicode support
|
222
203
|
"ascii": _PROGRESS_CONFIG.force_ascii or not _supports_unicode_output(),
|
223
|
-
"dynamic_ncols": True,
|
224
|
-
"smoothing": 0.3,
|
225
|
-
"mininterval": 0.1,
|
226
|
-
"maxinterval": 1.0,
|
204
|
+
"dynamic_ncols": True,
|
205
|
+
"smoothing": 0.3,
|
206
|
+
"mininterval": 0.1,
|
207
|
+
"maxinterval": 1.0,
|
227
208
|
"position": position,
|
228
209
|
**kwargs
|
229
210
|
}
|
230
211
|
|
231
|
-
# Enhanced environment detection
|
232
212
|
is_notebook, is_terminal, is_windows = _detect_environment()
|
233
213
|
|
234
|
-
# Add color only for terminal environments (not notebooks)
|
235
214
|
if not is_notebook and is_terminal:
|
236
215
|
tqdm_config["colour"] = color_scheme["colour"]
|
237
216
|
|
238
|
-
# Respect global disable
|
239
217
|
if _PROGRESS_CONFIG.disable:
|
240
218
|
tqdm_config["disable"] = True
|
241
219
|
|
242
|
-
# Try creating the progress bar with Unicode, fallback to ASCII on failure (e.g., Windows code page)
|
243
220
|
if is_notebook:
|
244
221
|
tqdm_config.pop("colour", None)
|
245
222
|
try:
|
@@ -297,7 +274,6 @@ def update_progress_with_info(
|
|
297
274
|
:param info: Optional dictionary of information to display
|
298
275
|
"""
|
299
276
|
if info:
|
300
|
-
# Format info as postfix
|
301
277
|
postfix_parts = []
|
302
278
|
for key, value in info.items():
|
303
279
|
if isinstance(value, float):
|
@@ -354,83 +330,22 @@ def create_notebook_friendly_bar(
|
|
354
330
|
**kwargs
|
355
331
|
) -> tqdm:
|
356
332
|
"""
|
357
|
-
Create a notebook-friendly progress bar with consistent sizing
|
333
|
+
Create a notebook-friendly progress bar with consistent sizing.
|
358
334
|
|
359
|
-
This function creates progress bars
|
360
|
-
|
361
|
-
with the main progress bar styling.
|
335
|
+
This function creates progress bars that match the main progress bar
|
336
|
+
styling and behavior in notebook environments.
|
362
337
|
|
363
338
|
:param total: Total number of items to process
|
364
339
|
:param desc: Description text for the progress bar
|
365
340
|
:param kwargs: Additional tqdm parameters
|
366
341
|
:return: Configured notebook-friendly progress bar
|
367
342
|
"""
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
kwargs["disable"] = False
|
373
|
-
# Prefer Unicode in notebooks if supported
|
374
|
-
if "ascii" not in kwargs:
|
375
|
-
kwargs["ascii"] = _PROGRESS_CONFIG.force_ascii or not _supports_unicode_output()
|
376
|
-
|
377
|
-
# Emoji categories
|
378
|
-
emoji_categories = {"loading", "charts", "tables", "figures", "ocr", "vlm", "processing"}
|
379
|
-
|
380
|
-
# Add appropriate emoji to description
|
381
|
-
desc_lower = desc.lower()
|
382
|
-
if _PROGRESS_CONFIG.use_emoji:
|
383
|
-
prefix_key = next((k for k in emoji_categories if k in desc_lower), "processing")
|
384
|
-
prefix = _select_emoji(prefix_key)
|
385
|
-
if prefix:
|
386
|
-
desc = f"{prefix} {desc}"
|
387
|
-
|
388
|
-
# Use same format as main progress bar for consistency
|
389
|
-
bar_format = "{desc}: {percentage:3.0f}%|{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}]"
|
390
|
-
|
391
|
-
# Color schemes based on operation type (same as main progress bar)
|
392
|
-
color_schemes = {
|
393
|
-
"loading": {"colour": "cyan", "ncols": 100},
|
394
|
-
"charts": {"colour": "green", "ncols": 100},
|
395
|
-
"tables": {"colour": "blue", "ncols": 100},
|
396
|
-
"figures": {"colour": "magenta", "ncols": 100},
|
397
|
-
"ocr": {"colour": "yellow", "ncols": 100},
|
398
|
-
"vlm": {"colour": "red", "ncols": 100},
|
399
|
-
"processing": {"colour": "white", "ncols": 100},
|
400
|
-
}
|
401
|
-
|
402
|
-
# Determine color scheme based on description
|
403
|
-
if "loading" in desc_lower or "model" in desc_lower:
|
404
|
-
color_scheme = color_schemes["loading"]
|
405
|
-
elif "chart" in desc_lower:
|
406
|
-
color_scheme = color_schemes["charts"]
|
407
|
-
elif "table" in desc_lower:
|
408
|
-
color_scheme = color_schemes["tables"]
|
409
|
-
elif "figure" in desc_lower:
|
410
|
-
color_scheme = color_schemes["figures"]
|
411
|
-
elif "ocr" in desc_lower:
|
412
|
-
color_scheme = color_schemes["ocr"]
|
413
|
-
elif "vlm" in desc_lower:
|
414
|
-
color_scheme = color_schemes["vlm"]
|
415
|
-
else:
|
416
|
-
color_scheme = color_schemes["processing"]
|
417
|
-
|
418
|
-
tqdm_config = {
|
419
|
-
"total": total,
|
420
|
-
"desc": desc,
|
421
|
-
"leave": True,
|
422
|
-
"bar_format": bar_format,
|
423
|
-
"ncols": _PROGRESS_CONFIG.ncols_env or color_scheme["ncols"], # Use same width as main progress bar
|
424
|
-
"ascii": kwargs.get("ascii", False),
|
425
|
-
"dynamic_ncols": True, # Enable responsive width like main progress bar
|
426
|
-
"smoothing": 0.3, # Use same smoothing as main progress bar
|
427
|
-
"mininterval": 0.1, # Use same intervals as main progress bar
|
428
|
-
"maxinterval": 1.0,
|
343
|
+
return create_beautiful_progress_bar(
|
344
|
+
total=total,
|
345
|
+
desc=desc,
|
346
|
+
leave=True,
|
429
347
|
**kwargs
|
430
|
-
|
431
|
-
|
432
|
-
# Use regular tqdm instead of tqdm_auto to avoid interactive widgets
|
433
|
-
return tqdm(**tqdm_config)
|
348
|
+
)
|
434
349
|
|
435
350
|
|
436
351
|
def progress_for(iterable: Iterable[Any], desc: str, total: Optional[int] = None, leave: bool = True, **kwargs) -> Iterator[Any]:
|
doctra/utils/structured_utils.py
CHANGED
@@ -1,49 +1,45 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
from typing import Any, Dict, Optional
|
3
|
-
import json
|
4
|
-
|
5
|
-
try:
|
6
|
-
from pydantic import BaseModel # type: ignore
|
7
|
-
except Exception:
|
8
|
-
class BaseModel:
|
9
|
-
pass
|
10
|
-
|
11
|
-
def to_structured_dict(obj: Any) -> Optional[Dict[str, Any]]:
|
12
|
-
"""
|
13
|
-
Accepts a VLM result that might be:
|
14
|
-
- JSON string
|
15
|
-
- dict
|
16
|
-
- Pydantic BaseModel (v1 .dict() or v2 .model_dump())
|
17
|
-
Returns a normalized dict with keys: title, headers, rows — or None.
|
18
|
-
"""
|
19
|
-
if obj is None:
|
20
|
-
return None
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
return
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
return None
|
47
|
-
return {"title": title, "headers": headers, "rows": rows}
|
48
|
-
|
49
|
-
return None
|
1
|
+
from __future__ import annotations
|
2
|
+
from typing import Any, Dict, Optional
|
3
|
+
import json
|
4
|
+
|
5
|
+
try:
|
6
|
+
from pydantic import BaseModel # type: ignore
|
7
|
+
except Exception:
|
8
|
+
class BaseModel:
|
9
|
+
pass
|
10
|
+
|
11
|
+
def to_structured_dict(obj: Any) -> Optional[Dict[str, Any]]:
|
12
|
+
"""
|
13
|
+
Accepts a VLM result that might be:
|
14
|
+
- JSON string
|
15
|
+
- dict
|
16
|
+
- Pydantic BaseModel (v1 .dict() or v2 .model_dump())
|
17
|
+
Returns a normalized dict with keys: title, headers, rows — or None.
|
18
|
+
"""
|
19
|
+
if obj is None:
|
20
|
+
return None
|
21
|
+
|
22
|
+
if isinstance(obj, str):
|
23
|
+
try:
|
24
|
+
obj = json.loads(obj)
|
25
|
+
except Exception:
|
26
|
+
return None
|
27
|
+
|
28
|
+
if isinstance(obj, BaseModel):
|
29
|
+
try:
|
30
|
+
return obj.model_dump()
|
31
|
+
except Exception:
|
32
|
+
try:
|
33
|
+
return obj.dict()
|
34
|
+
except Exception:
|
35
|
+
return None
|
36
|
+
|
37
|
+
if isinstance(obj, dict):
|
38
|
+
title = obj.get("title") or "Untitled"
|
39
|
+
headers = obj.get("headers") or []
|
40
|
+
rows = obj.get("rows") or []
|
41
|
+
if not isinstance(headers, list) or not isinstance(rows, list):
|
42
|
+
return None
|
43
|
+
return {"title": title, "headers": headers, "rows": rows}
|
44
|
+
|
45
|
+
return None
|
doctra/version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
"""Version information for Doctra."""
|
2
|
-
__version__ = '0.
|
2
|
+
__version__ = '0.4.0'
|
@@ -0,0 +1,67 @@
|
|
1
|
+
doctra/__init__.py,sha256=rNLCyODOpaPb_TTP6qmQnuWZJW9JPXrxg1IfKnvb1No,773
|
2
|
+
doctra/version.py,sha256=PSDo-SLZhu8_cWgmtvzLjHyKr7C8D_F61M1tiywnuKY,62
|
3
|
+
doctra/cli/__init__.py,sha256=4PTujjYRShOOUlZ7PwuWckShPWLC4v4CYIhJpzgyv1k,911
|
4
|
+
doctra/cli/main.py,sha256=6b415qg-8gV4M2Uf0WvdU_nFx65DYFgRu5Q3Ys_LvAo,43756
|
5
|
+
doctra/cli/utils.py,sha256=IghiUZQCOmXODC5-5smHGz2KeV4xqbP4avmA1Mggln0,11800
|
6
|
+
doctra/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
doctra/engines/image_restoration/__init__.py,sha256=vzcN6Rw7_U-5jIK2pdo2NlgqdLdXDShigrOGM7QLNEE,263
|
8
|
+
doctra/engines/image_restoration/docres_engine.py,sha256=6j2LfoqirmEEmLTOsz8nkhqaHUQHjYbJr-2MR01i6Gc,21754
|
9
|
+
doctra/engines/layout/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
+
doctra/engines/layout/layout_models.py,sha256=vuTzjWd3FD-SkFPngktmUVhOJ6Xvff6ufwFEq796PQs,3162
|
11
|
+
doctra/engines/layout/paddle_layout.py,sha256=P2-Gk8wHpWoA5Jpmo_3OLI59zWq3HeAOBOUKKVdXu8I,6792
|
12
|
+
doctra/engines/ocr/__init__.py,sha256=h6bFiveGXdI59fsKzCqOXki3C74DCndEmvloOtMqnR0,133
|
13
|
+
doctra/engines/ocr/api.py,sha256=YOBKDLExXpvSiOsc_TDJasaMPxzdVx1llQCtYlsruWo,1280
|
14
|
+
doctra/engines/ocr/path_resolver.py,sha256=2_7Nsekt3dCDU3oVsgdr62iMrlAhbGNfYwgh4G7S3pA,1492
|
15
|
+
doctra/engines/ocr/pytesseract_engine.py,sha256=Imz2uwju6himkBiS8CH7DLxBRe-LtmMYZiOdb_6PoQw,2911
|
16
|
+
doctra/engines/vlm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
+
doctra/engines/vlm/outlines_types.py,sha256=qL-G6MNiA5mxp1qAPVEFhOANp4NqVt_MQKseJCr_xXE,970
|
18
|
+
doctra/engines/vlm/provider.py,sha256=aE8Eo1U-8XqAimakNlT0-T4etIyCV8rZ3DwxdqbFeTc,3131
|
19
|
+
doctra/engines/vlm/service.py,sha256=4ExDbLmyyC3ICXxr7OSIqvbOdrwbIJek-DE54vAUgDA,4151
|
20
|
+
doctra/exporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
+
doctra/exporters/excel_writer.py,sha256=U5Eb5SF7_ll1QveUapSWSkCRt3OEoisKEVUQ_7X8Wjo,7762
|
22
|
+
doctra/exporters/html_writer.py,sha256=OlW24Eg5bZcjldRHtd3GDD7RrajuRXj43EJpXIJkYf8,38810
|
23
|
+
doctra/exporters/image_saver.py,sha256=zsPoQ0CwoE643ui4iZMdXk96kv5mU8L_zC2JfF22N1A,1639
|
24
|
+
doctra/exporters/markdown_table.py,sha256=4_OJIwG_WoIPYBzJx1njy_3tNVdkK6QKSP-P9r-b0zw,2030
|
25
|
+
doctra/exporters/markdown_writer.py,sha256=L7EjF2MB8jYX7XkZ3a3NeeEC8gnb0qzRPTzIN9tdfuw,1027
|
26
|
+
doctra/parsers/__init__.py,sha256=8M6LVzcWGpuTIK_1SMXML3ll7zK1CTHXGI5qXvqdm-A,206
|
27
|
+
doctra/parsers/enhanced_pdf_parser.py,sha256=7KfkQexXTxbi8Naen7HFlFaeoEGpfdbYbvRqkTXw22A,18095
|
28
|
+
doctra/parsers/layout_order.py,sha256=W6b-T11H907RZ2FaZwNvnYhmvH11rpUzxC5yLkdf28k,640
|
29
|
+
doctra/parsers/structured_pdf_parser.py,sha256=QIZIS5SAaIdGiT8o7G_a4D-Cht7nVLGeSuVzqSYLn14,19160
|
30
|
+
doctra/parsers/table_chart_extractor.py,sha256=kSubqX0n0kVu_3jzX6QUyKmEGs9sG3Bg9kzUzn2wPHo,13733
|
31
|
+
doctra/third_party/docres/inference.py,sha256=krD5EQDiqki-5uTMqqHYivhL38sfSOhYgaihI751070,13576
|
32
|
+
doctra/third_party/docres/utils.py,sha256=N0ZVmOTB3wsinFlYu5hT84C4_MhWGdc98T8LTG-S9dA,14566
|
33
|
+
doctra/third_party/docres/data/MBD/MBD.py,sha256=-d6cVQX1FVcGmQ_yJ5l-PQ3xKmkmveQQBytZ38pEGfY,4653
|
34
|
+
doctra/third_party/docres/data/MBD/MBD_utils.py,sha256=z8La4F-yglk6fh8KraBUom8QXJLseYden7OBmFtoO7g,11783
|
35
|
+
doctra/third_party/docres/data/MBD/infer.py,sha256=xm9ZCnLJLV5TxJjAH-ith7pSFI18J_8CEUpcYCFDLu8,6205
|
36
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/aspp.py,sha256=IdVcmhl88N6vFe2bnr-G4CEtbUxLSfhKa9T-Wy60otM,3708
|
37
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/decoder.py,sha256=5eQ9FT-J1Bd-CmA2dYXvVo_PjrpEy-RmSjESLpNReBA,2435
|
38
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/deeplab.py,sha256=u8pNRvuBzZoDhlr8IsxPzjN2-sMBN3ZnyBFydS9aGj8,3111
|
39
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/__init__.py,sha256=TsynqBTJgmodrSTDqlKlbYdnYkJJd19lsDrpR-3XMno,539
|
40
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/drn.py,sha256=M3kHjU4stdY7B-urpkmEmw-aTJ1dleOGXNOqGv2JrxU,15034
|
41
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/mobilenet.py,sha256=yBqu1LLs7M_5NIztnC8alB42E2xT59pvziIFhYNrMkY,5553
|
42
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/resnet.py,sha256=W53_VRAlrkY743s_Kpt9MLP3cFVJ0zYVW2J7EBhUQW4,6704
|
43
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/backbone/xception.py,sha256=HupHNVeeWNsiX8tWy8lQ0ZPUtrf_AaO7rwf_1xV_k0I,11854
|
44
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/__init__.py,sha256=LHo9Qoia89mwgGImciJALSiMjdzpFHWLwXEi52S6aRg,458
|
45
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/batchnorm.py,sha256=62Ku4DciMwETTxyjFFPxDB8-UJl53Vi3MCtb82lbfkA,13213
|
46
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/comm.py,sha256=bGjH2iEqQXOfXmuzm3zzGuB1Ocui6N79Nd8rVGgLqag,4569
|
47
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/replicate.py,sha256=idizPejwQvHo6W38VoBMcBF3kb7_zlrRvPBqg2Pi-Ko,3305
|
48
|
+
doctra/third_party/docres/data/MBD/model/deep_lab_model/sync_batchnorm/unittest.py,sha256=Ub3j1dz25V09d6wL5lpwR4NNQ4cktOe4mzzpOP-jLd4,863
|
49
|
+
doctra/third_party/docres/data/preprocess/crop_merge_image.py,sha256=f2NANY92s6IQ1hl1MAXfftFPIyIrj24O4TONjg7SXEc,4747
|
50
|
+
doctra/third_party/docres/models/restormer_arch.py,sha256=BSwv_odCcp4HUZj3gv21e4IzFRBiyk8FjKAO8kF4YS8,12510
|
51
|
+
doctra/ui/__init__.py,sha256=XzOOKeGSBnUREuDQiCIWds1asFSa2nypFQTJXwclROA,85
|
52
|
+
doctra/ui/app.py,sha256=WpXUWHSs7wSYNjY4iBOZJHsKGQ88jDytvOFIjuhqAGE,44031
|
53
|
+
doctra/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
+
doctra/utils/bbox.py,sha256=R2-95p0KiWvet3TH27TQVvCar7WJg6z0u3L21iEDF-A,674
|
55
|
+
doctra/utils/constants.py,sha256=ZWOvNDrvETbQ_pxHiX7vUW4J5Oj8_qnov0QacUOBizI,189
|
56
|
+
doctra/utils/file_ops.py,sha256=3IS0EQncs6Kaj27fcg2zxQX3xRSvtItIsyKGLYgeOgw,815
|
57
|
+
doctra/utils/io_utils.py,sha256=L1bWV4-ybs2j_3ZEN7GfQVgdC73JKVECVnpwKbP0dy0,219
|
58
|
+
doctra/utils/ocr_utils.py,sha256=Doa1uYBg3kRgRYd2aPq9fICHgHfrM_efdhZfI7jl6OM,780
|
59
|
+
doctra/utils/pdf_io.py,sha256=c8EY47Z1iqVtlLFHS_n0qGuXJ5ERFaMUd84ivXV0b9E,706
|
60
|
+
doctra/utils/progress.py,sha256=IKQ_YErWSEd4hddYMUiCORy0_kW4TOYJM891HUEq2_E,11901
|
61
|
+
doctra/utils/quiet.py,sha256=5XPS-1CtJ0sVk6qgSQctdhr_wR8mP1xoJLoUbmkXROA,387
|
62
|
+
doctra/utils/structured_utils.py,sha256=znC2zr80rZMfIV58lipZ8M4zPq6IF070pdwLBve1qiE,1251
|
63
|
+
doctra-0.4.0.dist-info/licenses/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
|
64
|
+
doctra-0.4.0.dist-info/METADATA,sha256=nlIT-QfxcwWi97jbQIastNHty8if3CyUv0LaDGiK7tk,28298
|
65
|
+
doctra-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
66
|
+
doctra-0.4.0.dist-info/top_level.txt,sha256=jI7E8jHci2gP9y0GYaWxlg9jG0O5n3FjHJJPLXDXMds,7
|
67
|
+
doctra-0.4.0.dist-info/RECORD,,
|
doctra-0.3.2.dist-info/RECORD
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
doctra/__init__.py,sha256=ST_c2GWBoB0y_wpL1qsOeK4bR1RyJhMMn6I5VjVRI6Y,613
|
2
|
-
doctra/version.py,sha256=ioiNbDzSUf2zah2WhqG2TDJrYEKwp5tlGXIhVsPeCWE,62
|
3
|
-
doctra/cli/__init__.py,sha256=4PTujjYRShOOUlZ7PwuWckShPWLC4v4CYIhJpzgyv1k,911
|
4
|
-
doctra/cli/main.py,sha256=o_W1b5kx3xaTbWK6l4IYi0YLwffKBj5pQKflnlaG2Fw,35611
|
5
|
-
doctra/cli/utils.py,sha256=IghiUZQCOmXODC5-5smHGz2KeV4xqbP4avmA1Mggln0,11800
|
6
|
-
doctra/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
-
doctra/engines/layout/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
doctra/engines/layout/layout_models.py,sha256=vuTzjWd3FD-SkFPngktmUVhOJ6Xvff6ufwFEq796PQs,3162
|
9
|
-
doctra/engines/layout/paddle_layout.py,sha256=P2-Gk8wHpWoA5Jpmo_3OLI59zWq3HeAOBOUKKVdXu8I,6792
|
10
|
-
doctra/engines/ocr/__init__.py,sha256=h6bFiveGXdI59fsKzCqOXki3C74DCndEmvloOtMqnR0,133
|
11
|
-
doctra/engines/ocr/api.py,sha256=YOBKDLExXpvSiOsc_TDJasaMPxzdVx1llQCtYlsruWo,1280
|
12
|
-
doctra/engines/ocr/path_resolver.py,sha256=2_7Nsekt3dCDU3oVsgdr62iMrlAhbGNfYwgh4G7S3pA,1492
|
13
|
-
doctra/engines/ocr/pytesseract_engine.py,sha256=Imz2uwju6himkBiS8CH7DLxBRe-LtmMYZiOdb_6PoQw,2911
|
14
|
-
doctra/engines/vlm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
doctra/engines/vlm/outlines_types.py,sha256=qL-G6MNiA5mxp1qAPVEFhOANp4NqVt_MQKseJCr_xXE,970
|
16
|
-
doctra/engines/vlm/provider.py,sha256=aE8Eo1U-8XqAimakNlT0-T4etIyCV8rZ3DwxdqbFeTc,3131
|
17
|
-
doctra/engines/vlm/service.py,sha256=Jwws2Jw68-IdHyvEWks4UCoP7Olhqt8IpXfCv5Z7Ml4,4724
|
18
|
-
doctra/exporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
doctra/exporters/excel_writer.py,sha256=U5Eb5SF7_ll1QveUapSWSkCRt3OEoisKEVUQ_7X8Wjo,7762
|
20
|
-
doctra/exporters/html_writer.py,sha256=OlW24Eg5bZcjldRHtd3GDD7RrajuRXj43EJpXIJkYf8,38810
|
21
|
-
doctra/exporters/image_saver.py,sha256=zsPoQ0CwoE643ui4iZMdXk96kv5mU8L_zC2JfF22N1A,1639
|
22
|
-
doctra/exporters/markdown_table.py,sha256=4_OJIwG_WoIPYBzJx1njy_3tNVdkK6QKSP-P9r-b0zw,2030
|
23
|
-
doctra/exporters/markdown_writer.py,sha256=L7EjF2MB8jYX7XkZ3a3NeeEC8gnb0qzRPTzIN9tdfuw,1027
|
24
|
-
doctra/parsers/__init__.py,sha256=8M6LVzcWGpuTIK_1SMXML3ll7zK1CTHXGI5qXvqdm-A,206
|
25
|
-
doctra/parsers/layout_order.py,sha256=W6b-T11H907RZ2FaZwNvnYhmvH11rpUzxC5yLkdf28k,640
|
26
|
-
doctra/parsers/structured_pdf_parser.py,sha256=fbDIQ6VFv1phFPC3lKgcjtCp0AdNA8Ny1dK0F726Pww,21357
|
27
|
-
doctra/parsers/table_chart_extractor.py,sha256=JuoScqCQbPdQjy4ak77OcZHSPYKGHF4H39fEW6gF3eo,15323
|
28
|
-
doctra/ui/__init__.py,sha256=XzOOKeGSBnUREuDQiCIWds1asFSa2nypFQTJXwclROA,85
|
29
|
-
doctra/ui/app.py,sha256=FYDlEG_2pfp7SSHnA04NRNUhOcI-BJPh3qAf5dw5D6g,45903
|
30
|
-
doctra/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
|
-
doctra/utils/bbox.py,sha256=R2-95p0KiWvet3TH27TQVvCar7WJg6z0u3L21iEDF-A,674
|
32
|
-
doctra/utils/constants.py,sha256=ZWOvNDrvETbQ_pxHiX7vUW4J5Oj8_qnov0QacUOBizI,189
|
33
|
-
doctra/utils/file_ops.py,sha256=3IS0EQncs6Kaj27fcg2zxQX3xRSvtItIsyKGLYgeOgw,815
|
34
|
-
doctra/utils/io_utils.py,sha256=L1bWV4-ybs2j_3ZEN7GfQVgdC73JKVECVnpwKbP0dy0,219
|
35
|
-
doctra/utils/ocr_utils.py,sha256=Doa1uYBg3kRgRYd2aPq9fICHgHfrM_efdhZfI7jl6OM,780
|
36
|
-
doctra/utils/pdf_io.py,sha256=c8EY47Z1iqVtlLFHS_n0qGuXJ5ERFaMUd84ivXV0b9E,706
|
37
|
-
doctra/utils/progress.py,sha256=Reo72IyKGTqUYu-956A2PD9hIVTDNrmmDbh4r_ie5Xo,15942
|
38
|
-
doctra/utils/quiet.py,sha256=5XPS-1CtJ0sVk6qgSQctdhr_wR8mP1xoJLoUbmkXROA,387
|
39
|
-
doctra/utils/structured_utils.py,sha256=J-qTqo8eCjm36FaRJ_I482LFgYCpm3eukZm-gbNnchw,1401
|
40
|
-
doctra-0.3.2.dist-info/licenses/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
|
41
|
-
doctra-0.3.2.dist-info/METADATA,sha256=hXB4Lhcs9nuBrnHv1fPkaJz9C3Qr0BDiZfmCQTxfXys,28298
|
42
|
-
doctra-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
43
|
-
doctra-0.3.2.dist-info/top_level.txt,sha256=jI7E8jHci2gP9y0GYaWxlg9jG0O5n3FjHJJPLXDXMds,7
|
44
|
-
doctra-0.3.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|