geoai-py 0.22.0__tar.gz → 0.23.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.22.0 → geoai_py-0.23.0}/.gitignore +2 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/PKG-INFO +3 -1
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/__init__.py +1 -1
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/utils.py +67 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/PKG-INFO +3 -1
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/requires.txt +2 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/mkdocs.yml +2 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/pyproject.toml +3 -3
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/README.md +200 -9
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/samgeo.py +207 -62
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/segmentation.py +133 -11
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/update_checker.py +4 -3
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/metadata.txt +8 -2
- {geoai_py-0.22.0 → geoai_py-0.23.0}/requirements.txt +1 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/.dockerignore +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/.editorconfig +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/.pre-commit-config.yaml +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/CITATION.cff +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/Dockerfile +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/LICENSE +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/MANIFEST.in +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/README.md +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/__init__.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/catalog_models.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/catalog_tools.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/geo_agents.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/map_tools.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/stac_models.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/stac_tools.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/auto.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/change_detection.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/classify.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/detectron2.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/dinov3.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/download.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/extract.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/geoai.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/hf.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/landcover_train.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/landcover_utils.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/map_widgets.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/moondream.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/sam.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/segment.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/segmentation.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/timm_segment.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/timm_train.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/__init__.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/cloudmask.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/multiclean.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/sr.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/train.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/SOURCES.txt +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/dependency_links.txt +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/entry_points.txt +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/top_level.txt +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/pytest.ini +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/LICENSE +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/__init__.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/_geoai_lib.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/__init__.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/map_tools.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/moondream.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/geoai_plugin.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/about.svg +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/gpu.svg +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/icon.png +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/moondream.svg +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/samgeo.png +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/segment.svg +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/install.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/install.sh +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/requirements_docs.txt +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/setup.cfg +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/__init__.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/create_test_data.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_classify.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_download.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_extract.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_fixtures.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_geoai.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_segment.py +0 -0
- {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geoai-py
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.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: smoothify
|
|
41
42
|
Requires-Dist: timm
|
|
42
43
|
Requires-Dist: tokenizers>=0.22.1
|
|
43
44
|
Requires-Dist: torch
|
|
@@ -51,6 +52,7 @@ Requires-Dist: torchange; extra == "extra"
|
|
|
51
52
|
Requires-Dist: lightly-train; extra == "extra"
|
|
52
53
|
Requires-Dist: multiclean; extra == "extra"
|
|
53
54
|
Requires-Dist: omnicloudmask; extra == "extra"
|
|
55
|
+
Requires-Dist: smoothify; extra == "extra"
|
|
54
56
|
Provides-Extra: agents
|
|
55
57
|
Requires-Dist: strands-agents; extra == "agents"
|
|
56
58
|
Requires-Dist: strands-agents-tools; extra == "agents"
|
|
@@ -7848,3 +7848,70 @@ def empty_cache() -> None:
|
|
|
7848
7848
|
torch.cuda.empty_cache()
|
|
7849
7849
|
elif getattr(torch.backends, "mps", None) and torch.backends.mps.is_available():
|
|
7850
7850
|
torch.mps.empty_cache()
|
|
7851
|
+
|
|
7852
|
+
|
|
7853
|
+
def smooth_vector(
|
|
7854
|
+
vector_data: Union[str, gpd.GeoDataFrame],
|
|
7855
|
+
output_path: str = None,
|
|
7856
|
+
segment_length: float = None,
|
|
7857
|
+
smooth_iterations: int = 3,
|
|
7858
|
+
num_cores: int = 0,
|
|
7859
|
+
merge_collection: bool = True,
|
|
7860
|
+
merge_field: str = None,
|
|
7861
|
+
merge_multipolygons: bool = True,
|
|
7862
|
+
preserve_area: bool = True,
|
|
7863
|
+
area_tolerance: float = 0.01,
|
|
7864
|
+
**kwargs: Any,
|
|
7865
|
+
) -> gpd.GeoDataFrame:
|
|
7866
|
+
"""Smooth a vector data using the smoothify library.
|
|
7867
|
+
See https://github.com/DPIRD-DMA/Smoothify for more details.
|
|
7868
|
+
|
|
7869
|
+
Args:
|
|
7870
|
+
vector_data: The vector data to smooth.
|
|
7871
|
+
output_path: The path to save the smoothed vector data. If None, returns the smoothed vector data.
|
|
7872
|
+
segment_length: Resolution of the original raster data in map units. If None (default), automatically
|
|
7873
|
+
detects by finding the minimum segment length (from a data sample). Recommended to specify explicitly when known.
|
|
7874
|
+
smooth_iterations: The number of iterations to smooth the vector data.
|
|
7875
|
+
num_cores: Number of cores to use for parallel processing. If 0 (default), uses all available cores.
|
|
7876
|
+
merge_collection: Whether to merge/dissolve adjacent geometries in collections before smoothing.
|
|
7877
|
+
merge_field: Column name to use for dissolving geometries. Only valid when merge_collection=True.
|
|
7878
|
+
If None, dissolves all geometries together. If specified, dissolves geometries grouped by the column values.
|
|
7879
|
+
merge_multipolygons: Whether to merge adjacent polygons within MultiPolygons before smoothing
|
|
7880
|
+
preserve_area: Whether to restore original area after smoothing via buffering (applies to Polygons only)
|
|
7881
|
+
area_tolerance: Percentage of original area allowed as error (e.g., 0.01 = 0.01% error = 99.99% preservation).
|
|
7882
|
+
Only affects Polygons when preserve_area=True
|
|
7883
|
+
|
|
7884
|
+
Returns:
|
|
7885
|
+
gpd.GeoDataFrame: The smoothed vector data.
|
|
7886
|
+
|
|
7887
|
+
Examples:
|
|
7888
|
+
>>> import geoai
|
|
7889
|
+
>>> gdf = geoai.read_vector("path/to/vector.geojson")
|
|
7890
|
+
>>> smoothed_gdf = geoai.smooth_vector(gdf, smooth_iterations=3, output_path="path/to/smoothed_vector.geojson")
|
|
7891
|
+
>>> smoothed_gdf.head()
|
|
7892
|
+
>>> smoothed_gdf.explore()
|
|
7893
|
+
"""
|
|
7894
|
+
try:
|
|
7895
|
+
from smoothify import smoothify
|
|
7896
|
+
except ImportError:
|
|
7897
|
+
install_package("smoothify")
|
|
7898
|
+
from smoothify import smoothify
|
|
7899
|
+
|
|
7900
|
+
if isinstance(vector_data, str):
|
|
7901
|
+
vector_data = leafmap.read_vector(vector_data)
|
|
7902
|
+
|
|
7903
|
+
smoothed_vector_data = smoothify(
|
|
7904
|
+
geom=vector_data,
|
|
7905
|
+
segment_length=segment_length,
|
|
7906
|
+
smooth_iterations=smooth_iterations,
|
|
7907
|
+
num_cores=num_cores,
|
|
7908
|
+
merge_collection=merge_collection,
|
|
7909
|
+
merge_field=merge_field,
|
|
7910
|
+
merge_multipolygons=merge_multipolygons,
|
|
7911
|
+
preserve_area=preserve_area,
|
|
7912
|
+
area_tolerance=area_tolerance,
|
|
7913
|
+
**kwargs,
|
|
7914
|
+
)
|
|
7915
|
+
if output_path is not None:
|
|
7916
|
+
smoothed_vector_data.to_file(output_path)
|
|
7917
|
+
return smoothed_vector_data
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geoai-py
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.23.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: smoothify
|
|
41
42
|
Requires-Dist: timm
|
|
42
43
|
Requires-Dist: tokenizers>=0.22.1
|
|
43
44
|
Requires-Dist: torch
|
|
@@ -51,6 +52,7 @@ Requires-Dist: torchange; extra == "extra"
|
|
|
51
52
|
Requires-Dist: lightly-train; extra == "extra"
|
|
52
53
|
Requires-Dist: multiclean; extra == "extra"
|
|
53
54
|
Requires-Dist: omnicloudmask; extra == "extra"
|
|
55
|
+
Requires-Dist: smoothify; extra == "extra"
|
|
54
56
|
Provides-Extra: agents
|
|
55
57
|
Requires-Dist: strands-agents; extra == "agents"
|
|
56
58
|
Requires-Dist: strands-agents-tools; extra == "agents"
|
|
@@ -163,6 +163,8 @@ nav:
|
|
|
163
163
|
- examples/moondream.ipynb
|
|
164
164
|
- examples/moondream_gui.ipynb
|
|
165
165
|
- examples/AutoModel.ipynb
|
|
166
|
+
- examples/smooth_vector.ipynb
|
|
167
|
+
- examples/timelapse.ipynb
|
|
166
168
|
- Workshops:
|
|
167
169
|
- workshops/GeoAI_Workshop_2025.ipynb
|
|
168
170
|
- workshops/AWS_2025.ipynb
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "geoai-py"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.23.0"
|
|
4
4
|
dynamic = [
|
|
5
5
|
"dependencies",
|
|
6
6
|
]
|
|
@@ -36,7 +36,7 @@ exclude = ["docs*"]
|
|
|
36
36
|
dependencies = {file = ["requirements.txt"]}
|
|
37
37
|
|
|
38
38
|
[project.optional-dependencies]
|
|
39
|
-
extra = ["overturemaps", "torchange", "lightly-train", "multiclean", "omnicloudmask"]
|
|
39
|
+
extra = ["overturemaps", "torchange", "lightly-train", "multiclean", "omnicloudmask", "smoothify"]
|
|
40
40
|
agents = ["strands-agents", "strands-agents-tools", "strands-agents[ollama]", "strands-agents[anthropic]", "strands-agents[openai]"]
|
|
41
41
|
sr = ["opensr-model"]
|
|
42
42
|
|
|
@@ -45,7 +45,7 @@ universal = true
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
[tool.bumpversion]
|
|
48
|
-
current_version = "0.
|
|
48
|
+
current_version = "0.23.0"
|
|
49
49
|
commit = true
|
|
50
50
|
tag = true
|
|
51
51
|
|
|
@@ -93,19 +93,190 @@ python -c "import samgeo; print('samgeo import successful')"
|
|
|
93
93
|
|
|
94
94
|
#### Installation on Windows
|
|
95
95
|
|
|
96
|
-
Windows
|
|
96
|
+
Windows installation requires some additional steps compared to Linux/macOS. Choose the appropriate section based on whether you have an NVIDIA GPU or want CPU-only installation.
|
|
97
|
+
|
|
98
|
+
**Prerequisites (Required for all Windows users):**
|
|
99
|
+
|
|
100
|
+
1. Install [Miniconda](https://docs.conda.io/en/latest/miniconda.html) or [Anaconda](https://www.anaconda.com/download) if you haven't already.
|
|
101
|
+
2. Open **Anaconda Prompt** (not PowerShell or CMD) for all installation commands.
|
|
102
|
+
3. For GPU users: Ensure you have the latest [NVIDIA GPU drivers](https://www.nvidia.com/Download/index.aspx) installed.
|
|
103
|
+
|
|
104
|
+
##### Option A: Windows with NVIDIA GPU (CUDA)
|
|
105
|
+
|
|
106
|
+
This option provides the best performance using your NVIDIA GPU for model inference and training.
|
|
107
|
+
|
|
108
|
+
**Step 1: Create and activate the conda environment**
|
|
97
109
|
|
|
98
110
|
```bash
|
|
99
|
-
conda create -n geo python=3.12
|
|
111
|
+
conda create -n geo python=3.12 -y
|
|
100
112
|
conda activate geo
|
|
101
|
-
|
|
102
|
-
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Step 2: Install PyTorch with CUDA support**
|
|
116
|
+
|
|
117
|
+
First, check your NVIDIA driver version to determine the compatible CUDA version:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
nvidia-smi
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Look for the "CUDA Version" in the output. Then install the appropriate PyTorch version:
|
|
124
|
+
|
|
125
|
+
For CUDA 12.4 (recommended for newer drivers):
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
conda install pytorch torchvision pytorch-cuda=12.4 -c pytorch -c nvidia -y
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
For CUDA 12.1 (for older drivers):
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia -y
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Step 3: Verify PyTorch GPU installation**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'GPU: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"None\"}')"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
You should see `CUDA available: True` and your GPU name. If not, see the troubleshooting section below.
|
|
144
|
+
|
|
145
|
+
**Step 4: Install QGIS and core dependencies**
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
conda install -c conda-forge qgis -y
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Step 5: Install GeoAI**
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
conda install -c conda-forge geoai -y
|
|
103
155
|
python -c "import geoai; print('geoai import successful')"
|
|
104
|
-
conda install -c conda-forge qgis
|
|
105
|
-
pip install -U "segment-geospatial[samgeo3]" triton-windows
|
|
106
|
-
pip install -U sam3 geoai
|
|
107
156
|
```
|
|
108
157
|
|
|
158
|
+
**Step 6: Install SamGeo with SAM3 support**
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
pip install -U triton-windows
|
|
162
|
+
pip install -U "segment-geospatial[samgeo3]"
|
|
163
|
+
pip install -U sam3
|
|
164
|
+
python -c "import samgeo; print('samgeo import successful')"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
##### Option B: Windows CPU-Only (No GPU)
|
|
168
|
+
|
|
169
|
+
Use this option if you don't have an NVIDIA GPU or want a simpler installation.
|
|
170
|
+
|
|
171
|
+
**Step 1: Create and activate the conda environment**
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
conda create -n geo python=3.12 -y
|
|
175
|
+
conda activate geo
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Step 2: Install PyTorch (CPU version)**
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
conda install pytorch torchvision cpuonly -c pytorch -y
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Step 3: Verify PyTorch installation**
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print('PyTorch CPU installation successful')"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Step 4: Install QGIS and core dependencies**
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
conda install -c conda-forge qgis -y
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Step 5: Install GeoAI**
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
conda install -c conda-forge geoai -y
|
|
200
|
+
python -c "import geoai; print('geoai import successful')"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Step 6: Install SamGeo (without SAM3)**
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
pip install segment-geospatial
|
|
207
|
+
python -c "import samgeo; print('samgeo import successful')"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
##### Windows Troubleshooting
|
|
211
|
+
|
|
212
|
+
**Common Issue 1: CUDA not detected after PyTorch installation**
|
|
213
|
+
|
|
214
|
+
If `torch.cuda.is_available()` returns `False`:
|
|
215
|
+
|
|
216
|
+
1. Verify NVIDIA drivers are installed: Run `nvidia-smi` in command prompt
|
|
217
|
+
2. Ensure you installed the CUDA-enabled PyTorch (not CPU version)
|
|
218
|
+
3. Try reinstalling PyTorch:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
conda uninstall pytorch torchvision -y
|
|
222
|
+
conda install pytorch torchvision pytorch-cuda=12.4 -c pytorch -c nvidia -y
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Common Issue 2: DLL load failed or missing dependencies**
|
|
226
|
+
|
|
227
|
+
If you see errors like `DLL load failed` or `ImportError`:
|
|
228
|
+
|
|
229
|
+
1. Install Microsoft Visual C++ Redistributable:
|
|
230
|
+
- Download and install [VC++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe)
|
|
231
|
+
2. Restart your computer after installation
|
|
232
|
+
|
|
233
|
+
**Common Issue 3: Triton installation fails**
|
|
234
|
+
|
|
235
|
+
Triton is required for SAM3 on Windows. If `pip install triton-windows` fails:
|
|
236
|
+
|
|
237
|
+
1. Ensure you're using Python 3.12 (not 3.13+)
|
|
238
|
+
2. Try installing from conda-forge:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
pip install triton-windows --no-cache-dir
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
If Triton still doesn't work, you can skip SAM3 and use SAM1/SAM2 instead.
|
|
245
|
+
|
|
246
|
+
**Common Issue 4: Permission errors during installation**
|
|
247
|
+
|
|
248
|
+
Run Anaconda Prompt as Administrator, or try:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
pip install --user <package-name>
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Common Issue 5: QGIS fails to start or shows import errors**
|
|
255
|
+
|
|
256
|
+
Make sure you launch QGIS from the activated conda environment:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
conda activate geo
|
|
260
|
+
qgis
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Do NOT use the QGIS shortcut from the Start Menu—it won't have access to the conda packages.
|
|
264
|
+
|
|
265
|
+
**Common Issue 6: Out of memory errors**
|
|
266
|
+
|
|
267
|
+
If you run out of GPU memory:
|
|
268
|
+
|
|
269
|
+
1. Use the **GPU** button in the GeoAI toolbar to clear memory
|
|
270
|
+
2. Close other GPU-intensive applications
|
|
271
|
+
3. Use smaller batch sizes in training/inference settings
|
|
272
|
+
4. Switch to CPU mode in the plugin settings for smaller tasks
|
|
273
|
+
|
|
274
|
+
##### Video Tutorial
|
|
275
|
+
|
|
276
|
+
You can follow this [video tutorial](https://youtu.be/a-Ns9peiuu8) to install the GeoAI QGIS Plugin on Windows:
|
|
277
|
+
|
|
278
|
+
[](https://youtu.be/a-Ns9peiuu8)
|
|
279
|
+
|
|
109
280
|
#### Request access to SAM 3
|
|
110
281
|
|
|
111
282
|
To use SAM 3, you will need to request access by filling out this form on Hugging Face at <https://huggingface.co/facebook/sam3>. Once your request has been approved, run the following command in the terminal to authenticate:
|
|
@@ -116,7 +287,19 @@ hf auth login
|
|
|
116
287
|
|
|
117
288
|
### 2) Install the QGIS plugin
|
|
118
289
|
|
|
119
|
-
Option A — use
|
|
290
|
+
Option A — use QGIS Plugin Manager (recommended):
|
|
291
|
+
|
|
292
|
+
GeoAI is available as an experimental plugin in the official [QGIS plugin repository](https://plugins.qgis.org/plugins/geoai). To install:
|
|
293
|
+
|
|
294
|
+
1. Launch QGIS: `conda run qgis`
|
|
295
|
+
2. Go to `Plugins` → `Manage and Install Plugins...` → `Settings` tab → check `Show also Experimental Plugins` → Click on `Reload all Repositories` button.
|
|
296
|
+
3. Switch to the `All` tab, search for `GeoAI`, select it, and click `Install Experimental Plugin`.
|
|
297
|
+
|
|
298
|
+

|
|
299
|
+
|
|
300
|
+

|
|
301
|
+
|
|
302
|
+
Option B — use the helper script:
|
|
120
303
|
|
|
121
304
|
```bash
|
|
122
305
|
git clone https://github.com/opengeos/geoai.git
|
|
@@ -130,7 +313,7 @@ This links/copies the plugin into your active QGIS profile. Re-run after pulling
|
|
|
130
313
|
python install.py --remove
|
|
131
314
|
```
|
|
132
315
|
|
|
133
|
-
Option
|
|
316
|
+
Option C — manual copy:
|
|
134
317
|
|
|
135
318
|
- Copy the `qgis_plugin` folder to your QGIS plugins directory:
|
|
136
319
|
- Linux: `~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/`
|
|
@@ -143,6 +326,8 @@ Launch QGIS: `conda run qgis`
|
|
|
143
326
|
|
|
144
327
|
QGIS → `Plugins` → `Manage and Install Plugins...` → enable `GeoAI`. After updates, toggle the plugin off/on or restart QGIS to reload.
|
|
145
328
|
|
|
329
|
+

|
|
330
|
+
|
|
146
331
|
## Usage
|
|
147
332
|
|
|
148
333
|
### Moondream Vision-Language Model
|
|
@@ -243,6 +428,12 @@ Click the **GPU** button in the GeoAI toolbar to release GPU memory from all loa
|
|
|
243
428
|
|
|
244
429
|

|
|
245
430
|
|
|
431
|
+
### Plugin Update Checker
|
|
432
|
+
|
|
433
|
+
Go to `GeoAI` menu → `Check for Updates...` to see if a newer version of the GeoAI plugin is available. Click on the `Check for Updates` button to fetch the latest version info from GitHub. If an update is found, click the `Download and Install Update` button to download and install the latest version automatically. Restart QGIS to apply the update.
|
|
434
|
+
|
|
435
|
+

|
|
436
|
+
|
|
246
437
|
## Supported Model Architectures (Segmentation)
|
|
247
438
|
|
|
248
439
|
The QGIS plugin supports any models supported by [Pytorch Segmentation Models](https://smp.readthedocs.io/en/latest/models.html), including:
|