Package: openhsi
Getting StartedWelcome to the Open Source DIY Hyperspectral Imager LibraryThis Python library is licensed under theApache v2
License. The documentation
is licensed under aCreative
Commons Attribution 3.0 Australia License.Documentation can be found here:https://openhsi.github.io/openhsi/.Installpip install openhsiorconda install -c conda-forge openhsiThe source code can be found onGitHub. To install a development
version seeContributing.RequirementsPython 3.7+Depending on your camera sensor, install:Ximea SDK (Seehttps://www.ximea.com/support/wiki/apis/Python)FLIR Spinnaker SDK with the python package (Seehttps://www.flir.com/products/spinnaker-sdk/)LUCID SDK (Seehttps://thinklucid.com/downloads-hub/)NoteA descriptive installation guide on Linux platforms can be found athttps://openhsi.github.io/openhsi/tutorial_installing_linux.htmlDevelopment and ContributionsThis whole software library, testing suite, documentation website, and
PyPI/conda package was developed in Jupyter Notebooks usingnbdev.NoteWe have moved tonbdev2which uses Quarto to generate this
documentation site.CitationIf OpenHSI has been useful for your research, please acknowledge the
project in your academic publication. The OpenHSI paper has been
published in MDPI Remote Sensing and can be accessed athttps://doi.org/10.3390/rs14092244.@article{mao2022openhsi,
  title={OpenHSI: A Complete Open-Source Hyperspectral Imaging Solution for Everyone},
  author={Mao, Yiwei and Betters, Christopher H and Evans, Bradley and Artlett, Christopher P and Leon-Saval, Sergio G and Garske, Samuel and Cairns, Iver H and Cocks, Terry and Winter, Robert and Dell, Timothy},
  journal={Remote Sensing},
  volume={14},
  number={9},
  pages={2244},
  year={2022},
  publisher={MDPI}
}How to useTipFor more detailed instructions, please see the tutorials in the
sidebar of the documentation site.Taking a single hyperspectral datacubeThe example shown here uses asimulatedcamera for testing purposes.
ReplaceSimulatedCamerawith the appropriate Python class for your own
camera to work with real hardware. For example, useLucidCameraimported fromopenhsi.camerasinplace ofSimulatedCamera.fromopenhsi.captureimport*withSimulatedCamera(img_path="assets/rocky_beach.png",n_lines=1024,processing_lvl=3,json_path="assets/cam_settings.json",pkl_path="assets/cam_calibration.pkl")ascam:cam.collect()fig=cam.show(plot_lib="matplotlib",robust=True)The RGB representation is made using selected bands for red, green, and
blue. These bands can be customised along with options for displaying
the image without outliers affecting the colour scale/contrast. The
example flag used here isrobustwhich takes the 2-98% percentile.
There is also thehist_eqflag which performs histogram equalisation.
If none of these flags are set, then the colour scale uses the min and
max value.fig.opts(fig_inches=7,title="simulated hyperspectral datacube")TipFor more information on how to use this library, check out ourQuick
Start Guide.Hardware camerasThe hardware consists of a collimator tube with a slit (1) mounted in a
3D printed housing (2). A diffraction grating (3) is used to split the
incoming light into its component colours to be detected on the camera
sensor (4).We have the following implementations inopenhsi.cameras:WebCameraXimeaCameraLucidCameraFlirCameraThese all have the same interface so in principle, these OpenHSI cameras
can be used interchangeably as long as you have the right calibration
files.Frequently Asked QuestionsI’m having trouble with the software install. Do you have a guide?Check out ourLinux Installation
GuideandWindows Installation
Guide.Where can I get a quick overview of whatopenhsican do?OurQuick Start
Guideis the
best place to start. The sidebar also includes documentation for each
software module in more detail.The OpenHSI camera is a pushbroom sensor and requires motion to scan a
2D space. What kind of motion should I apply?Any motion that allows you to scan a 2D space is okay. This can be from
translating the camera is space or from applying a rotation. (or both
translation and rotation) The developers ofopenhsihas flown the
OpenHSI camera on a drone which sweeps across an area of interest in
multiple overlapping swaths. You can fly this camera on other platforms,
vehicles, etc…How fast should I move the camera?It’ll depend on what your case is. This answer assumes you want square
pixels. Assuming the cross-track (scan line) spatial resolution is 0.42
mrad in the field of view, and your altitude is 120 m, the ground sample
distance is:GSD $\approx$ 0.00042 $\times$ 120 (using the small angle approximation)
= 5 cmAssuming your frame rate is 98 FPS at your desired processing level, and
you want to get square pixels, you want to be flying at speed$v$ = 98 $\times$ 0.05 = 4.9 m/sIf you fly faster/slower than this, your datacube will appear to be
stretched spatially.