TractSeg icon indicating copy to clipboard operation
TractSeg copied to clipboard

Import Error

Open MRPM12 opened this issue 2 years ago • 7 comments

Hi experts.

I started to use TractSeg but am facing the following error. Is there a solution? $ TractSeg -i Diffusion.nii.gz -o tractseg_output --raw_diffusion_input --output_type tract_segmentation Traceback (most recent call last): File "/home/brain/.local/bin/TractSeg", line 20, in from tractseg.libs import plot_utils File "/home/brain/.local/lib/python3.8/site-packages/tractseg/libs/plot_utils.py", line 11, in from nibabel import trackvis ImportError: cannot import name 'trackvis' from 'nibabel' (/home/brain/.local/lib/python3.8/site-packages/nibabel/init.py)

MRPM12 avatar Aug 02 '23 05:08 MRPM12

Which version of nibabel are you using and which version of TractSeg?

wasserth avatar Aug 04 '23 07:08 wasserth

Thank you for your reply. The version of nibabel is 4.0.2 and the version of TractSeg seems to be 2.4. pip install TractSeg showed the following.

Requirement already satisfied: TractSeg in /home/brain/.local/lib/python3.8/site-packages (2.4) Requirement already satisfied: nibabel>=2.3.0 in /home/brain/.local/lib/python3.8/site-packages (from TractSeg) (4.0.2)

MRPM12 avatar Aug 04 '23 07:08 MRPM12

Trackvis is no longer supported by nibabel. So you can not use the output format trk_legacy. The other output formats should work. Otherwise you can try doing pip install --upgrade nibabel==3.2.1 This will downgrade nibabel.

wasserth avatar Aug 10 '23 07:08 wasserth

Thank you for your suggestion. I tried to change to the recommended version of nibabel and conducted TractSeg module. Then the below showed.

$ TractSeg -i Diffusion.nii.gz -o tractseg_output --raw_diffusion_input --output_type tract_segmentation Traceback (most recent call last): File "/home/brain/.local/bin/TractSeg", line 20, in from tractseg.libs import plot_utils File "/home/brain/.local/lib/python3.8/site-packages/tractseg/libs/plot_utils.py", line 22, in from tractseg.libs import fiber_utils File "/home/brain/.local/lib/python3.8/site-packages/tractseg/libs/fiber_utils.py", line 10, in from dipy.tracking.streamline import compress_streamlines as compress_streamlines_dipy ImportError: cannot import name 'compress_streamlines' from 'dipy.tracking.streamline' (/home/brain/.local/lib/python3.8/site-packages/dipy/tracking/streamline.py)

Is there more appropriate way to use TractSeg?

MRPM12 avatar Aug 18 '23 13:08 MRPM12

It seems that dipy does not work well with the older nibabel. I would recommend to not use trk_legacy output format, but trk or tck.

wasserth avatar Aug 18 '23 13:08 wasserth

Hi, I am also getting the same error with trackvis. Can I just confirm, in order to not use: trk_legacy output format, but trk or tck, should we modify your plot_utils script to do this? If so how should we go about doing this? I have tried adding the option in my command as below in a bash script:

    TractSeg -i "${wkdir}/input/preproc/ses-${Sessionnum}/TractSeg/S${sub_number}/TractSeg_input/Diffusion.nii.gz" \
    -o my/output/directory \
    --bvals "${wkdir}/input/preproc/ses-${Sessionnum}/TractSeg/S${sub_number}/TractSeg_input/Diffusion.bvals" \
    --bvecs "${wkdir}/input/preproc/ses-${Sessionnum}/TractSeg/S${sub_number}/TractSeg_input/Diffusion.bvecs" \
    --tracking_format tck \
    --raw_diffusion_input

But it still generates the error:

Traceback (most recent call last): File "/home/anaconda3/envs/yh/bin/TractSeg", line 20, in from tractseg.libs import plot_utils File "/home/anaconda3/envs/yh/lib/python3.9/site-packages/tractseg/libs/plot_utils.py", line 11, in from nibabel import trackvis ImportError: cannot import name 'trackvis' from 'nibabel' (/home/anaconda3/envs/yh/lib/python3.9/site-packages/nibabel/init.py)

Many thanks!

yizhwan avatar Aug 31 '23 19:08 yizhwan

While this may not be the best solution, you will need to change the source code in order to get the imports to work properly

in this file (or the equivalent location for you): /usr/local/lib/python3.10/dist-packages/tractseg/libs/fiber_utils.py

change from dipy.segment.metric import ResampleFeature to from dipy.segment.featurespeed import ResampleFeature

change from dipy.tracking.streamline import compress_streamlines as compress_streamlines_dipy to from dipy.tracking.streamlinespeed import compress_streamlines as compress_streamlines_dipy

for the nibabel import error, downgrading to the suggested 3.2.1 version worked for me

mkim-MASI avatar Aug 16 '24 04:08 mkim-MASI