Contributors: Kelly Yin and Snow Wang
.. autosummary:: :toctree: generated
Neuroglancer is a data visualization tool developed by Google. To set up Neuroglancer locally on your PC, please follow the tutorial below.
Note
Currently Neuroglancer is only supported on Windows Machines.
To prepare your Windows computer for ng installation, first install these applications:
- Install Visual Studio - (download the free community version)
- Install Anaconda
- Install Git (call Anaconda Prompt or Command Prompt in your window search option)
>>> conda install -c anaconda git
Install chocolatey
- Open Windows PowerShell and run as Administrator
- In PowerShell, run:
>>> Get-ExecutionPolicy
- If it returns
Restricted
, then runSet-ExecutionPolicy AllSigned
orSet-ExecutionPolicy Bypass -Scope Process
. - In PowerShell, run:
>>> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- Now check if choco is installed. In PowerShell, type:
>>> choco
- If it returns the message below, you are ready to go.
Install nodejs
- In PowerShell, run:
>>> choco install -y --force nodejs
- If returns the message below, you are good to move on.
- Test nodejs. In Command Prompt, run:
>>> node -v
- If it returns the message below, you are good to proceed.
To install neuroglancer and the related components, we want to first create a new enviroment (let's call it ng_torch
) and install PyTorch for it:
- Open Anaconda Prompt or Command Prompt, run:
>>> conda create -n ng_torch python=3.8
>>> activate ng_torch
>>> conda install pytorch torchvision cudatoolkit=11.0 -c pytorch
- Now check your PyTorch version (we need the version to be >1.80):
>>> pip3 show torch
- If you need to update
pip
in the virtual enviroment, run
>>> python -m pip install --user --upgrade pip
- Now use
pip
to install ng and other packages you need:
>>> pip install neuroglancer
>>> pip install jupyter # (optional) jupyter/ipykernel installation
>>> pip install numpy Pillow requests tornado sockjs-tornado six google-apitools selenium imageio h5py cloud-volume
>>> python -m pip install -U scikit-image
- Make a folder for ng:
>>> mkdir project
>>> cd project
>>> git clone https://github.com/google/neuroglancer.git
>>> cd neuroglancer
>>> curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
- Install npm. In Anaconda Prompt, run:
>>> pip install npm
- After installation, run:
>>> npm i
- Finally, in Anaconda Prompt, run:
>>> python setup.py install
Note
If you encounter error messages in the last step, run this code before re-run the last line:
>>> npm run build-python-min
Open Anaconda, locate your ng enviroment and start a Jupyter Notebook
:
- In the notebook, run the code blocks in sequence:
import neuroglancer
import numpy as np
from skimage.io import imread
import h5py
import os
- Set up the local server:
ip = 'localhost' # or public IP of the machine for sharable display
port = 9999 # change to an unused port number
neuroglancer.set_server_bind_address(bind_address=ip, bind_port=port)
viewer=neuroglancer.Viewer()
- If your reconstruction has been exported as an image stack, this code loads your entire image folder. In this case, we are loading a folder named jwr_pyr87 containing 773 image sections:
script_dir = os.path.abspath('') # locate the folder where the current script is being run
sample_name = 'jwr_pyr87' # put your image folder in the script path and specify the name of the folder
img_dir = os.path.join(script_dir, sample_name)
img_idx = sorted(next(os.walk(img_dir))[2])
num_of_img = len(img_idx)
sample_height = 832 # specify the exported image size in x
sample_length = 832 # specify the exported image size in y
img_shape = (sample_height, sample_length)
img_stack = np.zeros((len(img_idx),) + img_shape, dtype=np.int64) # allocate memory
print(img_stack.shape)
i = 0
for i in range(num_of_img):
img_stack[i] = imread(img_dir + "/" + img_idx[i])
i += 1
print(img_stack.shape) # read all the images exported from VAST into a single image stack
- If your reconstruction file is in .h5 format, use the code below to load your image stack:
with h5py.File('C:/Users/Lichtman Lab/Desktop/h5_data/jwr_pyr87.h5', 'r') as fl:
img_stack = np.array(fl['images'])
- Set the x,y,z resolutions for the ng viewer:
res = neuroglancer.CoordinateSpace(
names=['z', 'y', 'x'],
units=['nm', 'nm', 'nm'],
scales=[120, 256, 128]) # set the x,y,z resolutions for neuroglacer
- Add a layer in ng viewer to show the segmentation/reconstruction:
def ngLayer(data, res, oo=[0,0,0], tt='segmentation'):
return neuroglancer.LocalVolume(data, dimensions=res, volume_type=tt, voxel_offset=oo)
- Configure the ng layers: (in this case, we are loading a precomputed EM volume)
with viewer.txn() as s:
s.layers['em'] = neuroglancer.ImageLayer(source='precomputed://https://rhoana.rc.fas.harvard.edu/ng/jwr15-120_im')
s.layers.append(name='seg', layer=ngLayer(img_stack.astype(np.uint8), res, tt='segmentation'))
- Generate a link for your ng viewer:
print(viewer)
- Obtain the complete segment list for the segmentation layer:
np.unique(img_stack)
- Please feel free to download the sample Jupyter [notebook] or Colab notebook whichever is convenient for you.