eotdl 2025.3.25__py3-none-any.whl → 2025.4.2__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.
- eotdl/__init__.py +1 -1
- eotdl/access/__init__.py +13 -3
- eotdl/access/download.py +47 -13
- eotdl/access/search.py +33 -5
- eotdl/access/sentinelhub/__init__.py +6 -2
- eotdl/access/sentinelhub/client.py +9 -8
- eotdl/access/sentinelhub/evalscripts.py +266 -0
- eotdl/access/sentinelhub/parameters.py +101 -23
- eotdl/access/sentinelhub/utils.py +55 -20
- eotdl/curation/stac/stac.py +1 -1
- eotdl/datasets/__init__.py +1 -1
- eotdl/datasets/ingest.py +9 -2
- eotdl/datasets/stage.py +5 -5
- eotdl/files/ingest.py +17 -11
- eotdl/models/download.py +101 -0
- eotdl/models/ingest.py +11 -3
- eotdl/models/stage.py +4 -1
- eotdl/repos/FilesAPIRepo.py +1 -1
- eotdl/repos/ModelsAPIRepo.py +50 -42
- eotdl/tools/time_utils.py +3 -3
- {eotdl-2025.3.25.dist-info → eotdl-2025.4.2.dist-info}/METADATA +19 -32
- {eotdl-2025.3.25.dist-info → eotdl-2025.4.2.dist-info}/RECORD +25 -24
- {eotdl-2025.3.25.dist-info → eotdl-2025.4.2.dist-info}/WHEEL +1 -1
- eotdl-2025.4.2.dist-info/entry_points.txt +2 -0
- eotdl-2025.3.25.dist-info/entry_points.txt +0 -3
eotdl/repos/ModelsAPIRepo.py
CHANGED
@@ -20,6 +20,10 @@ class ModelsAPIRepo(APIRepo):
|
|
20
20
|
response = requests.get(url)
|
21
21
|
return self.format_response(response)
|
22
22
|
|
23
|
+
def retrieve_model(self, name):
|
24
|
+
response = requests.get(self.url + "models?name=" + name)
|
25
|
+
return self.format_response(response)
|
26
|
+
|
23
27
|
def create_model(self, metadata, user):
|
24
28
|
response = requests.post(
|
25
29
|
self.url + "models",
|
@@ -28,53 +32,57 @@ class ModelsAPIRepo(APIRepo):
|
|
28
32
|
)
|
29
33
|
return self.format_response(response)
|
30
34
|
|
31
|
-
def
|
32
|
-
response = requests.get(self.url + "models?name=" + name)
|
33
|
-
return self.format_response(response)
|
34
|
-
|
35
|
-
def create_version(self, model_id, user):
|
35
|
+
def complete_ingestion(self, model_id, version, size, user):
|
36
36
|
response = requests.post(
|
37
|
-
self.url + "models/
|
37
|
+
self.url + "models/complete/" + model_id,
|
38
|
+
json={"version": version, "size": size},
|
38
39
|
headers=self.generate_headers(user),
|
39
40
|
)
|
40
41
|
return self.format_response(response)
|
41
42
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
"authors": authors,
|
49
|
-
"source": source,
|
50
|
-
"license": license,
|
51
|
-
"thumbnail": thumbnail,
|
52
|
-
"description": content,
|
53
|
-
},
|
54
|
-
headers=self.generate_headers(user),
|
55
|
-
)
|
56
|
-
return self.format_response(response)
|
43
|
+
# def create_version(self, model_id, user):
|
44
|
+
# response = requests.post(
|
45
|
+
# self.url + "models/version/" + model_id,
|
46
|
+
# headers=self.generate_headers(user),
|
47
|
+
# )
|
48
|
+
# return self.format_response(response)
|
57
49
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
50
|
+
# def update_model(
|
51
|
+
# self, model_id, authors, source, license, thumbnail, content, user
|
52
|
+
# ):
|
53
|
+
# response = requests.put(
|
54
|
+
# self.url + f"models/{model_id}",
|
55
|
+
# json={
|
56
|
+
# "authors": authors,
|
57
|
+
# "source": source,
|
58
|
+
# "license": license,
|
59
|
+
# "thumbnail": thumbnail,
|
60
|
+
# "description": content,
|
61
|
+
# },
|
62
|
+
# headers=self.generate_headers(user),
|
63
|
+
# )
|
64
|
+
# return self.format_response(response)
|
65
65
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
66
|
+
# def create_stac_model(self, name, user):
|
67
|
+
# response = requests.post(
|
68
|
+
# self.url + "models/stac",
|
69
|
+
# json={"name": name},
|
70
|
+
# headers=self.generate_headers(user),
|
71
|
+
# )
|
72
|
+
# return self.format_response(response)
|
73
|
+
|
74
|
+
# def ingest_stac(self, stac_json, model_id, user):
|
75
|
+
# response = requests.put(
|
76
|
+
# self.url + f"models/stac/{model_id}",
|
77
|
+
# json={"stac": stac_json},
|
78
|
+
# headers=self.generate_headers(user),
|
79
|
+
# )
|
80
|
+
# return self.format_response(response)
|
73
81
|
|
74
|
-
def download_stac(self, model_id, user):
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
82
|
+
# def download_stac(self, model_id, user):
|
83
|
+
# url = self.url + "models/" + model_id + "/download"
|
84
|
+
# headers = self.generate_headers(user)
|
85
|
+
# response = requests.get(url, headers=headers)
|
86
|
+
# if response.status_code != 200:
|
87
|
+
# return None, response.json()["detail"]
|
88
|
+
# return gpd.GeoDataFrame.from_features(response.json()["features"]), None
|
eotdl/tools/time_utils.py
CHANGED
@@ -131,11 +131,11 @@ def get_day_between(
|
|
131
131
|
Get the day between two dates
|
132
132
|
"""
|
133
133
|
if isinstance(from_date, str):
|
134
|
-
from_date =
|
134
|
+
from_date = format_time_acquired(from_date)
|
135
135
|
if isinstance(to_date, str):
|
136
|
-
to_date =
|
136
|
+
to_date = format_time_acquired(to_date)
|
137
137
|
|
138
|
-
date_between = from_date +
|
138
|
+
date_between = from_date + (to_date - from_date) / 2
|
139
139
|
date_between = date_between.strftime("%Y-%m-%d")
|
140
140
|
|
141
141
|
return date_between
|
@@ -1,36 +1,23 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: eotdl
|
3
|
-
Version: 2025.
|
3
|
+
Version: 2025.4.2
|
4
4
|
Summary: Earth Observation Training Data Lab
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Requires-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
Requires-Dist:
|
18
|
-
Requires-Dist:
|
19
|
-
Requires-Dist:
|
20
|
-
Requires-Dist:
|
21
|
-
Requires-Dist: markdownify (>=0.11.6,<0.12.0)
|
22
|
-
Requires-Dist: mypy (>=1.6.1,<2.0.0)
|
23
|
-
Requires-Dist: openeo (>=0.31.0,<0.32.0)
|
24
|
-
Requires-Dist: pydantic (>=1.10.6,<2.0.0)
|
25
|
-
Requires-Dist: pyjwt (>=2.6.0,<3.0.0)
|
26
|
-
Requires-Dist: pystac[validation] (==1.8.2)
|
27
|
-
Requires-Dist: python-frontmatter (>=1.1.0,<2.0.0)
|
28
|
-
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
29
|
-
Requires-Dist: rasterio (>=1.3.9,<2.0.0)
|
30
|
-
Requires-Dist: requests (>=2.28.2,<3.0.0)
|
31
|
-
Requires-Dist: sentinelhub (>=3.9.1,<4.0.0)
|
32
|
-
Requires-Dist: tqdm (>=4.65.0,<5.0.0)
|
33
|
-
Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
|
5
|
+
Author-email: earthpulse <it@earthpulse.es>
|
6
|
+
License-Expression: MIT
|
7
|
+
Requires-Python: >=3.8
|
8
|
+
Requires-Dist: geomet>=1.1.0
|
9
|
+
Requires-Dist: geopandas>=0.13.2
|
10
|
+
Requires-Dist: markdown>=3.7
|
11
|
+
Requires-Dist: pydantic>=2.10.6
|
12
|
+
Requires-Dist: pyjwt>=2.9.0
|
13
|
+
Requires-Dist: pystac>=1.8.4
|
14
|
+
Requires-Dist: python-frontmatter>=1.1.0
|
15
|
+
Requires-Dist: pyyaml>=6.0.2
|
16
|
+
Requires-Dist: rasterio>=1.3.11
|
17
|
+
Requires-Dist: requests>=2.32.3
|
18
|
+
Requires-Dist: sentinelhub>=3.11.1
|
19
|
+
Requires-Dist: tqdm>=4.67.1
|
20
|
+
Requires-Dist: typer>=0.15.1
|
34
21
|
Description-Content-Type: text/markdown
|
35
22
|
|
36
23
|
<p align="center">
|
@@ -63,4 +50,4 @@ One of the most limiting factors of AI for EO applications is the scarcity of su
|
|
63
50
|
|
64
51
|
Generating TDS is time consuming and expensive. Data access is usually limited and costly, especially for Very High Resolution (VHR) images that allow objects like trees to be clearly identified. In some cases, domain experts or even in-person (in-situ) trips are required to manually confirm the objects in a satellite image are correctly annotated with a high degree of quality. This results in the field of AI for EO applications lagging when compared to other fields, impeding the development of new applications and limiting the full potential of AI in EO.
|
65
52
|
|
66
|
-
The European Space Agency (ESA) Earth Observation Training Data Lab (EOTDL) will address key limitations and capability gaps for working with Machine Learning (ML) training data in EO by providing a set of open-source tools to create, share, and improve datasets as well as training ML algorithms in the cloud. EOTDL will also offer an online repository where datasets and models can be explored and accessed.
|
53
|
+
The European Space Agency (ESA) Earth Observation Training Data Lab (EOTDL) will address key limitations and capability gaps for working with Machine Learning (ML) training data in EO by providing a set of open-source tools to create, share, and improve datasets as well as training ML algorithms in the cloud. EOTDL will also offer an online repository where datasets and models can be explored and accessed.
|
@@ -1,22 +1,22 @@
|
|
1
|
-
eotdl/__init__.py,sha256=
|
2
|
-
eotdl/
|
1
|
+
eotdl/__init__.py,sha256=Q321tl9ms35mPhMUUEAsd6HfOFIZ3i94xC69CF4wloU,27
|
2
|
+
eotdl/cli.py,sha256=1wtNmiuqjwDB1Me-eSio--dnOabrbdpMiO9dQoIbOoc,702
|
3
|
+
eotdl/access/__init__.py,sha256=k-zmTwB6VLoWt_AsXx9CnEKdtONBZAaC8T6vqPMPSjk,436
|
4
|
+
eotdl/access/download.py,sha256=e5H8LUkCfIVkFxJFM5EwCMG-R5DHVSHDGLvuNM5DNc8,2815
|
5
|
+
eotdl/access/search.py,sha256=1indipTfna4VAfGlKb8gkaYyHAELdHR4cm1mVIDW69s,1415
|
3
6
|
eotdl/access/airbus/__init__.py,sha256=G_kkRS9eFjXbQ-aehmTLXeAxh7zpAxz_rgB7J_w0NRg,107
|
4
7
|
eotdl/access/airbus/client.py,sha256=zjfgB_NTsCCIszoQesYkyLJgheKg-eTh28vbleXYxfw,12018
|
5
8
|
eotdl/access/airbus/parameters.py,sha256=Z8XIrxG5wAOuOoH-fkdKfdNMEMLFp6PaxJN7v4MefMI,1009
|
6
9
|
eotdl/access/airbus/utils.py,sha256=oh_N1Rn4fhcvUgNPpH2QzVvpe4bA0gqRgNguzRVqUps,652
|
7
|
-
eotdl/access/
|
8
|
-
eotdl/access/
|
9
|
-
eotdl/access/sentinelhub/
|
10
|
-
eotdl/access/sentinelhub/
|
11
|
-
eotdl/access/sentinelhub/
|
12
|
-
eotdl/access/sentinelhub/parameters.py,sha256=SEal7mCPkADc7lhQL-63t2h5-XCssYpGMvK5Eo3etFU,2078
|
13
|
-
eotdl/access/sentinelhub/utils.py,sha256=X9Q1YvErBdMsRKszXyaOaG6ZMvPdM2Nl_0SH-dWSFo0,3560
|
10
|
+
eotdl/access/sentinelhub/__init__.py,sha256=Y-W5e2goUBTLctY8RLvgQIXP_oafvj3HuEamRMiiRLQ,298
|
11
|
+
eotdl/access/sentinelhub/client.py,sha256=PwejwGG8So2W-IxGSPkCYtB1VsPH7UThYXTeg2EUzs0,4135
|
12
|
+
eotdl/access/sentinelhub/evalscripts.py,sha256=XU91t6htfr-dlOBfIk0MFZG-yXWZ4hvIWt_P4G3_97A,13778
|
13
|
+
eotdl/access/sentinelhub/parameters.py,sha256=U07RDzo0PiIAHP9Q9h4QjS7r1FkG-ych8MFGjz8c3OA,4270
|
14
|
+
eotdl/access/sentinelhub/utils.py,sha256=cewMRoNxIx8TYmlcl2Rpj_46f9-IVBVFncBHAra3D28,5114
|
14
15
|
eotdl/auth/__init__.py,sha256=OuGNfJQ-8Kymn4zIywlHQfImEO8DJMJIwOwTQm-u_dc,99
|
15
16
|
eotdl/auth/auth.py,sha256=EjbVFREA2H0sjFJhVqjFZrwjKPzxRJ2x83MTjizpRBs,2029
|
16
17
|
eotdl/auth/errors.py,sha256=E1lv3Igk--J-SOgNH18i8Xx9bXrrMyBSHKt_CAUmGPo,308
|
17
18
|
eotdl/auth/is_logged.py,sha256=QREuhkoDnarZoUZwCxVCNoESGb_Yukh0lJo1pXvrV9Q,115
|
18
19
|
eotdl/auth/logout.py,sha256=P_Sp6WmVvnG3R9V1L9541KNyHFko9DtQPqAKD2vaguw,161
|
19
|
-
eotdl/cli.py,sha256=1wtNmiuqjwDB1Me-eSio--dnOabrbdpMiO9dQoIbOoc,702
|
20
20
|
eotdl/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
eotdl/commands/auth.py,sha256=WzA0aFGRoscy7fPKQTxiphBc0LJztJxBBl7rjDBRVfI,1544
|
22
22
|
eotdl/commands/datasets.py,sha256=rFdimg_AOp_sf8N1dPHOfwHoqiGBXPOY7bHhg3022v0,5208
|
@@ -25,27 +25,28 @@ eotdl/commands/stac.py,sha256=Nt7WDzANgcaxJYwr-5XOv887jLrYXlut5dHbh5rKNPU,1440
|
|
25
25
|
eotdl/curation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
26
|
eotdl/curation/stac/__init__.py,sha256=FMi-qzd6v1sdsqZsBRRnedccaJFXJGCPCH3uTctyLYU,37
|
27
27
|
eotdl/curation/stac/api.py,sha256=wAn_oDuvGJOjHOSauLIiXZ9ym8n4jyk-OTIGvCcRAzo,1424
|
28
|
-
eotdl/curation/stac/stac.py,sha256=
|
29
|
-
eotdl/datasets/__init__.py,sha256=
|
30
|
-
eotdl/datasets/ingest.py,sha256
|
28
|
+
eotdl/curation/stac/stac.py,sha256=4f7xrh2CcXTkTs3or1UMVxiFfwtVfTqH4YwTGsbi6No,1013
|
29
|
+
eotdl/datasets/__init__.py,sha256=z1jtOk68RRRYqSD55W9CWHhkknHvl8Sc92NvGRdQh2w,194
|
30
|
+
eotdl/datasets/ingest.py,sha256=-qXOijYYzwEwhS9IJSynXTLEJS0z_rfJz3DLX14R1TQ,1253
|
31
31
|
eotdl/datasets/retrieve.py,sha256=dhNbBJu0vE0l-LsGQNQF5Vc_WzZDRbXPzvd66GNlV6U,691
|
32
|
-
eotdl/datasets/stage.py,sha256=
|
32
|
+
eotdl/datasets/stage.py,sha256=pcU1AsjbczzMHdhCxjKfCuuuLo1OZMMWNAUqj-3SxKc,2162
|
33
33
|
eotdl/datasets/update.py,sha256=x-rpfxnavn9X-7QYkFMGtbn1b3bKmAZydOeS7Tjr5AQ,386
|
34
34
|
eotdl/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
35
|
eotdl/files/ingest.bck,sha256=dgjZfd-ACCKradDo2B02CPahwEhFtWvnKvTm372K5eo,6185
|
36
|
-
eotdl/files/ingest.py,sha256=
|
36
|
+
eotdl/files/ingest.py,sha256=9IHI4h7ULrvmEAqLjhZvIDVm6eIeVXbO-_EtC78o3Co,9287
|
37
37
|
eotdl/files/metadata.py,sha256=C-NDr-zjM58fP8QcHB1N1QyLRUeYyMbT6wPPnxGk8LI,1370
|
38
38
|
eotdl/models/__init__.py,sha256=5mriPl64bzRwcY4O4Bnjt2WeKpX4ab5yXZ3uKzapJfA,158
|
39
|
-
eotdl/models/
|
39
|
+
eotdl/models/download.py,sha256=rRT3fG-qS3-SXfzFdqy0cuiDnOIV9Du74JCnsbbA9Ps,3475
|
40
|
+
eotdl/models/ingest.py,sha256=Xf5u360SmtRsPTR6pMKCE_o8pxPVbhmvgJYdrZpXa8o,1219
|
40
41
|
eotdl/models/retrieve.py,sha256=-Ij7dT4J1p7MW4n13OlPB9OW4tBaBXPwk9dW8IuCZPc,664
|
41
|
-
eotdl/models/stage.py,sha256=
|
42
|
+
eotdl/models/stage.py,sha256=rvWN8vcBz7qHhu0TzJ90atw1kEr3JPKF0k2S-Sv-JVs,1944
|
42
43
|
eotdl/models/update.py,sha256=4FWeD95cXvRpefRjw3Foqb30e30otxqWUZ6nQM9cbmM,374
|
43
44
|
eotdl/repos/APIRepo.py,sha256=fcMpVbatfJgAq12bGWM828n8UDOixBbf5ueleB_Hrc4,791
|
44
45
|
eotdl/repos/AuthAPIRepo.py,sha256=vYCqFawe3xUm2cx4SqVXCvzl8J_sr9rs_MkipYC0bXE,957
|
45
46
|
eotdl/repos/AuthRepo.py,sha256=jpzzhINCcDZHRCyrPDsp49h17IlXp2HvX3BB3f5cnb4,1154
|
46
47
|
eotdl/repos/DatasetsAPIRepo.py,sha256=Yy22IoiASPmca93r4Rt5lzq28TFQkq3aOl_M4u8VJw8,3236
|
47
|
-
eotdl/repos/FilesAPIRepo.py,sha256=
|
48
|
-
eotdl/repos/ModelsAPIRepo.py,sha256=
|
48
|
+
eotdl/repos/FilesAPIRepo.py,sha256=poGis1oRhv4k8UnBy6eNLwxA9XPaVbG2yFuWycL-uhw,11081
|
49
|
+
eotdl/repos/ModelsAPIRepo.py,sha256=VWtxQsMMPi8DxXyyO2tHJyYhnK3Y_k-m5YWLyEXWHrI,3016
|
49
50
|
eotdl/repos/STACAPIRepo.py,sha256=YtLd-Wl2mOM4MtT7nCFHd26oeNleq9POKajJuhEt-74,1407
|
50
51
|
eotdl/repos/__init__.py,sha256=GIzk62681dvNzYgVzvJgrMzVRhrep4-kJH6lTOtfnT8,258
|
51
52
|
eotdl/shared/__init__.py,sha256=mF7doJC8Z5eTPmB01UQvPivThZac32DRY33T6qshXfg,41
|
@@ -55,11 +56,11 @@ eotdl/tools/geo_utils.py,sha256=JKHUAnqkwiIrvh5voDclWAW-i57qVqH2FUjeOt1TQf4,7547
|
|
55
56
|
eotdl/tools/metadata.py,sha256=RvNmoMdfEKoo-DzhEAqL-f9ZCjIe_bsdHQwACMk6w1E,1664
|
56
57
|
eotdl/tools/paths.py,sha256=yWhOtVxX4NxrDrrBX2fuye5N1mAqrxXFy_eA7dffd84,1152
|
57
58
|
eotdl/tools/stac.py,sha256=ovXdrPm4Sn9AAJmrP88WnxDmq2Ut-xPoscjphxz3Iyo,5763
|
58
|
-
eotdl/tools/time_utils.py,sha256=
|
59
|
+
eotdl/tools/time_utils.py,sha256=JHrQ3PxXkhwor8zcOFccf26zOG9WBtb9xHb6j-Fqa9k,4661
|
59
60
|
eotdl/tools/tools.py,sha256=Tl4_v2ejkQo_zyZek8oofJwoYcdVosdOwW1C0lvWaNM,6354
|
60
61
|
eotdl/wrappers/__init__.py,sha256=IY3DK_5LMbc5bIQFleQA9kzFbPhWuTLesJ8dwfvpkdA,32
|
61
62
|
eotdl/wrappers/models.py,sha256=kNO4pYw9KKKmElE7bZWWHGs7FIThNUXj8XciKh_3rNw,6432
|
62
|
-
eotdl-2025.
|
63
|
-
eotdl-2025.
|
64
|
-
eotdl-2025.
|
65
|
-
eotdl-2025.
|
63
|
+
eotdl-2025.4.2.dist-info/METADATA,sha256=N3CIcPuh2pwfFaR8al9XF7iNyvQ8ctA60w9iPVZmw-U,3478
|
64
|
+
eotdl-2025.4.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
65
|
+
eotdl-2025.4.2.dist-info/entry_points.txt,sha256=FV4dFIZ5zdWj1q1nUEEip29n3sAgbviVOizEz00gEF0,40
|
66
|
+
eotdl-2025.4.2.dist-info/RECORD,,
|