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.
Files changed (83) hide show
  1. {geoai_py-0.22.0 → geoai_py-0.23.0}/.gitignore +2 -0
  2. {geoai_py-0.22.0 → geoai_py-0.23.0}/PKG-INFO +3 -1
  3. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/__init__.py +1 -1
  4. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/utils.py +67 -0
  5. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/PKG-INFO +3 -1
  6. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/requires.txt +2 -0
  7. {geoai_py-0.22.0 → geoai_py-0.23.0}/mkdocs.yml +2 -0
  8. {geoai_py-0.22.0 → geoai_py-0.23.0}/pyproject.toml +3 -3
  9. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/README.md +200 -9
  10. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/samgeo.py +207 -62
  11. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/segmentation.py +133 -11
  12. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/update_checker.py +4 -3
  13. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/metadata.txt +8 -2
  14. {geoai_py-0.22.0 → geoai_py-0.23.0}/requirements.txt +1 -0
  15. {geoai_py-0.22.0 → geoai_py-0.23.0}/.dockerignore +0 -0
  16. {geoai_py-0.22.0 → geoai_py-0.23.0}/.editorconfig +0 -0
  17. {geoai_py-0.22.0 → geoai_py-0.23.0}/.pre-commit-config.yaml +0 -0
  18. {geoai_py-0.22.0 → geoai_py-0.23.0}/CITATION.cff +0 -0
  19. {geoai_py-0.22.0 → geoai_py-0.23.0}/Dockerfile +0 -0
  20. {geoai_py-0.22.0 → geoai_py-0.23.0}/LICENSE +0 -0
  21. {geoai_py-0.22.0 → geoai_py-0.23.0}/MANIFEST.in +0 -0
  22. {geoai_py-0.22.0 → geoai_py-0.23.0}/README.md +0 -0
  23. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/__init__.py +0 -0
  24. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/catalog_models.py +0 -0
  25. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/catalog_tools.py +0 -0
  26. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/geo_agents.py +0 -0
  27. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/map_tools.py +0 -0
  28. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/stac_models.py +0 -0
  29. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/agents/stac_tools.py +0 -0
  30. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/auto.py +0 -0
  31. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/change_detection.py +0 -0
  32. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/classify.py +0 -0
  33. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/detectron2.py +0 -0
  34. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/dinov3.py +0 -0
  35. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/download.py +0 -0
  36. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/extract.py +0 -0
  37. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/geoai.py +0 -0
  38. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/hf.py +0 -0
  39. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/landcover_train.py +0 -0
  40. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/landcover_utils.py +0 -0
  41. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/map_widgets.py +0 -0
  42. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/moondream.py +0 -0
  43. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/sam.py +0 -0
  44. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/segment.py +0 -0
  45. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/segmentation.py +0 -0
  46. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/timm_segment.py +0 -0
  47. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/timm_train.py +0 -0
  48. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/__init__.py +0 -0
  49. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/cloudmask.py +0 -0
  50. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/multiclean.py +0 -0
  51. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/tools/sr.py +0 -0
  52. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai/train.py +0 -0
  53. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/SOURCES.txt +0 -0
  54. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/dependency_links.txt +0 -0
  55. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/entry_points.txt +0 -0
  56. {geoai_py-0.22.0 → geoai_py-0.23.0}/geoai_py.egg-info/top_level.txt +0 -0
  57. {geoai_py-0.22.0 → geoai_py-0.23.0}/pytest.ini +0 -0
  58. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/LICENSE +0 -0
  59. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/__init__.py +0 -0
  60. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/_geoai_lib.py +0 -0
  61. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/__init__.py +0 -0
  62. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/map_tools.py +0 -0
  63. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/dialogs/moondream.py +0 -0
  64. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/geoai_plugin.py +0 -0
  65. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/about.svg +0 -0
  66. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/gpu.svg +0 -0
  67. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/icon.png +0 -0
  68. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/moondream.svg +0 -0
  69. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/samgeo.png +0 -0
  70. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/geoai_plugin/icons/segment.svg +0 -0
  71. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/install.py +0 -0
  72. {geoai_py-0.22.0 → geoai_py-0.23.0}/qgis_plugin/install.sh +0 -0
  73. {geoai_py-0.22.0 → geoai_py-0.23.0}/requirements_docs.txt +0 -0
  74. {geoai_py-0.22.0 → geoai_py-0.23.0}/setup.cfg +0 -0
  75. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/__init__.py +0 -0
  76. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/create_test_data.py +0 -0
  77. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_classify.py +0 -0
  78. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_download.py +0 -0
  79. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_extract.py +0 -0
  80. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_fixtures.py +0 -0
  81. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_geoai.py +0 -0
  82. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_segment.py +0 -0
  83. {geoai_py-0.22.0 → geoai_py-0.23.0}/tests/test_utils.py +0 -0
@@ -21,6 +21,8 @@ docs/workshops/**/*.txt
21
21
  *.geojson
22
22
  *.gpkg
23
23
  *.csv
24
+ *.mp4
25
+ *.gif
24
26
  docs/examples/*.md
25
27
  *.xml
26
28
  docs/examples/output/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geoai-py
3
- Version: 0.22.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"
@@ -2,7 +2,7 @@
2
2
 
3
3
  __author__ = """Qiusheng Wu"""
4
4
  __email__ = "giswqs@gmail.com"
5
- __version__ = "0.22.0"
5
+ __version__ = "0.23.0"
6
6
 
7
7
 
8
8
  import os
@@ -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.22.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"
@@ -20,6 +20,7 @@ rasterio
20
20
  rioxarray
21
21
  scikit-image
22
22
  scikit-learn
23
+ smoothify
23
24
  timm
24
25
  tokenizers>=0.22.1
25
26
  torch
@@ -41,6 +42,7 @@ torchange
41
42
  lightly-train
42
43
  multiclean
43
44
  omnicloudmask
45
+ smoothify
44
46
 
45
47
  [sr]
46
48
  opensr-model
@@ -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.22.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.22.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 + SAM3 often needs the PyTorch wheels from NVIDIA and PyPI:
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
- conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia
102
- conda install -c conda-forge geoai
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
+ [![windows](https://github.com/user-attachments/assets/8d89d535-1d66-45d2-a6c0-171416c259c9)](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 the helper script (recommended):
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
+ ![](https://github.com/user-attachments/assets/c15c4b7e-1e8c-45de-9127-671c7c2c85a9)
299
+
300
+ ![](https://github.com/user-attachments/assets/ea101a82-5df7-4947-99b8-d4a83a1598ed)
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 B — manual copy:
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
+ ![](https://github.com/user-attachments/assets/1b6dab14-311d-4f62-85aa-1faed73ead5b)
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
  ![](https://github.com/user-attachments/assets/76c9dd8a-581c-4975-9ecb-4bfe301447bd)
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
+ ![](https://github.com/user-attachments/assets/cc0dfd38-9b41-4735-9af0-c49b7aa71b72)
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: