Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
Signed-off-by: YunLiu <[email protected]>
  • Loading branch information
KumoLiu committed Dec 3, 2024
1 parent 3659cf5 commit 2183084
Show file tree
Hide file tree
Showing 3 changed files with 261 additions and 93 deletions.
Binary file added modules/omniverse/all_organs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
185 changes: 119 additions & 66 deletions modules/omniverse/omniverse_integration.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"!python -c \"import monai\" || pip install -q \"monai-weekly[nibabel]\"\n",
"!python -c \"import vtk\" || pip install -q vtk\n",
"!python -c \"import pxr\" || pip install -q usd-core\n",
"!python -c \"import trimesh\" || pip install -q trimesh\n",
"!apt update\n",
"!apt install -y libgl1-mesa-glx"
]
Expand All @@ -59,17 +60,21 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import vtk\n",
"import tempfile\n",
"import numpy as np\n",
"from utility import convert_to_mesh\n",
"from utility import convert_to_mesh, convert_mesh_to_usd\n",
"\n",
"import vtk\n",
"import vtkmodules\n",
"from vtkmodules.vtkRenderingCore import vtkRenderWindow, vtkRenderer\n",
"from ipyvtklink.viewer import ViewInteractiveWidget\n",
"\n",
"from monai.bundle.scripts import create_workflow\n",
"from monai.bundle.scripts import create_workflow, download\n",
"from monai.transforms import LoadImaged, SaveImage, Compose, BorderPadd, SqueezeDimd"
]
},
Expand Down Expand Up @@ -114,77 +119,61 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.10/dist-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-11-25 07:04:21,692 - INFO - --- input summary of monai.bundle.scripts.download ---\n",
"2024-11-25 07:04:21,692 - INFO - > name: 'vista3d'\n",
"2024-11-25 07:04:21,692 - INFO - > bundle_dir: '.'\n",
"2024-11-25 07:04:21,693 - INFO - > source: 'monaihosting'\n",
"2024-11-25 07:04:21,693 - INFO - > remove_prefix: 'monai_'\n",
"2024-11-25 07:04:21,693 - INFO - > progress: True\n",
"2024-11-25 07:04:21,694 - INFO - ---\n",
"2024-12-03 07:24:15,516 - INFO - --- input summary of monai.bundle.scripts.download ---\n",
"2024-12-03 07:24:15,517 - INFO - > name: 'vista3d'\n",
"2024-12-03 07:24:15,517 - INFO - > bundle_dir: '.'\n",
"2024-12-03 07:24:15,518 - INFO - > source: 'monaihosting'\n",
"2024-12-03 07:24:15,518 - INFO - > remove_prefix: 'monai_'\n",
"2024-12-03 07:24:15,518 - INFO - > progress: True\n",
"2024-12-03 07:24:15,519 - INFO - ---\n",
"\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"vista3d_v0.5.7.zip: 771MB [00:35, 23.1MB/s] \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-11-25 07:04:57,782 - INFO - Downloaded: vista3d_v0.5.7.zip\n",
"2024-11-25 07:04:57,783 - INFO - Expected md5 is None, skip md5 check for file vista3d_v0.5.7.zip.\n",
"2024-11-25 07:04:57,783 - INFO - Writing into directory: ..\n"
"\n",
"2024-12-03 07:24:16,246 - INFO - Expected md5 is None, skip md5 check for file vista3d_v0.5.7.zip.\n",
"2024-12-03 07:24:16,247 - INFO - File exists: vista3d_v0.5.7.zip, skipped downloading.\n",
"2024-12-03 07:24:16,247 - INFO - Writing into directory: ..\n"
]
}
],
"source": [
"from monai.bundle import download\n",
"\n",
"download(name=\"vista3d\", bundle_dir=\".\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-11-25 07:19:30,430 - INFO - Setting logging properties based on config: /workspace/Code/tutorials/modules/omniverse/vista3d/configs/logging.conf.\n",
"2024-11-25 07:19:31,621 - root - INFO - Restored all variables from /workspace/Code/tutorials/modules/omniverse/vista3d/models/model.pt\n",
"2024-11-25 07:19:31,623 - INFO - --- input summary of monai.bundle.scripts.run ---\n",
"2024-11-25 07:19:31,623 - INFO - > workflow_type: 'inference'\n",
"2024-11-25 07:19:31,623 - INFO - > bundle_root: '/workspace/Code/tutorials/modules/omniverse/vista3d'\n",
"2024-11-25 07:19:31,624 - INFO - > input_dict: {'image': '/workspace/Code/tutorials/modules/totalSegmentator_mergedLabel_samples/imagesTr/s0001.nii.gz'}\n",
"2024-11-25 07:19:31,624 - INFO - ---\n",
"2024-12-03 07:38:37,279 - INFO - Setting logging properties based on config: /workspace/Code/tutorials/modules/omniverse/vista3d/configs/logging.conf.\n",
"2024-12-03 07:38:38,118 - py.warnings - WARNING - The torch.distributed is either unavailable and uninitiated when RankFilter is instantiated.\n",
"If torch.distributed is used, please ensure that the RankFilter() is called\n",
"after torch.distributed.init_process_group() in the script.\n",
"\n",
"\n",
"2024-11-25 07:19:31,625 - ignite.engine.engine.Vista3dEvaluator - INFO - Engine run resuming from iteration 0, epoch 0 until 1 epochs\n",
"2024-11-25 07:19:33,548 INFO image_writer.py:197 - writing: /workspace/Code/tutorials/modules/omniverse/vista3d/eval/s0001/s0001_trans.nii.gz\n",
"2024-11-25 07:19:33,697 - ignite.engine.engine.Vista3dEvaluator - INFO - Epoch[1] Complete. Time taken: 00:00:02.072\n",
"2024-11-25 07:19:33,698 - ignite.engine.engine.Vista3dEvaluator - INFO - Engine run complete. Time taken: 00:00:02.072\n"
"2024-12-03 07:38:38,119 - py.warnings - WARNING - You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
"\n",
"2024-12-03 07:38:38,486 - root - INFO - Restored all variables from /workspace/Code/tutorials/modules/omniverse/vista3d/models/model.pt\n",
"2024-12-03 07:38:38,486 - INFO - --- input summary of monai.bundle.scripts.run ---\n",
"2024-12-03 07:38:38,487 - INFO - > workflow_type: 'inference'\n",
"2024-12-03 07:38:38,487 - INFO - > bundle_root: '/workspace/Code/tutorials/modules/omniverse/vista3d'\n",
"2024-12-03 07:38:38,487 - INFO - > input_dict: {'image': '/workspace/Code/tutorials/modules/totalSegmentator_mergedLabel_samples/imagesTr/s0001.nii.gz'}\n",
"2024-12-03 07:38:38,488 - INFO - ---\n",
"\n",
"\n",
"2024-12-03 07:38:38,488 - ignite.engine.engine.Vista3dEvaluator - INFO - Engine run resuming from iteration 0, epoch 0 until 1 epochs\n",
"2024-12-03 07:38:40,875 INFO image_writer.py:197 - writing: /workspace/Code/tutorials/modules/omniverse/vista3d/eval/s0001/s0001_trans.nii.gz\n",
"2024-12-03 07:38:41,020 - ignite.engine.engine.Vista3dEvaluator - INFO - Epoch[1] Complete. Time taken: 00:00:02.532\n",
"2024-12-03 07:38:41,021 - ignite.engine.engine.Vista3dEvaluator - INFO - Engine run complete. Time taken: 00:00:02.533\n"
]
},
{
Expand All @@ -193,7 +182,7 @@
"[None]"
]
},
"execution_count": 8,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -219,9 +208,72 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Assigning index 1 to label Liver\n",
"2024-12-03 09:13:00,689 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Liver.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Liver.obj\n",
"Assigning index 2 to label Spleen\n",
"2024-12-03 09:13:07,086 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Spleen.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Spleen.obj\n",
"Assigning index 3 to label Pancreas\n",
"2024-12-03 09:13:10,982 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Pancreas.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Pancreas.obj\n",
"Assigning index 4 to label Heart\n",
"2024-12-03 09:13:14,755 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Heart.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Heart.obj\n",
"Assigning index 5 to label Body\n",
"2024-12-03 09:13:18,516 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Body.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Body.obj\n",
"Assigning index 6 to label Gallbladder\n",
"2024-12-03 09:14:50,151 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Gallbladder.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Gallbladder.obj\n",
"Assigning index 7 to label Stomach\n",
"2024-12-03 09:14:53,691 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Stomach.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Stomach.obj\n",
"Assigning index 8 to label Small_bowel\n",
"2024-12-03 09:14:57,531 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Small_bowel.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Small_bowel.obj\n",
"Assigning index 9 to label Colon\n",
"2024-12-03 09:15:05,387 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Colon.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Colon.obj\n",
"Assigning index 10 to label Kidney\n",
"2024-12-03 09:15:11,283 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Kidney.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Kidney.obj\n",
"Assigning index 11 to label Veins\n",
"2024-12-03 09:15:16,689 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Veins.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Veins.obj\n",
"Assigning index 12 to label Lungs\n",
"2024-12-03 09:15:22,560 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Lungs.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Lungs.obj\n",
"Assigning index 13 to label Spine\n",
"2024-12-03 09:15:30,198 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Spine.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Spine.obj\n",
"Assigning index 14 to label Ribs\n",
"2024-12-03 09:15:40,221 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Ribs.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Ribs.obj\n",
"Assigning index 15 to label Shoulders\n",
"2024-12-03 09:15:46,055 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Shoulders.nii.gz\n",
"No points found for label 15. Skipping...\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Shoulders.obj\n",
"Assigning index 16 to label Hips\n",
"2024-12-03 09:15:49,647 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Hips.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Hips.obj\n",
"Assigning index 17 to label Back_muscles\n",
"2024-12-03 09:15:57,623 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/Back_muscles.nii.gz\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/Back_muscles.obj\n",
"2024-12-03 09:16:11,489 INFO image_writer.py:197 - writing: /workspace/Data/maisi_ct_generative/datasets/monai/nii/all_organs.nii.gz\n",
"No points found for label 15. Skipping...\n",
"Mesh successfully exported to /workspace/Data/maisi_ct_generative/datasets/monai/obj/all_organs.gltf\n",
"Saved whole segmentation /workspace/Data/maisi_ct_generative/datasets/monai/nii/all_organs\n"
]
}
],
"source": [
"# 17 groupings that cover 101 segments/regions out of 140\n",
"labels = {\n",
Expand Down Expand Up @@ -366,12 +418,12 @@
" single_organ[orig_seg == label_val] = j\n",
" organ_filename = os.path.join(output_nii_path, organ_name)\n",
" save_trans(single_organ[None], meta_data=orig_seg.meta, filename=organ_filename)\n",
" convert_to_mesh(f\"{organ_filename}.nii.gz\", output_obj_path, f\"{organ_name}.obj\", label_value=j, smoothing_factor=0.5, reduction_ratio=0.0)\n",
"\n",
" convert_to_mesh(f\"{organ_filename}.nii.gz\", output_obj_path, f\"{organ_name}.obj\", label_value=j, smoothing_factor=0.5, reduction_ratio=0.9)\n",
"\n",
" all_organ_filename = os.path.join(output_nii_path, \"all_organs\")\n",
" # save_trans(all_organ[None], meta_data=orig_seg.meta, filename=all_organ_filename)\n",
" convert_to_mesh(f\"{all_organ_filename}.nii.gz\", output_obj_path, \"all_organs.obj\", label_value=list(range(1, 18)), smoothing_factor=0.5, reduction_ratio=0.9)\n",
" save_trans(all_organ[None], meta_data=orig_seg.meta, filename=all_organ_filename)\n",
" convert_to_mesh(f\"{all_organ_filename}.nii.gz\", output_obj_path, \"all_organs.gltf\", label_value=list(range(1, 18)), smoothing_factor=0.6, reduction_ratio=0.0)\n",
" print(f\"Saved whole segmentation {all_organ_filename}\")\n",
"\n",
"input_nii_path = \"/workspace/Data/maisi_ct_generative/datasets/IntegrationTest-AbdomenCT.nii.gz\"\n",
Expand Down Expand Up @@ -416,11 +468,6 @@
}
],
"source": [
"from vtkmodules.vtkRenderingCore import vtkRenderWindow, vtkRenderer, vtkRenderWindowInteractor\n",
"import vtkmodules\n",
"from ipyvtklink.viewer import ViewInteractiveWidget\n",
"import vtk\n",
"\n",
"# Step 1: Read the mesh\n",
"reader = vtk.vtkOBJReader()\n",
"reader.SetFileName(\"/workspace/Data/maisi_ct_generative/datasets/monai/obj/Heart.obj\") # Provide the path to your STL file\n",
Expand Down Expand Up @@ -460,6 +507,13 @@
"![Liver](Liver.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![all organs](all_organs.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand All @@ -469,7 +523,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"outputs": [
{
Expand All @@ -481,11 +535,10 @@
}
],
"source": [
"from utility import convert_obj_to_usd\n",
"obj_filename = \"/workspace/Data/maisi_ct_generative/datasets/monai/obj/all_organs.obj\"\n",
"obj_filename = \"/workspace/Data/maisi_ct_generative/datasets/monai/obj/all_organs.gltf\"\n",
"usd_filename = \"/workspace/Data/maisi_ct_generative/datasets/monai/obj/all_organs.usd\"\n",
"\n",
"convert_obj_to_usd(obj_filename, usd_filename)"
"convert_mesh_to_usd(obj_filename, usd_filename)"
]
}
],
Expand Down
Loading

0 comments on commit 2183084

Please sign in to comment.