mapreader 1.6.1.post0.dev20__tar.gz → 1.6.2__tar.gz
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.
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/PKG-INFO +1 -1
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/_version.py +3 -3
- mapreader-1.6.2/mapreader/spot_text/dataclasses.py +30 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/spot_text/deepsolo_runner.py +2 -2
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/spot_text/dptext_detr_runner.py +7 -59
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/spot_text/maptext_runner.py +2 -2
- mapreader-1.6.2/mapreader/spot_text/runner_base.py +1125 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/PKG-INFO +1 -1
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/SOURCES.txt +1 -1
- mapreader-1.6.1.post0.dev20/mapreader/spot_text/rec_runner_base.py +0 -346
- mapreader-1.6.1.post0.dev20/mapreader/spot_text/runner_base.py +0 -534
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/LICENSE +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/README.md +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/__main__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/annotate/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/annotate/annotator.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/classify/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/classify/classifier.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/classify/custom_models.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/classify/datasets.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/classify/load_annotations.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/data_structures.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/downloader.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/downloader_utils.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/sheet_downloader.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/tile_loading.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/download/tile_merging.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/load/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/load/geo_utils.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/load/images.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/load/loader.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/process/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/process/context_post_process.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/process/occlusion_analysis.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/process/process.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/spot_text/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/utils/__init__.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/utils/compute_and_save_stats.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/utils/load_frames.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader/utils/slice_parallel.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/dependency_links.txt +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/entry_points.txt +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/not-zip-safe +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/requires.txt +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/mapreader.egg-info/top_level.txt +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/setup.cfg +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/setup.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/tests/test_geo_pipeline.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/tests/test_import.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/tests/test_utils_load_frames.py +0 -0
- {mapreader-1.6.1.post0.dev20 → mapreader-1.6.2}/versioneer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mapreader
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: A computer vision pipeline for the semantic exploration of maps/images at scale
|
|
5
5
|
Home-page: https://github.com/Living-with-machines/MapReader
|
|
6
6
|
Download-URL: https://github.com/Living-with-machines/MapReader/archive/refs/heads/main.zip
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-12-
|
|
11
|
+
"date": "2024-12-19T16:32:25+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.6.
|
|
14
|
+
"full-revisionid": "914ab59309c4d45b12626ffc1c18e617d58b34ac",
|
|
15
|
+
"version": "1.6.2"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from shapely.geometry import Polygon
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class PatchPrediction:
|
|
10
|
+
pixel_geometry: Polygon
|
|
11
|
+
score: float
|
|
12
|
+
text: str = None
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass(frozen=True)
|
|
16
|
+
class ParentPrediction:
|
|
17
|
+
pixel_geometry: Polygon
|
|
18
|
+
score: float
|
|
19
|
+
patch_id: str
|
|
20
|
+
text: str = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class GeoPrediction:
|
|
25
|
+
pixel_geometry: Polygon
|
|
26
|
+
score: float
|
|
27
|
+
patch_id: str
|
|
28
|
+
geometry: Polygon
|
|
29
|
+
crs: str
|
|
30
|
+
text: str = None
|
|
@@ -20,10 +20,10 @@ import pandas as pd
|
|
|
20
20
|
import torch
|
|
21
21
|
from deepsolo.config import get_cfg
|
|
22
22
|
|
|
23
|
-
from .
|
|
23
|
+
from .runner_base import DetRecRunner
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class DeepSoloRunner(
|
|
26
|
+
class DeepSoloRunner(DetRecRunner):
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
29
|
patch_df: pd.DataFrame | gpd.GeoDataFrame | str | pathlib.Path,
|
|
@@ -21,10 +21,11 @@ import torch
|
|
|
21
21
|
from dptext_detr.config import get_cfg
|
|
22
22
|
from shapely import MultiPolygon, Polygon
|
|
23
23
|
|
|
24
|
-
from .
|
|
24
|
+
from .dataclasses import PatchPrediction
|
|
25
|
+
from .runner_base import DetRunner
|
|
25
26
|
|
|
26
27
|
|
|
27
|
-
class DPTextDETRRunner(
|
|
28
|
+
class DPTextDETRRunner(DetRunner):
|
|
28
29
|
def __init__(
|
|
29
30
|
self,
|
|
30
31
|
patch_df: pd.DataFrame | gpd.GeoDataFrame | str | pathlib.Path,
|
|
@@ -71,7 +72,7 @@ class DPTextDETRRunner(Runner):
|
|
|
71
72
|
# setup the predictor
|
|
72
73
|
self.predictor = DefaultPredictor(cfg)
|
|
73
74
|
|
|
74
|
-
def
|
|
75
|
+
def _get_patch_predictions(
|
|
75
76
|
self,
|
|
76
77
|
outputs: dict,
|
|
77
78
|
return_dataframe: bool = False,
|
|
@@ -107,7 +108,7 @@ class DPTextDETRRunner(Runner):
|
|
|
107
108
|
self._deduplicate(image_id, min_ioa=min_ioa)
|
|
108
109
|
|
|
109
110
|
if return_dataframe:
|
|
110
|
-
return self._dict_to_dataframe(self.patch_predictions
|
|
111
|
+
return self._dict_to_dataframe(self.patch_predictions)
|
|
111
112
|
return self.patch_predictions
|
|
112
113
|
|
|
113
114
|
def _post_process(self, image_id, scores, pred_classes, bd_pnts):
|
|
@@ -122,59 +123,6 @@ class DPTextDETRRunner(Runner):
|
|
|
122
123
|
|
|
123
124
|
score = f"{score:.2f}"
|
|
124
125
|
|
|
125
|
-
self.patch_predictions[image_id].append(
|
|
126
|
-
|
|
127
|
-
@staticmethod
|
|
128
|
-
def _dict_to_dataframe(
|
|
129
|
-
preds: dict,
|
|
130
|
-
geo: bool = False,
|
|
131
|
-
parent: bool = False,
|
|
132
|
-
) -> pd.DataFrame:
|
|
133
|
-
"""Convert the predictions dictionary to a pandas DataFrame.
|
|
134
|
-
|
|
135
|
-
Parameters
|
|
136
|
-
----------
|
|
137
|
-
preds : dict
|
|
138
|
-
A dictionary of predictions.
|
|
139
|
-
geo : bool, optional
|
|
140
|
-
Whether the dictionary is georeferenced coords (or pixel bounds), by default True
|
|
141
|
-
parent : bool, optional
|
|
142
|
-
Whether the dictionary is at the parent level, by default False
|
|
143
|
-
|
|
144
|
-
Returns
|
|
145
|
-
-------
|
|
146
|
-
pd.DataFrame
|
|
147
|
-
A pandas DataFrame containing the predictions.
|
|
148
|
-
"""
|
|
149
|
-
if geo:
|
|
150
|
-
columns = ["geometry", "crs", "score"]
|
|
151
|
-
else:
|
|
152
|
-
columns = ["geometry", "score"]
|
|
153
|
-
|
|
154
|
-
if parent:
|
|
155
|
-
columns.append("patch_id")
|
|
156
|
-
|
|
157
|
-
preds_df = pd.concat(
|
|
158
|
-
pd.DataFrame(
|
|
159
|
-
preds[k],
|
|
160
|
-
index=np.full(len(preds[k]), k),
|
|
161
|
-
columns=columns,
|
|
126
|
+
self.patch_predictions[image_id].append(
|
|
127
|
+
PatchPrediction(pixel_geometry=polygon, score=score)
|
|
162
128
|
)
|
|
163
|
-
for k in preds.keys()
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
if geo:
|
|
167
|
-
# get the crs (should be the same for all)
|
|
168
|
-
if not preds_df["crs"].nunique() == 1:
|
|
169
|
-
raise ValueError("[ERROR] Multiple crs found in the predictions.")
|
|
170
|
-
crs = preds_df["crs"].unique()[0]
|
|
171
|
-
|
|
172
|
-
preds_df = gpd.GeoDataFrame(
|
|
173
|
-
preds_df,
|
|
174
|
-
geometry="geometry",
|
|
175
|
-
crs=crs,
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
preds_df.index.name = "image_id"
|
|
179
|
-
preds_df.reset_index(inplace=True)
|
|
180
|
-
return preds_df
|
|
@@ -20,10 +20,10 @@ import pandas as pd
|
|
|
20
20
|
import torch
|
|
21
21
|
from maptextpipeline.config import get_cfg
|
|
22
22
|
|
|
23
|
-
from .
|
|
23
|
+
from .runner_base import DetRecRunner
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class MapTextRunner(
|
|
26
|
+
class MapTextRunner(DetRecRunner):
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
29
|
patch_df: pd.DataFrame | gpd.GeoDataFrame | str | pathlib.Path,
|