diff --git a/setup.py b/setup.py index 2f626763113..30d66fc54db 100644 --- a/setup.py +++ b/setup.py @@ -208,7 +208,7 @@ PDFS_REQUIRE = ["pdfplumber>=0.11.4"] -NIBABEL_REQUIRE = ["nibabel>=5.3.2"] +NIBABEL_REQUIRE = ["nibabel>=5.3.2", "ipyniivue==2.4.2"] EXTRAS_REQUIRE = { "audio": AUDIO_REQUIRE, diff --git a/src/datasets/features/nifti.py b/src/datasets/features/nifti.py index 2cfbefdfaad..3b118d1cc12 100644 --- a/src/datasets/features/nifti.py +++ b/src/datasets/features/nifti.py @@ -1,6 +1,4 @@ -import base64 import os -import uuid from dataclasses import dataclass, field from pathlib import Path from typing import TYPE_CHECKING, Any, ClassVar, Dict, Optional, Union @@ -39,41 +37,27 @@ def __init__(self, nifti_image: nib.nifti1.Nifti1Image): self.nifti_image = nifti_image def _repr_html_(self): + from ipyniivue import NiiVue, ShowRender, SliceType, Volume + from IPython.display import display + bytes_ = self.nifti_image.to_bytes() - b64 = base64.b64encode(bytes_).decode("utf-8") - - self.nifti_data_url = f"data:application/octet-stream;base64,{b64}" - viewer_id = f"papaya-{uuid.uuid4().hex[:8]}" - - html = f""" -
- - - - """ - return html + nv = NiiVue() + nv.set_slice_type(SliceType.MULTIPLANAR) + nv.opts.multiplanar_show_render = ShowRender.ALWAYS + nv.opts.show_3d_crosshair = True + nv.opts.multiplanar_force_render = True + name = None + if hasattr(self.nifti_image, "file_map"): + if ( + "image" in self.nifti_image.file_map + and getattr(self.nifti_image.file_map["image"], "filename", None) is not None + ): + name = self.nifti_image.file_map["image"].filename + if name is None: + name = "volume.nii.gz" + volume = Volume(name=name, data=bytes_) + nv.load_volumes([volume]) + display(nv) @dataclass