Sentinel-2 NDVI
# Install AerEO and any required plugins for this notebook (Google Colab)
!pip install -q "aereo[viz]"
# Download config files and AOIs from the GitHub repository so this
# notebook can run outside the repo (e.g. Google Colab).
import os
import urllib.request
GITHUB_RAW = "https://raw.githubusercontent.com/frandorr/aereo/main"
os.makedirs("config/aoi", exist_ok=True)
# Config files
urllib.request.urlretrieve(
f"{GITHUB_RAW}/examples/config/job_sentinel2.yaml",
"config/job_sentinel2.yaml",
)
urllib.request.urlretrieve(
f"{GITHUB_RAW}/examples/config/job_sentinel2-ndvi.yaml",
"config/job_sentinel2-ndvi.yaml",
)
# AOI files
urllib.request.urlretrieve(
f"{GITHUB_RAW}/examples/config/aoi/chocon.geojson",
"config/aoi/chocon.geojson",
)
Config used in this notebook¶
This notebook loads the job from examples/config/job_sentinel2-ndvi.yaml. It extends job_sentinel2 with an NDVI preprocess stage:
defaults:
- job_sentinel2
- _self_
name: sentinel2_ndvi
preprocess:
- _target_: aereo.builtins.ndvi
_partial_: true
ndvi_nir_band: nir
ndvi_red_band: red
from aereo.cache import TaskResultCache
from aereo.executors import LocalExecutor
from aereo.pipeline import ExtractionJob
# Load the job from the Hydra config package.
job = ExtractionJob.load_from_config(
config_dir="config",
config_name="job_sentinel2-ndvi",
)
assets = job.search() # Use the search method from the job object to get the assets.
tasks = job.build_tasks(assets)
len(tasks)
# now we create an Executor, in this case a LocalExecutor to run
# each ExtractionTask using Threads
local_exec = LocalExecutor(workers=-1, use_threads=True, cache=TaskResultCache())
# Extract!
print("Extracting...")
artifacts = job.execute(tasks, executor=local_exec)
print(f"✓ Extracted {len(artifacts)} artifacts")
from aereo.viz import plot_artifact_patches
plot_artifact_patches(
artifacts,
ds_factor=1,
cmap="RdYlGn",
stretch="percentile",
aoi=job.target_aoi,
aoi_edgecolor="blue",
)