Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
fabricebrito committed Oct 26, 2023
1 parent 3f8d18e commit 5c632a7
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 104 deletions.
22 changes: 5 additions & 17 deletions water-bodies/command-line-tools/norm_diff/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
FROM mambaorg/micromamba
FROM docker.io/python:3.10-slim

USER root
RUN pip install --no-cache-dir rasterio click loguru && \
python -c "import rasterio"

ENV PATH=/opt/conda/envs/env_norm_diff/bin:$PATH

RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl gcc build-essential && \
apt-get clean

RUN mkdir -p /app && chown -R mambauser:mambauser /app

USER mambauser
ADD app.py /app/app.py

RUN micromamba create -n env_norm_diff -c conda-forge gdal click loguru && \
micromamba clean -a
ENTRYPOINT []

ADD app.py /app/app.py
40 changes: 12 additions & 28 deletions water-bodies/command-line-tools/norm_diff/app.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
"""Normalized difference"""
import click
import rasterio
import numpy as np
from osgeo import gdal
from loguru import logger

gdal.UseExceptions()
np.seterr(divide="ignore", invalid="ignore")


@click.command(
short_help="Normalized difference",
Expand All @@ -16,35 +17,18 @@ def normalized_difference(rasters):

logger.info(f"Processing the normalized image with {rasters[0]} and {rasters[1]}")

# Allow division by zero
np.seterr(divide="ignore", invalid="ignore")

ds1 = gdal.Open(rasters[0])
ds2 = gdal.Open(rasters[1])

driver = gdal.GetDriverByName("GTiff")

dst_ds = driver.Create(
"norm_diff.tif",
ds1.RasterXSize,
ds1.RasterYSize,
1,
gdal.GDT_Float32,
options=["TILED=YES", "COMPRESS=DEFLATE", "INTERLEAVE=BAND"],
)

dst_ds.SetGeoTransform(ds1.GetGeoTransform())
dst_ds.SetProjection(ds1.GetProjectionRef())

array1 = ds1.GetRasterBand(1).ReadAsArray().astype(float)
array2 = ds2.GetRasterBand(1).ReadAsArray().astype(float)
with rasterio.open(rasters[0]) as ds1:
array1 = ds1.read(1)
out_meta = ds1.meta.copy()

norm_diff = (array1 - array2) / (array1 + array2)
with rasterio.open(rasters[0]) as ds2:
array2 = ds2.read(1)

dst_ds.GetRasterBand(1).WriteArray(norm_diff)
out_meta.update({'dtype': "float32"})

dst_ds = None
ds1 = ds2 = None
with rasterio.open("norm_diff.tif", 'w', **out_meta) as dst_dataset:
logger.info(f"Write norm_diff.tif")
dst_dataset.write((array1 - array2) / (array1 + array2), indexes=1)

logger.info("Done!")

Expand Down
22 changes: 5 additions & 17 deletions water-bodies/command-line-tools/otsu/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,8 @@
FROM mambaorg/micromamba
FROM docker.io/python:3.10-slim

USER root

ENV PATH=/opt/conda/envs/env_otsu/bin:$PATH

RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl gcc build-essential && \
apt-get clean

RUN mkdir -p /app && chown -R mambauser:mambauser /app

USER mambauser

RUN micromamba create -n env_otsu -c conda-forge gdal scikit-image click loguru
RUN pip install --no-cache-dir rasterio scikit-image click loguru && \
python -c "import rasterio"

ADD app.py /app/app.py

ENTRYPOINT []
33 changes: 8 additions & 25 deletions water-bodies/command-line-tools/otsu/app.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
"""Command line tool to apply the Otsu threshold to a raster"""
import click
import rasterio
import numpy as np
from osgeo import gdal
from skimage.filters import threshold_otsu
from loguru import logger

gdal.UseExceptions()

def threshold(data):
"""Returns the Otsu threshold of a numpy array"""
return data > threshold_otsu(data[np.isfinite(data)])
Expand All @@ -20,30 +18,15 @@ def threshold(data):
def otsu(raster):
"""Applies the Otsu threshold"""

logger.info(f"Applying the Otsu threshold to {raster}")
ds = gdal.Open(raster)

driver = gdal.GetDriverByName("GTiff")

dst_ds = driver.Create(
"otsu.tif",
ds.RasterXSize,
ds.RasterYSize,
1,
gdal.GDT_Byte,
options=["TILED=YES", "COMPRESS=DEFLATE", "INTERLEAVE=BAND"],
)
with rasterio.open(raster) as ds:
array = ds.read(1)
out_meta = ds.meta.copy()

dst_ds.SetGeoTransform(ds.GetGeoTransform())
dst_ds.SetProjection(ds.GetProjectionRef())

array = ds.GetRasterBand(1).ReadAsArray().astype(float)

dst_ds.GetRasterBand(1).WriteArray(threshold(array))
dst_ds.GetRasterBand(1).SetNoDataValue(0)
logger.info(f"Applying the Otsu threshold to {raster}")

dst_ds = None
ds = None
with rasterio.open("otsu.tif", 'w', **out_meta) as dst_dataset:
logger.info(f"Write otsu.tif")
dst_dataset.write(threshold(array), indexes=1)

logger.info("Done!")

Expand Down
21 changes: 4 additions & 17 deletions water-bodies/command-line-tools/stac/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,8 @@
FROM mambaorg/micromamba
FROM docker.io/python:3.10-slim

USER root

ENV PATH=/opt/conda/envs/env_stac/bin:$PATH

RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl gcc build-essential && \
apt-get clean

USER mambauser

RUN micromamba create -n env_stac -c conda-forge pystac python=3.9 pip loguru && \
/opt/conda/envs/env_stac/bin/pip install rio_stac
RUN pip install --no-cache-dir pystac rio_stac loguru click && \
python -c "import rio_stac"

ADD app.py /app/app.py

WORKDIR /home/mambauser
ENTRYPOINT []

0 comments on commit 5c632a7

Please sign in to comment.