BUAIIR Spectra
BUAIIR Spectra is a Python library designed to simplify data loading and batching for spectral analysis tasks using an open-source dataset collected and maintained by BUAIIR.
The library provides a clean interface for creating Dataset and DataLoader objects, with built-in preprocessing and conversion utilities compatible with common machine learning frameworks.
Dataset Overview
The spectral dataset was collected using three different devices:
| Device Name | Spectral Range(nm) |
|---|---|
| BIO_SCIENCE | 3648 |
| SCAN CODER | 12 |
| LOW COST device | 381 |
For each device, spectral data was collected across three crop types:
| Crop | Total Samples | Class Breakdown |
|---|---|---|
| Beans | 15 | 5 HLT, 5 BRD, 5 BLB |
| Maize | 15 | 5 HLT, 5 MSV, 5 MLN |
| Cassava | 15 | 5 HLT, 5 CBSD, 5 CBB |
Each crop type was subjected to controlled inoculation with viral and bacterial diseases, resulting in multiple classification labels per crop.
Class Definitions
Each crop contains a healthy control class plus disease-specific classes:
| Crop | Class Code | Description |
|---|---|---|
| Beans | HLT | Healthy / Control |
| Beans | BLB | Bean Bacterial Blight |
| Beans | BRD | Bean Rust Disease |
| Maize | HLT | Healthy / Control |
| Maize | MSV | Maize Streak Virus |
| Maize | MLN | Maize Lethal Necrosis |
| Cassava | HLT | Healthy / Control |
| Cassava | CBSD | Cassava Brown Streak Disease |
| Cassava | CBB | Cassava Bacterial Blight |
Data Collection Period
The dataset was collected over a period of 15 weeks, with repeated sampling across all classes, crops, and devices.
Data Loading
The library provides utilities for loading spectral data into structured machine learning pipelines.
It supports:
- Dataset object creation
- DataLoader batching
- Standardized preprocessing and conversion
- Compatibility with deep learning frameworks such as PyTorch
Example usage:
Installation
You can install the buaiir-spectra library using pip:
pip install buaiir-spectra
Requirements
Make sure you have Python 3.8+ installed. The library is designed to work with common scientific Python packages such as NumPy and PyTorch.
Dataloading per device using load_spectra function
from buaiir_spectra.data.dataset import *
from pathlib import Path
# Load data for BIO_SCIENCE device
PATH = Path('/usr/downlaods/spectra_data')
dataset= SpectralDataset(device=Device.BIO_SCIENCE, data_path=PATH)
dataloader = SpectralDataLoader(dataset, batch_size=4)
for batch in dataloader:
x, y, images = next(iter(lf))
print(f'x_shape: {x.shape}',f'y_shape: {y.shape}', f'image_shape: {images.shape}')
# Load data for the SCAN_CODER device
dataset= SpectralDataset(device=Device.SCAN_CORDER, data_path=PATH)
# Load data for the LOW_COST device
dataset= SpectralDataset(device=Device.LOW_COST, data_path=PATH)
Nature of Target(y) The target returns a tuple (titer_value, expert_score, week, disease_class) where each element describes a specific aspect of the spectral and laboratory observation collected from each plant sample.
| Feature | Type | Description |
|---|---|---|
| titer_value | Float | Ground truth measurement collected from each plant, aligned with the spectral reading. |
| expert_score | Integer | Visual severity score assigned by an agricultural expert based on observable symptoms. |
| week | Integer | Week of data collection during the 15-week sampling period. |
| disease_class | Float | Label representing the disease type or health status of the plant sample. |
Feature matrix (x) currently contains only the calibrated wavelength reading of each device
Dynamic data loading
from buaiir_spectra.data.dataset import SpectralDataset, Device
# Path to where data is store
DATA_PATH = '/home/wilfred/Datasets/spectra_data'
for test_device in Device.get_devices():
dataset = SpectralDataset(DATA_PATH, device=test_device) # dataset
x, img, y = dataset[0] # load sample data
print(f'Prinitng shapes for device: {test_device.name}')
print(x.shape, y.shape)
Properties of dataset
from buaiir_spectra.data.dataset import SpectralDataset, Device
# create Dataset object for LOW COST only
dataset = SpectralDataset('/home/usr/Datasets/spectra_data', Device.SCAN_CORDER)
# Get wavelength range for the device
wavelength = dataset.wavelength
print(wavelength)
# Get disease class codes used in batching
disease_classes = dataset.disease_class_codes
print(f'Supported disease classes {disease_classes}')
# Get plant_type codes used in the batching
plant_types = dataset.plant_type_codes
print(f'Supported crop types: {plant_types}')
Data batching
from buaiir_spectra.data.dataset import SpectralDataset, Device, SpectralDataLoader
# Path to where you dataset is store: adjust accordingly
DATA_PATH = '/home/usr/Datasets/spectra_data'
dataset = SpectralDataset(data_path=DATA_PATH, device=Device.SCAN_CODER)
# creat the dataloader
dataloader = SpectralDataLoader(dataset, batch_size=4)
# iterate over the batchs
for batch in dataloader:
# extract the x_batch and y_batch
x_batch,img_batch, y_batch = batch
# print the shape of the batches
print(x_batch.shape, y_batch.shape)
Parameters for data wrangling provided by Dataloader
from buaiir_spectra.data.dataset import SpectralDataset, SpectralDataLoader, Device
import pathlib
# Path to where you dataset is store: adjust accordingly
DATA_PATH = pathlib.Path('/home/usr/Datasets/spectra_data')
# Loading data for BIO SCINCE
dataset = SpectralDataset(data_path=DATA_PATH, device=Device.BIO_SCIENCE)
# Creating a dataloader with plant labels shuffled
dataloader_with_shuffled_plants = SpectralDataLoader(dataset, batch_size=40, permutate_plants= True)
# Creating a dataloader with weeks shuffled
dataloader_with_shuffled_weeks = SpectralDataLoader(dataset, batch_size=40, permutate_weeks= True)
# Creating a dataloader with completely shuffled data, best for regularization
dataloader_with_shuffled_weeks = SpectralDataLoader(dataset, batch_size=40, permutate=True)
Extracting label specific or week specific data
from buaiir_spectra.data.dataset import SpectralDataset
from buaiir_spectra.data.dataloader import SpectralDataLoader
from buaiir_spectra.utils.device import Device
DATA_PATH = '/home/wilfred/Datasets/spectra_data'
# Loading data for BIO SCINCE
dataset = SpectralDataset(data_path=DATA_PATH, device=Device.SCAN_CODER)
dataloader = SpectralDataLoader(dataset, batch_size=150)
# Load data for only a single disease class e.g CMD
x, y = dataloader.load_data_of_disease_class('CMD')
# Load data for a specific label across all weeks
x_1, y_1 = dataloader.load_data_of('BBLB1')
# Checking all supported labels
supported_labels = dataloader.labels
print(supported_labels)
Metadata
Release files for buaiir-spectra 1.3.17
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| buaiir_spectra-1.3.17.tar.gz | 56.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| buaiir_spectra-1.3.17-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 115.8 kB
Release files / buaiir_spectra-1.3.17.tar.gz
| Download URL | buaiir_spectra-1.3.17.tar.gz |
|---|---|
| Size | 56.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
26ec01c1106742b9c673b121272e43cff528ed0697f11e011789bf57f5fea194
|
|
BLAKE2b-256 checksum How to use checksums |
f35bbdd3596e60c7b7b604fd63ab457e81bbe9034e9c55caf24d74ca46951a80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / buaiir_spectra-1.3.17-py3-none-any.whl
| Download URL | buaiir_spectra-1.3.17-py3-none-any.whl |
|---|---|
| Size | 59.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f99804e63ae35c57f3a728a75db7c08c12d3f24ce7db8d6ee8b42aa230048543
|
|
BLAKE2b-256 checksum How to use checksums |
84112a846dd7af7407c52bad5717f0ca8a167e1bae14fbbf7a0be50ba22861ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|