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.7"

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,
    band_stats, normalize_zscore, savitzky_golay, derivative,
)

# --- 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")

# --- Preprocessing ---

# Per-band statistics
stats = band_stats(cube)        # .mean, .std, .min, .max, .valid_count

# Normalize for ML training
normed = normalize_zscore(cube)

# Smooth noisy spectra, then compute derivatives
smooth = savitzky_golay(cube, window=7, polyorder=2)
d1 = derivative(smooth, order=1)

# --- 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)
Savitzky-Golay smoothing savitzky_golay(cube, window, polyorder)
Derivative spectra derivative(cube, order)
Min-max normalization normalize_minmax(cube)
Z-score normalization normalize_zscore(cube)

Statistics

Operation Function
Per-band stats band_stats(cube)BandStats
Covariance matrix covariance(cube)
Correlation matrix correlation(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
        ├── stats.rs
        ├── normalize.rs
        ├── derivative.rs
        └── smooth.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.7.1.tar.gz (69.5 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.7.1-cp313-cp313-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.13Windows x86-64

hyperspec_py-0.7.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.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

hyperspec_py-0.7.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.7.1.tar.gz.

File metadata

  • Download URL: hyperspec_py-0.7.1.tar.gz
  • Upload date:
  • Size: 69.5 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.7.1.tar.gz
Algorithm Hash digest
SHA256 91fe67b1a2326d457c388913ae4142d7c5c8f094e66d5a5562114b2fec6ea728
MD5 c0df0f45edda7873efb21c2ed19ad261
BLAKE2b-256 58435692b47db8ed12e029988e4432a2c2e251fd376dcac0f932c714512a2f54

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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.7.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.7.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3b7c3ef96b608eb9b2e8bd125b08f518843c065b8516a75e3f7f176b6adc5b27
MD5 f3aaa5756e22139c9d21ba3c68015c62
BLAKE2b-256 1746154d84a25e28d69291338758ea6a05ded6b6d82f3cc4c90bf804eb48de5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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.7.1-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.7.1-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 671ee6f4804b81a91a5e4129bb1d295871d8c219e47290a641c5ec35261b056c
MD5 e3765772a3dd597b85d6e587665dae8b
BLAKE2b-256 1709470e0abb4d3e3efaa55f3e7fefaf028f7df483e5aa93e1d7f009c8dbd577

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 05032d9745e7520d7ab3cf421074f333330b2e96f1bc87b50b14c4bc9424dbe9
MD5 b570ff29ceed82d2ef9eaf8f54a8011a
BLAKE2b-256 898bc7f4f74e4ff24e3334507eff517140baae73d3b0ff2cf35c7b0675e641b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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.7.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.7.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 138ef35d36eb80fc1925744aaf387e74147871c8a36bc6382e5bc0f452c3937b
MD5 1d9a898893080387ebfc688ce446ace5
BLAKE2b-256 1f1c559451005a508b721fdd55fa1d994972cd50a2c6de91eddea8635fb7d1cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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.7.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for hyperspec_py-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 08679c48934783e2d1f5a4cdac4b546d680054e9b3f430da1a639cf8f48adbaf
MD5 520a36c179336502f02673b9a66b7cca
BLAKE2b-256 361bc3f219fd79515c37ba872d06cbc5a63075445831d607606f1b16aed9d808

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperspec_py-0.7.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