Skip to main content

Fast hyperspectral data processing for remote sensing and ML pipelines

Project description

hyperspec

Crates.io PyPI License

Fast hyperspectral data processing for remote sensing and ML pipelines. Rust core with Python bindings.

Built by Hyperstate — foundation models for Earth intelligence.

Why hyperspec?

Hyperspectral imagery produces hundreds of bands per pixel, orders of magnitude more than RGB or multispectral. Most existing tools are slow, have heavy system dependencies, and were not designed for modern ML training pipelines.

hyperspec provides:

  • Fast Rust implementations of standard hyperspectral algorithms
  • A SpectralCube abstraction that keeps data, wavelengths, and metadata together
  • Zarr V3 storage with chunking optimized for ML dataloaders
  • Python bindings with zero-copy NumPy interop

Install

Python:

pip install hyperspec-py
# or
uv add hyperspec-py

Rust:

cargo add hyperspec

or

[dependencies]
hyperspec = "0.6"

Quickstart

import numpy as np
from hyperspec import (
    SpectralCube, read_envi, write_zarr, read_zarr_window, zarr_cube_shape,
    sam, continuum_removal, pca, mnf_denoise,
)

# --- I/O ---

# Read ENVI format (AVIRIS-NG, etc.)
cube = read_envi("scene.hdr")

# Process
cr_cube = continuum_removal(cube)
denoised = mnf_denoise(cube, n_components=20)

# Write to Zarr with ML-friendly chunks
write_zarr(cube, "chips.zarr", chunk_shape=(cube.bands(), 256, 256))

# Read a single training tile without loading the full cube
tile = read_zarr_window(
    "chips.zarr",
    bands=(0, cube.bands()),
    rows=(0, 256),
    cols=(0, 256),
)

# Query shape without loading data
bands, lines, samples = zarr_cube_shape("chips.zarr")

# --- Spectral analysis ---

# Compare every pixel to a reference spectrum
reference = cube.spectrum(50, 50)
angles = sam(cube, reference)

# Dimensionality reduction
pca_result = pca(cube, n_components=10)

SpectralCube

Category Methods
Dimensions bands, height, width, shape
Data access data(), wavelengths(), fwhm(), nodata
Pixel access spectrum(row, col)
Band access band(index), band_at(nm), band_nearest(nm)
Wavelength lookup wavelength(index), wavelength_index(nm), nearest_band_index(nm)
Statistics mean_spectrum()
Subsetting sel_bands([i, j]), sel_wavelengths(min, max)

I/O

Read

Format Function
ENVI read_envi(path)
Zarr V3 read_zarr(path)
Zarr V3 read_zarr_with_options(path, ...)
Zarr V3 read_zarr_window(path, bands, rows, cols)

Write

Format Function
ENVI write_envi(cube, path)
Zarr V3 write_zarr(cube, path)

Utilities

Format Function
Zarr V3 zarr_cube_shape(path)

Algorithms

Spectral similarity

Operation Function
Spectral Angle Mapper sam(cube, reference)

Spectral preprocessing

Operation Function
Continuum removal continuum_removal(cube)

Spectral indices

Operation Function
Normalized difference normalized_difference(cube, a, b)
Band ratio band_ratio(cube, a, b)
NDVI ndvi(cube, nir, red)

Dimensionality reduction

Operation Function
PCA pca(cube, n_components)
MNF mnf(cube, n_components)
MNF denoise mnf_denoise(cube, n_components)

Spectral utilities

Operation Function
Resample resample(cube, target_wl, method)

Architecture

crates/hyperspec/           # Pure Rust library → crates.io
└── src/
    ├── cube.rs             # SpectralCube type
    ├── error.rs            # HyperspecError
    ├── io/
    │   ├── envi.rs         # ENVI read/write (BSQ, BIL, BIP)
    │   └── zarr.rs         # Zarr V3 read/write/window
    └── algorithms/
        ├── sam.rs
        ├── continuum.rs
        ├── indices.rs
        ├── pca.rs
        ├── mnf.rs
        └── resample.rs

pyo3-hyperspec/             # PyO3 bindings → PyPI: hyperspec-py
├── src/lib.rs
└── python/hyperspec/
    └── __init__.py
  • Rust 2024 edition, using ndarray, rayon, zarrs, thiserror
  • Minimal system dependencies — no LAPACK or GDAL
  • Python 3.12+, NumPy bindings via PyO3

Roadmap

  • Cloud-native Zarr stores (Azure, GCS, S3)
  • More algorithms and utilities

Development

uv venv && source .venv/bin/activate
uv pip install maturin pytest
cargo test
maturin develop
pytest

License

Apache-2.0

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

hyperspec_py-0.6.1.tar.gz (57.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hyperspec_py-0.6.1-cp313-cp313-win_amd64.whl (2.2 MB view details)

Uploaded CPython 3.13Windows x86-64

hyperspec_py-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

hyperspec_py-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

hyperspec_py-0.6.1-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

hyperspec_py-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

Details for the file hyperspec_py-0.6.1.tar.gz.

File metadata

  • Download URL: hyperspec_py-0.6.1.tar.gz
  • Upload date:
  • Size: 57.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hyperspec_py-0.6.1.tar.gz
Algorithm Hash digest
SHA256 2b0683871308395d804a98ed814af993395f0a5ea316468e4f099bd8a08f30d5
MD5 250d232bf6359607c92384155e2a102a
BLAKE2b-256 36d46f83b7be199b2b86aaa0338d4733a0d92081ebd2ee0c53c48251880da14a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1.tar.gz:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperspec_py-0.6.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3927e709b0f13c6aae416a5feea9c8655d6c7e9487c9f92ed7aaae7fd5e3d91f
MD5 adbc479c9a0614afc05fbd6749690cfe
BLAKE2b-256 c4d9d0594556b21c1d3d56d2f4338c07285fa3e9b72c1ac653b6c9733dde557f

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperspec_py-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 63893d3ff597d72c4c3e4ca764a4d106c0f118f472ba8f435098e5b967662fa4
MD5 049285bdb3dc7071f6f86b2205fc6cf9
BLAKE2b-256 91f323d5f02351fcb659040d6e1dbe83aa5b405ec5d7599c6327a04db2dd1408

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperspec_py-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 80d58863e7aa00b0c186c86982546d6ad26d73fde3744fabfab8436fb053ae27
MD5 6efe529193df77eae90faa93328d044a
BLAKE2b-256 df8222e65cf91bd5809427d3281f9ddcc17f78817a4717fdf8539690fce2e335

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperspec_py-0.6.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3cf4267fe6fcf99934f98323d78c188d244cbcd53855ae1c2f2a4f3e16256c1c
MD5 50993b1dbf58d29fc5b671f5cea69b1d
BLAKE2b-256 90199d451d2e3e4851f89bcfcd14aea380dc3ba96933dfa1c1e6045e2e8a6792

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperspec_py-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5fcda8754929c33c26dfcbf070f26b6b64dff805f88590a79fb51298b3bd8ab5
MD5 9b9ac2b6807bcf8b9ab9b30900b9e3a2
BLAKE2b-256 4eea2972af97f27d050a6f0d3b09392a6ac761b8521b63aa9a67904fa20fca54

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish.yml on hyperstateco/hyperspec

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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