Efficiently render large (10 to 100s GBs) voxel (like a minecraft model) datasets in the browser.
GSCAN uses Muon tomography to image the inside (like X-ray) of infrastructure assests such as bridges.
The results give insight in the location of rebars and potential defects in the reinforced concrete.
Infrastructure asset owners / managers want to be able to easily view the muon tomography results. For this GScan wants to create a web app.
The problem is that the result muon tomography voxel models are very large (10 to 100s GBs), and can therefore not be loaded into the browser completely.
- Convert voxel data to NIFTI
- Precomputing slices of voxel data
- Serving the precomputed slices on an HTTP server
- Run the GScan Infra Vision +
neuroglancer
frontend
A tool to generate generate a NIfTI (nii.gz) file format from 3D numpy array where each voxel contains some value. It does not matter if it's normalized, represents scattering angles or something else - this is only a detail which will only have an effect on later visualization, not the NIfTI generation.
cd ./python/nifti-generator
uv sync
uv run nifti-generator -i input_reconstruction.pickle
A comprehensive guide on precomputing the voxel model slices can be found in the precomputation README.md
To run the precomputation bash script:
cd ./python/nifti-generator
uv sync
bash precompute.sh <input_nifti_file_path> <output_dir_path>
Static file hosting is fine.
4. Run the GScan Infra Vision + neuroglancer
frontend
Frontend code for visualizing slices of large voxel spaces
Clean install of Node packages:
npm ci
There is a gotcha with running the frontend
npm run build
npm run preview
npm ci
npm run dev