MIC-DKFZ / TractSeg

Automatic White Matter Bundle Segmentation
Apache License 2.0
231 stars 75 forks source link

Import Error #248

Open MRPM12 opened 1 year ago

MRPM12 commented 1 year ago

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)

wasserth commented 1 year ago

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

MRPM12 commented 1 year ago

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)

wasserth commented 1 year ago

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.

MRPM12 commented 1 year ago

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?

wasserth commented 1 year ago

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.

yizhwan commented 1 year ago

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!

mkim-MASI commented 3 months ago

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