Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Import Error #248

Open
MRPM12 opened this issue Aug 2, 2023 · 7 comments
Open

Import Error #248

MRPM12 opened this issue Aug 2, 2023 · 7 comments

Comments

@MRPM12
Copy link

MRPM12 commented Aug 2, 2023

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
Copy link
Collaborator

wasserth commented Aug 4, 2023

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

@MRPM12
Copy link
Author

MRPM12 commented Aug 4, 2023

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
Copy link
Collaborator

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
Copy link
Author

MRPM12 commented Aug 18, 2023

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
Copy link
Collaborator

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
Copy link

yizhwan commented Aug 31, 2023

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
Copy link

mkim-MASI commented Aug 16, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants