Skip to main content

Dynamically create image chips from STAC items

Project description

stacchip

Dynamically create image chips for earth observation machine learning applications using a custom chip index based on STAC items.

Get a STAC item, index its contents, and create chips dynamically like so

# Get item from an existing STAC catalog
item = stac.search(...)

# Index all chips that could be derived from the STAC item
index = Indexer(item).create_index()

# Use the index to get RGB array for a specific chip
chip = Chipper(index).chip(x=23, y=42)

Installation

Stacchip is available on pypi

pip install stacchip

Motivation

Remote sensing imagery is typically distributed in large files (scenes) that typically have the order of 10 thousand of pixels in both the x and y directions. This is true for systems like Landsat, Sentinel 1 and 2, and aerial imagery such as NAIP.

Machine learning models operate on much smaller image sizes. Many use 256x256 pixels, and the largest inputs are in the range of 1000 pixels.

This poses a challenge to modelers, as they have to cut the larger scenes into pieces before passing them to their models. The smaller image snippets are typically referred to as "chips". A term we will use throughout this documentation.

Creating imagery chips tends to be a tedious and slow process, and it is specific for each model. Models will have different requirements on image sizes, datatypes, and the spectral bands to include. A set of chips that works for one model might be useless for the next.

Systemizing how chips are tracked, and making the chip creation more dynamic is a way to work around these difficulties. This is the goal fo stacchip. It presents an approach that leverages cloud optimized technology to make chipping simpler, faster, and less static.

Overview

Stacchip relies on three cloud oriented technologies. Cloud Optimized Geotiffs (COG), Spatio Temporal Asset Catalogs (STAC), and GeoParquet. Instead of pre-creating millions of files of a fixed size, chips are indexed first in tables, and then created dynamically from the index files when needed. The imagery data itsel is kept in its original format and referenced in STAC items.

Creating chips with stacchip is composed of two steps:

  1. Create a stacchip index from a set of STAC
  2. Dynamically create pixel arrays for any chip in the stacchip index

Indexes can be created separately for different imagery sources, and combined into larger indexes when needed. This makes mixing different imagery sources simple, and allows for flexibility during the modeling process, as imagery sources can be added and removed by only updating the combined index.

The mechanism is purposefully kept as generic as possible. The index creation is done based on a STAC item alone, no other input is needed. Obtaining image data for a chip that is registered in a stacchip index only requires a few lines of code.

For more information, please consult the documentation

Build and release

The following steps to release the latest version

tag=0.1.34
hatch version $tag
git commit -am "Bump version number"
git push
git tag $tag
git push origin $tag
python -m build
python3 -m twine upload --repository testpypi dist/*
python3 -m twine upload --repository pypi dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stacchip-0.1.37.tar.gz (41.1 kB view details)

Uploaded Source

Built Distribution

stacchip-0.1.37-py3-none-any.whl (32.1 kB view details)

Uploaded Python 3

File details

Details for the file stacchip-0.1.37.tar.gz.

File metadata

  • Download URL: stacchip-0.1.37.tar.gz
  • Upload date:
  • Size: 41.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for stacchip-0.1.37.tar.gz
Algorithm Hash digest
SHA256 26a64f01c472e84c693bccdc9c4d0927d9194493002855e2050dcbf6e6dac20b
MD5 a4ecc4fb8d7ecc6246cd4e726b44068e
BLAKE2b-256 873e1956ab1077450eb280af89bdd164aab16cbb6a83f4c52523d2cde2ab78c1

See more details on using hashes here.

File details

Details for the file stacchip-0.1.37-py3-none-any.whl.

File metadata

  • Download URL: stacchip-0.1.37-py3-none-any.whl
  • Upload date:
  • Size: 32.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for stacchip-0.1.37-py3-none-any.whl
Algorithm Hash digest
SHA256 0a23da3414ec71471f5340317c3df18585e813d87d7b0ac378536c491ad92e4c
MD5 e5dc49c1430ff55ead303faa7e0b0494
BLAKE2b-256 1e4eeaabe74225d3c44605949f838bd37d968818e3803e84ebe2658acfdbd426

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page