From d28b0b9e9617c75d2cd87104f715a3806b7f5d14 Mon Sep 17 00:00:00 2001 From: "marjan.asgari" Date: Tue, 22 Oct 2024 19:01:25 +0000 Subject: [PATCH 1/3] bbox_transform --- .dockerignore | 0 .github/workflows/test.yml | 0 .gitignore | 0 Dockerfile | 0 LICENSE | 0 MANIFEST.in | 0 README.md | 0 VERSION | 0 .../run_geo_inference_with_scripted_model.ipynb | 0 examples/script_model.py | 0 examples/test_small.tif | Bin geo_inference/__init__.py | 0 geo_inference/config/__init__.py | 0 geo_inference/config/log_config.yaml | 0 geo_inference/config/logging_config.py | 0 geo_inference/config/sample.yaml | 0 geo_inference/geo_dask.py | 0 geo_inference/geo_inference.py | 14 +++++++++++--- geo_inference/utils/__init__.py | 0 geo_inference/utils/geo.py | 0 geo_inference/utils/geo_transforms.py | 0 geo_inference/utils/helpers.py | 0 geo_inference/utils/polygon.py | 0 pyproject.toml | 0 requirements.txt | 0 tests/__init__.py | 0 tests/data/0.tif | Bin tests/data/0_coco.json | 0 tests/data/0_corrupt.tif | Bin tests/data/0_mask.tif | Bin tests/data/0_polygons.geojson | 0 tests/data/0_yolo.csv | 0 tests/data/aff_gdf_result.csv | 0 tests/data/gj_to_px_result.geojson | 0 tests/data/inference/test_model/test_model.pt | Bin tests/data/sample.csv | 0 tests/data/sample.geojson | 0 tests/data/sample.yaml | 0 tests/test_geo_dask.py | 0 tests/test_geo_inference.py | 0 tests/utils/__init__.py | 0 tests/utils/test_geo.py | 0 tests/utils/test_geo_transforms.py | 0 tests/utils/test_helpers.py | 0 tests/utils/test_polygon.py | 0 45 files changed, 11 insertions(+), 3 deletions(-) mode change 100644 => 100755 .dockerignore mode change 100644 => 100755 .github/workflows/test.yml mode change 100644 => 100755 .gitignore mode change 100644 => 100755 Dockerfile mode change 100644 => 100755 LICENSE mode change 100644 => 100755 MANIFEST.in mode change 100644 => 100755 README.md mode change 100644 => 100755 VERSION mode change 100644 => 100755 examples/run_geo_inference_with_scripted_model.ipynb mode change 100644 => 100755 examples/script_model.py mode change 100644 => 100755 examples/test_small.tif mode change 100644 => 100755 geo_inference/__init__.py mode change 100644 => 100755 geo_inference/config/__init__.py mode change 100644 => 100755 geo_inference/config/log_config.yaml mode change 100644 => 100755 geo_inference/config/logging_config.py mode change 100644 => 100755 geo_inference/config/sample.yaml mode change 100644 => 100755 geo_inference/geo_dask.py mode change 100644 => 100755 geo_inference/geo_inference.py mode change 100644 => 100755 geo_inference/utils/__init__.py mode change 100644 => 100755 geo_inference/utils/geo.py mode change 100644 => 100755 geo_inference/utils/geo_transforms.py mode change 100644 => 100755 geo_inference/utils/helpers.py mode change 100644 => 100755 geo_inference/utils/polygon.py mode change 100644 => 100755 pyproject.toml mode change 100644 => 100755 requirements.txt mode change 100644 => 100755 tests/__init__.py mode change 100644 => 100755 tests/data/0.tif mode change 100644 => 100755 tests/data/0_coco.json mode change 100644 => 100755 tests/data/0_corrupt.tif mode change 100644 => 100755 tests/data/0_mask.tif mode change 100644 => 100755 tests/data/0_polygons.geojson mode change 100644 => 100755 tests/data/0_yolo.csv mode change 100644 => 100755 tests/data/aff_gdf_result.csv mode change 100644 => 100755 tests/data/gj_to_px_result.geojson mode change 100644 => 100755 tests/data/inference/test_model/test_model.pt mode change 100644 => 100755 tests/data/sample.csv mode change 100644 => 100755 tests/data/sample.geojson mode change 100644 => 100755 tests/data/sample.yaml mode change 100644 => 100755 tests/test_geo_dask.py mode change 100644 => 100755 tests/test_geo_inference.py mode change 100644 => 100755 tests/utils/__init__.py mode change 100644 => 100755 tests/utils/test_geo.py mode change 100644 => 100755 tests/utils/test_geo_transforms.py mode change 100644 => 100755 tests/utils/test_helpers.py mode change 100644 => 100755 tests/utils/test_polygon.py diff --git a/.dockerignore b/.dockerignore old mode 100644 new mode 100755 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/MANIFEST.in b/MANIFEST.in old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/VERSION b/VERSION old mode 100644 new mode 100755 diff --git a/examples/run_geo_inference_with_scripted_model.ipynb b/examples/run_geo_inference_with_scripted_model.ipynb old mode 100644 new mode 100755 diff --git a/examples/script_model.py b/examples/script_model.py old mode 100644 new mode 100755 diff --git a/examples/test_small.tif b/examples/test_small.tif old mode 100644 new mode 100755 diff --git a/geo_inference/__init__.py b/geo_inference/__init__.py old mode 100644 new mode 100755 diff --git a/geo_inference/config/__init__.py b/geo_inference/config/__init__.py old mode 100644 new mode 100755 diff --git a/geo_inference/config/log_config.yaml b/geo_inference/config/log_config.yaml old mode 100644 new mode 100755 diff --git a/geo_inference/config/logging_config.py b/geo_inference/config/logging_config.py old mode 100644 new mode 100755 diff --git a/geo_inference/config/sample.yaml b/geo_inference/config/sample.yaml old mode 100644 new mode 100755 diff --git a/geo_inference/geo_dask.py b/geo_inference/geo_dask.py old mode 100644 new mode 100755 diff --git a/geo_inference/geo_inference.py b/geo_inference/geo_inference.py old mode 100644 new mode 100755 index d849e5a..3130549 --- a/geo_inference/geo_inference.py +++ b/geo_inference/geo_inference.py @@ -290,8 +290,16 @@ async def async_run_inference(self, top=bbox[3], transform=self.raster_meta["transform"], ) - col_off, row_off = roi_window.col_off, roi_window.row_off - width, height = roi_window.width, roi_window.height + self.bbox_transform = from_origin(bbox[0], # new min_x (upper-left corner x) + bbox[3], # new max_y (upper-left corner y) + self.raster_meta["transform"].a, + self.raster_meta["transform"].e if self.raster_meta["transform"].e < 0 else -1 * self.raster_meta["transform"].e + ) + self.raster_meta.update({ + 'transform': self.bbox_transform, + }) + col_off, row_off = int(self.roi_window.col_off), int(self.roi_window.row_off) + width, height = int(self.roi_window.width), int(self.roi_window.height) aoi_dask_array = aoi_dask_array[ :, row_off : row_off + height, col_off : col_off + width ] @@ -345,7 +353,7 @@ async def async_run_inference(self, pbar.register() import rioxarray logger.info("Inference is running:") - aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster)) + aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster, self.bbox_transform)) aoi_dask_array.rio.to_raster(mask_path, tiled=True, lock=threading.Lock()) total_time = time.time() - start_time diff --git a/geo_inference/utils/__init__.py b/geo_inference/utils/__init__.py old mode 100644 new mode 100755 diff --git a/geo_inference/utils/geo.py b/geo_inference/utils/geo.py old mode 100644 new mode 100755 diff --git a/geo_inference/utils/geo_transforms.py b/geo_inference/utils/geo_transforms.py old mode 100644 new mode 100755 diff --git a/geo_inference/utils/helpers.py b/geo_inference/utils/helpers.py old mode 100644 new mode 100755 diff --git a/geo_inference/utils/polygon.py b/geo_inference/utils/polygon.py old mode 100644 new mode 100755 diff --git a/pyproject.toml b/pyproject.toml old mode 100644 new mode 100755 diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 diff --git a/tests/__init__.py b/tests/__init__.py old mode 100644 new mode 100755 diff --git a/tests/data/0.tif b/tests/data/0.tif old mode 100644 new mode 100755 diff --git a/tests/data/0_coco.json b/tests/data/0_coco.json old mode 100644 new mode 100755 diff --git a/tests/data/0_corrupt.tif b/tests/data/0_corrupt.tif old mode 100644 new mode 100755 diff --git a/tests/data/0_mask.tif b/tests/data/0_mask.tif old mode 100644 new mode 100755 diff --git a/tests/data/0_polygons.geojson b/tests/data/0_polygons.geojson old mode 100644 new mode 100755 diff --git a/tests/data/0_yolo.csv b/tests/data/0_yolo.csv old mode 100644 new mode 100755 diff --git a/tests/data/aff_gdf_result.csv b/tests/data/aff_gdf_result.csv old mode 100644 new mode 100755 diff --git a/tests/data/gj_to_px_result.geojson b/tests/data/gj_to_px_result.geojson old mode 100644 new mode 100755 diff --git a/tests/data/inference/test_model/test_model.pt b/tests/data/inference/test_model/test_model.pt old mode 100644 new mode 100755 diff --git a/tests/data/sample.csv b/tests/data/sample.csv old mode 100644 new mode 100755 diff --git a/tests/data/sample.geojson b/tests/data/sample.geojson old mode 100644 new mode 100755 diff --git a/tests/data/sample.yaml b/tests/data/sample.yaml old mode 100644 new mode 100755 diff --git a/tests/test_geo_dask.py b/tests/test_geo_dask.py old mode 100644 new mode 100755 diff --git a/tests/test_geo_inference.py b/tests/test_geo_inference.py old mode 100644 new mode 100755 diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py old mode 100644 new mode 100755 diff --git a/tests/utils/test_geo.py b/tests/utils/test_geo.py old mode 100644 new mode 100755 diff --git a/tests/utils/test_geo_transforms.py b/tests/utils/test_geo_transforms.py old mode 100644 new mode 100755 diff --git a/tests/utils/test_helpers.py b/tests/utils/test_helpers.py old mode 100644 new mode 100755 diff --git a/tests/utils/test_polygon.py b/tests/utils/test_polygon.py old mode 100644 new mode 100755 From 5ff93fc318cb7b68bff4d1de24ef9a9bb2a0a2bb Mon Sep 17 00:00:00 2001 From: "marjan.asgari" Date: Tue, 22 Oct 2024 19:34:32 +0000 Subject: [PATCH 2/3] bbox-transform --- geo_inference/geo_inference.py | 16 +++++++++------- geo_inference/utils/helpers.py | 7 ++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/geo_inference/geo_inference.py b/geo_inference/geo_inference.py index a4ff9e4..19312b7 100755 --- a/geo_inference/geo_inference.py +++ b/geo_inference/geo_inference.py @@ -293,19 +293,21 @@ async def async_run_inference(self, top=bbox[3], transform=self.raster_meta["transform"], ) - self.bbox_transform = from_origin(bbox[0], # new min_x (upper-left corner x) - bbox[3], # new max_y (upper-left corner y) + self.bbox_transform = from_origin(bbox[0], + bbox[3], self.raster_meta["transform"].a, - self.raster_meta["transform"].e if self.raster_meta["transform"].e < 0 else -1 * self.raster_meta["transform"].e + self.raster_meta["transform"].e if self.raster_meta["transform"].e > 0 else -1 * self.raster_meta["transform"].e ) - self.raster_meta.update({ - 'transform': self.bbox_transform, - }) col_off, row_off = int(self.roi_window.col_off), int(self.roi_window.row_off) width, height = int(self.roi_window.width), int(self.roi_window.height) aoi_dask_array = aoi_dask_array[ :, row_off : row_off + height, col_off : col_off + width ] + self.raster_meta.update({ + 'transform': self.bbox_transform, + 'width': aoi_dask_array.shape[2], + 'height': aoi_dask_array.shape[1] + }) self.original_shape = aoi_dask_array.shape # Pad the array to make dimensions multiples of the patch size pad_height = ( @@ -356,7 +358,7 @@ async def async_run_inference(self, pbar.register() import rioxarray logger.info("Inference is running:") - aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster, self.bbox_transform)) + aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster, self.raster_meta)) aoi_dask_array.rio.to_raster(mask_path, tiled=True, lock=threading.Lock()) total_time = time.time() - start_time diff --git a/geo_inference/utils/helpers.py b/geo_inference/utils/helpers.py index 070ed84..b3523a1 100755 --- a/geo_inference/utils/helpers.py +++ b/geo_inference/utils/helpers.py @@ -231,6 +231,7 @@ def select_model_device(gpu_id: int, multi_gpu: bool): def xarray_profile_info( raster, + raster_meta, ): """ Save mask to file. @@ -242,10 +243,10 @@ def xarray_profile_info( driver = 'GTiff' if raster.driver == 'VRT' else raster.driver profile_kwargs = { 'crs': raster.crs.to_string(), # Coordinate Reference System, using src.crs.to_string() to get a string representation - 'transform': raster.transform, # Affine transformation matrix + 'transform': raster_meta["transform"], # Affine transformation matrix 'count': 1, # Number of bands - 'width': raster.width, # Width of the raster - 'height': raster.height, # Height of the raster + 'width': raster_meta["width"], # Width of the raster + 'height': raster_meta["height"], # Height of the raster 'driver': driver, # Raster format driver 'dtype': "uint8", # Data type (use dtype directly if it's a valid format for xarray) 'BIGTIFF': 'YES', # BigTIFF option From af486a44ce914846443c474b77d73cdf6d5889e5 Mon Sep 17 00:00:00 2001 From: "marjan.asgari" Date: Tue, 22 Oct 2024 19:48:19 +0000 Subject: [PATCH 3/3] bbox-transform --- geo_inference/geo_inference.py | 2 +- geo_inference/utils/helpers.py | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/geo_inference/geo_inference.py b/geo_inference/geo_inference.py index 19312b7..66c73a2 100755 --- a/geo_inference/geo_inference.py +++ b/geo_inference/geo_inference.py @@ -358,7 +358,7 @@ async def async_run_inference(self, pbar.register() import rioxarray logger.info("Inference is running:") - aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster, self.raster_meta)) + aoi_dask_array = xr.DataArray(aoi_dask_array[: self.original_shape[1], : self.original_shape[2]], dims=("y", "x"), attrs= self.json if self.json is not None else xarray_profile_info(self.raster_meta)) aoi_dask_array.rio.to_raster(mask_path, tiled=True, lock=threading.Lock()) total_time = time.time() - start_time diff --git a/geo_inference/utils/helpers.py b/geo_inference/utils/helpers.py index b3523a1..c070ce9 100755 --- a/geo_inference/utils/helpers.py +++ b/geo_inference/utils/helpers.py @@ -230,8 +230,7 @@ def select_model_device(gpu_id: int, multi_gpu: bool): def xarray_profile_info( - raster, - raster_meta, + raster_meta ): """ Save mask to file. @@ -240,14 +239,14 @@ def xarray_profile_info( Returns: None """ - driver = 'GTiff' if raster.driver == 'VRT' else raster.driver + raster_meta["driver"] = 'GTiff' if raster_meta["driver"] == 'VRT' else raster_meta["driver"] profile_kwargs = { - 'crs': raster.crs.to_string(), # Coordinate Reference System, using src.crs.to_string() to get a string representation - 'transform': raster_meta["transform"], # Affine transformation matrix + 'crs': raster_meta["crs"], # Coordinate Reference System, using src.crs.to_string() to get a string representation + 'transform': raster_meta['transform'], # Affine transformation matrix 'count': 1, # Number of bands - 'width': raster_meta["width"], # Width of the raster - 'height': raster_meta["height"], # Height of the raster - 'driver': driver, # Raster format driver + 'width': raster_meta['width'], # Width of the raster + 'height': raster_meta['height'], # Height of the raster + 'driver': raster_meta["driver"], # Raster format driver 'dtype': "uint8", # Data type (use dtype directly if it's a valid format for xarray) 'BIGTIFF': 'YES', # BigTIFF option 'compress': 'lzw' # Compression type