geoai-py 0.14.0__tar.gz → 0.16.0__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.
- {geoai_py-0.14.0 → geoai_py-0.16.0}/.editorconfig +1 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/.gitignore +3 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/.pre-commit-config.yaml +1 -1
- geoai_py-0.16.0/CITATION.cff +11 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/LICENSE +1 -2
- {geoai_py-0.14.0 → geoai_py-0.16.0}/PKG-INFO +9 -1
- {geoai_py-0.14.0 → geoai_py-0.16.0}/README.md +6 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/__init__.py +21 -1
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/change_detection.py +16 -6
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/geoai.py +3 -0
- geoai_py-0.16.0/geoai/timm_segment.py +1097 -0
- geoai_py-0.16.0/geoai/timm_train.py +658 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/train.py +796 -107
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/utils.py +1427 -245
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/PKG-INFO +9 -1
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/SOURCES.txt +3 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/requires.txt +2 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/mkdocs.yml +6 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/pyproject.toml +4 -4
- {geoai_py-0.14.0 → geoai_py-0.16.0}/requirements.txt +1 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/requirements_docs.txt +1 -1
- {geoai_py-0.14.0 → geoai_py-0.16.0}/.dockerignore +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/Dockerfile +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/MANIFEST.in +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/agents/__init__.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/agents/geo_agents.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/agents/map_tools.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/classify.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/detectron2.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/dinov3.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/download.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/extract.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/hf.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/map_widgets.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/sam.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/segment.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai/segmentation.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/dependency_links.txt +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/entry_points.txt +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/geoai_py.egg-info/top_level.txt +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/pytest.ini +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/setup.cfg +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/__init__.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/create_test_data.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_classify.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_download.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_extract.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_fixtures.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_geoai.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_segment.py +0 -0
- {geoai_py-0.14.0 → geoai_py-0.16.0}/tests/test_utils.py +0 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
cff-version: 1.1.0
|
2
|
+
message: "If you use this software, please cite it as below."
|
3
|
+
authors:
|
4
|
+
- family-names: Wu
|
5
|
+
given-names: Qiusheng
|
6
|
+
orcid: https://orcid.org/0000-0001-5437-4073
|
7
|
+
title: "GeoAI: A Python package for integrating artificial intelligence with geospatial data analysis and visualization"
|
8
|
+
version: 0.14.0
|
9
|
+
doi: 10.21105/joss.09025
|
10
|
+
date-released: 2025-10-05
|
11
|
+
url: "https://github.com/opengeos/goeai"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
MIT License
|
2
2
|
|
3
|
-
Copyright (c) 2023, Qiusheng Wu
|
3
|
+
Copyright (c) 2023-2025, Qiusheng Wu
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
21
|
SOFTWARE.
|
22
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: geoai-py
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.16.0
|
4
4
|
Summary: A Python package for using Artificial Intelligence (AI) with geospatial data
|
5
5
|
Author-email: Qiusheng Wu <giswqs@gmail.com>
|
6
6
|
License: MIT License
|
@@ -38,6 +38,7 @@ Requires-Dist: rasterio
|
|
38
38
|
Requires-Dist: rioxarray
|
39
39
|
Requires-Dist: scikit-image
|
40
40
|
Requires-Dist: scikit-learn
|
41
|
+
Requires-Dist: timm
|
41
42
|
Requires-Dist: torch
|
42
43
|
Requires-Dist: torchgeo
|
43
44
|
Requires-Dist: torchinfo
|
@@ -46,6 +47,7 @@ Requires-Dist: transformers
|
|
46
47
|
Provides-Extra: extra
|
47
48
|
Requires-Dist: overturemaps; extra == "extra"
|
48
49
|
Requires-Dist: torchange; extra == "extra"
|
50
|
+
Requires-Dist: lightly-train; extra == "extra"
|
49
51
|
Provides-Extra: agents
|
50
52
|
Requires-Dist: strands-agents; extra == "agents"
|
51
53
|
Requires-Dist: strands-agents-tools; extra == "agents"
|
@@ -92,6 +94,12 @@ GeoAI addresses this need by providing a unified, user-friendly interface that a
|
|
92
94
|
|
93
95
|
The package's design philosophy emphasizes simplicity without sacrificing functionality, enabling users to perform sophisticated analyses such as building footprint extraction from satellite imagery, land cover classification, and change detection with just a few lines of code. By integrating cutting-edge AI models and providing seamless access to major geospatial data sources, GeoAI significantly lowers the barrier to entry for geospatial AI applications while maintaining the flexibility needed for advanced research applications.
|
94
96
|
|
97
|
+
## Citations
|
98
|
+
|
99
|
+
If you find GeoAI useful in your research, please consider citing the following paper to support my work. Thank you for your support.
|
100
|
+
|
101
|
+
- Wu, Q. (2025). GeoAI: A Python package for integrating artificial intelligence with geospatial data analysis and visualization. _Journal of Open Source Software_, 9025. [https://doi.org/10.21105/joss.09025](https://github.com/openjournals/joss-papers/blob/joss.09025/joss.09025/10.21105.joss.09025.pdf) (Under Review)
|
102
|
+
|
95
103
|
## 🚀 Key Features
|
96
104
|
|
97
105
|
### 📊 Advanced Geospatial Data Visualization
|
@@ -36,6 +36,12 @@ GeoAI addresses this need by providing a unified, user-friendly interface that a
|
|
36
36
|
|
37
37
|
The package's design philosophy emphasizes simplicity without sacrificing functionality, enabling users to perform sophisticated analyses such as building footprint extraction from satellite imagery, land cover classification, and change detection with just a few lines of code. By integrating cutting-edge AI models and providing seamless access to major geospatial data sources, GeoAI significantly lowers the barrier to entry for geospatial AI applications while maintaining the flexibility needed for advanced research applications.
|
38
38
|
|
39
|
+
## Citations
|
40
|
+
|
41
|
+
If you find GeoAI useful in your research, please consider citing the following paper to support my work. Thank you for your support.
|
42
|
+
|
43
|
+
- Wu, Q. (2025). GeoAI: A Python package for integrating artificial intelligence with geospatial data analysis and visualization. _Journal of Open Source Software_, 9025. [https://doi.org/10.21105/joss.09025](https://github.com/openjournals/joss-papers/blob/joss.09025/joss.09025/10.21105.joss.09025.pdf) (Under Review)
|
44
|
+
|
39
45
|
## 🚀 Key Features
|
40
46
|
|
41
47
|
### 📊 Advanced Geospatial Data Visualization
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
__author__ = """Qiusheng Wu"""
|
4
4
|
__email__ = "giswqs@gmail.com"
|
5
|
-
__version__ = "0.
|
5
|
+
__version__ = "0.16.0"
|
6
6
|
|
7
7
|
|
8
8
|
import os
|
@@ -101,3 +101,23 @@ def set_proj_lib_path(verbose=False):
|
|
101
101
|
|
102
102
|
from .dinov3 import DINOv3GeoProcessor, analyze_image_patches, create_similarity_map
|
103
103
|
from .geoai import *
|
104
|
+
|
105
|
+
from .timm_train import (
|
106
|
+
get_timm_model,
|
107
|
+
modify_first_conv_for_channels,
|
108
|
+
TimmClassifier,
|
109
|
+
RemoteSensingDataset,
|
110
|
+
train_timm_classifier,
|
111
|
+
predict_with_timm,
|
112
|
+
list_timm_models,
|
113
|
+
)
|
114
|
+
|
115
|
+
from .timm_segment import (
|
116
|
+
TimmSegmentationModel,
|
117
|
+
SegmentationDataset,
|
118
|
+
train_timm_segmentation,
|
119
|
+
predict_segmentation,
|
120
|
+
train_timm_segmentation_model,
|
121
|
+
timm_semantic_segmentation,
|
122
|
+
push_timm_model_to_hub,
|
123
|
+
)
|
@@ -561,7 +561,15 @@ class ChangeDetection:
|
|
561
561
|
|
562
562
|
return fig
|
563
563
|
|
564
|
-
def visualize_results(
|
564
|
+
def visualize_results(
|
565
|
+
self,
|
566
|
+
image1_path,
|
567
|
+
image2_path,
|
568
|
+
binary_path,
|
569
|
+
prob_path,
|
570
|
+
title1="Earlier Image",
|
571
|
+
title2="Later Image",
|
572
|
+
):
|
565
573
|
"""Create enhanced visualization with probability analysis."""
|
566
574
|
|
567
575
|
# Load data
|
@@ -594,11 +602,11 @@ class ChangeDetection:
|
|
594
602
|
|
595
603
|
# Row 1: Original and overlays
|
596
604
|
axes[0, 0].imshow(img1_crop)
|
597
|
-
axes[0, 0].set_title(
|
605
|
+
axes[0, 0].set_title(title1, fontweight="bold")
|
598
606
|
axes[0, 0].axis("off")
|
599
607
|
|
600
608
|
axes[0, 1].imshow(img2_crop)
|
601
|
-
axes[0, 1].set_title(
|
609
|
+
axes[0, 1].set_title(title2, fontweight="bold")
|
602
610
|
axes[0, 1].axis("off")
|
603
611
|
|
604
612
|
# Binary overlay
|
@@ -708,6 +716,8 @@ class ChangeDetection:
|
|
708
716
|
image2_path,
|
709
717
|
binary_path,
|
710
718
|
prob_path,
|
719
|
+
title1="Earlier Image",
|
720
|
+
title2="Later Image",
|
711
721
|
output_path="split_comparison.png",
|
712
722
|
):
|
713
723
|
"""Create a split comparison visualization showing before/after with change overlay."""
|
@@ -742,7 +752,7 @@ class ChangeDetection:
|
|
742
752
|
# Create split comparison
|
743
753
|
fig, ax = plt.subplots(1, 1, figsize=(15, 10))
|
744
754
|
|
745
|
-
# Create combined image - left half is
|
755
|
+
# Create combined image - left half is earlier, right half is later
|
746
756
|
combined_img = np.zeros_like(img1)
|
747
757
|
combined_img[:, : w // 2] = img1[:, : w // 2]
|
748
758
|
combined_img[:, w // 2 :] = img2[:, w // 2 :]
|
@@ -763,7 +773,7 @@ class ChangeDetection:
|
|
763
773
|
ax.text(
|
764
774
|
w // 4,
|
765
775
|
50,
|
766
|
-
|
776
|
+
title1,
|
767
777
|
fontsize=20,
|
768
778
|
color="white",
|
769
779
|
ha="center",
|
@@ -772,7 +782,7 @@ class ChangeDetection:
|
|
772
782
|
ax.text(
|
773
783
|
3 * w // 4,
|
774
784
|
50,
|
775
|
-
|
785
|
+
title2,
|
776
786
|
fontsize=20,
|
777
787
|
color="white",
|
778
788
|
ha="center",
|
@@ -32,6 +32,9 @@ from .train import (
|
|
32
32
|
instance_segmentation,
|
33
33
|
instance_segmentation_batch,
|
34
34
|
instance_segmentation_inference_on_geotiff,
|
35
|
+
lightly_embed_images,
|
36
|
+
lightly_train_model,
|
37
|
+
load_lightly_pretrained_model,
|
35
38
|
object_detection,
|
36
39
|
object_detection_batch,
|
37
40
|
semantic_segmentation,
|