Spaces:
Sleeping
Sleeping
#!/usr/bin/env python | |
import argparse | |
import os | |
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" | |
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true" | |
from comp2comp.aaa import aaa | |
from comp2comp.aortic_calcium import ( | |
aortic_calcium, | |
aortic_calcium_visualization, | |
) | |
from comp2comp.contrast_phase.contrast_phase import ContrastPhaseDetection | |
from comp2comp.hip import hip | |
from comp2comp.inference_pipeline import InferencePipeline | |
from comp2comp.io import io | |
from comp2comp.liver_spleen_pancreas import ( | |
liver_spleen_pancreas, | |
liver_spleen_pancreas_visualization, | |
) | |
from comp2comp.muscle_adipose_tissue import ( | |
muscle_adipose_tissue, | |
muscle_adipose_tissue_visualization, | |
) | |
from comp2comp.spine import spine | |
from comp2comp.utils import orientation | |
from comp2comp.utils.process import process_3d | |
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" | |
### AAA Pipeline | |
def AAAPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
AxialCropperPipelineBuilder(path, args), | |
aaa.AortaSegmentation(), | |
aaa.AortaDiameter(), | |
aaa.AortaMetricsSaver() | |
] | |
) | |
return pipeline | |
def MuscleAdiposeTissuePipelineBuilder(args): | |
pipeline = InferencePipeline( | |
[ | |
muscle_adipose_tissue.MuscleAdiposeTissueSegmentation( | |
16, args.muscle_fat_model | |
), | |
muscle_adipose_tissue.MuscleAdiposeTissuePostProcessing(), | |
muscle_adipose_tissue.MuscleAdiposeTissueComputeMetrics(), | |
muscle_adipose_tissue_visualization.MuscleAdiposeTissueVisualizer(), | |
muscle_adipose_tissue.MuscleAdiposeTissueH5Saver(), | |
muscle_adipose_tissue.MuscleAdiposeTissueMetricsSaver(), | |
] | |
) | |
return pipeline | |
def MuscleAdiposeTissueFullPipelineBuilder(args): | |
pipeline = InferencePipeline( | |
[io.DicomFinder(args.input_path), MuscleAdiposeTissuePipelineBuilder(args)] | |
) | |
return pipeline | |
def SpinePipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
spine.SpineSegmentation(args.spine_model, save=True), | |
orientation.ToCanonical(), | |
spine.SpineComputeROIs(args.spine_model), | |
spine.SpineMetricsSaver(), | |
spine.SpineCoronalSagittalVisualizer(format="png"), | |
spine.SpineReport(format="png"), | |
] | |
) | |
return pipeline | |
def AxialCropperPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
spine.SpineSegmentation(args.spine_model), | |
orientation.ToCanonical(), | |
spine.AxialCropper(lower_level="L5", upper_level="L1", save=True), | |
] | |
) | |
return pipeline | |
def SpineMuscleAdiposeTissuePipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
SpinePipelineBuilder(path, args), | |
spine.SpineFindDicoms(), | |
MuscleAdiposeTissuePipelineBuilder(args), | |
spine.SpineMuscleAdiposeTissueReport(), | |
] | |
) | |
return pipeline | |
def LiverSpleenPancreasPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
liver_spleen_pancreas.LiverSpleenPancreasSegmentation(), | |
orientation.ToCanonical(), | |
liver_spleen_pancreas_visualization.LiverSpleenPancreasVisualizer(), | |
liver_spleen_pancreas_visualization.LiverSpleenPancreasMetricsPrinter(), | |
] | |
) | |
return pipeline | |
def AorticCalciumPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
spine.SpineSegmentation(model_name="ts_spine"), | |
orientation.ToCanonical(), | |
aortic_calcium.AortaSegmentation(), | |
orientation.ToCanonical(), | |
aortic_calcium.AorticCalciumSegmentation(), | |
aortic_calcium.AorticCalciumMetrics(), | |
aortic_calcium_visualization.AorticCalciumVisualizer(), | |
aortic_calcium_visualization.AorticCalciumPrinter(), | |
] | |
) | |
return pipeline | |
def ContrastPhasePipelineBuilder(path, args): | |
pipeline = InferencePipeline([io.DicomToNifti(path), ContrastPhaseDetection(path)]) | |
return pipeline | |
def HipPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
hip.HipSegmentation(args.hip_model), | |
orientation.ToCanonical(), | |
hip.HipComputeROIs(args.hip_model), | |
hip.HipMetricsSaver(), | |
hip.HipVisualizer(), | |
] | |
) | |
return pipeline | |
def AllPipelineBuilder(path, args): | |
pipeline = InferencePipeline( | |
[ | |
io.DicomToNifti(path), | |
SpineMuscleAdiposeTissuePipelineBuilder(path, args), | |
LiverSpleenPancreasPipelineBuilder(path, args), | |
HipPipelineBuilder(path, args), | |
] | |
) | |
return pipeline | |
def argument_parser(): | |
base_parser = argparse.ArgumentParser(add_help=False) | |
base_parser.add_argument("--input_path", "-i", type=str, required=True) | |
base_parser.add_argument("--output_path", "-o", type=str) | |
base_parser.add_argument("--save_segmentations", action="store_true") | |
base_parser.add_argument("--overwrite_outputs", action="store_true") | |
parser = argparse.ArgumentParser() | |
subparsers = parser.add_subparsers(dest="pipeline", help="Pipeline to run") | |
# Add the help option to each subparser | |
muscle_adipose_tissue_parser = subparsers.add_parser( | |
"muscle_adipose_tissue", parents=[base_parser] | |
) | |
muscle_adipose_tissue_parser.add_argument( | |
"--muscle_fat_model", default="abCT_v0.0.1", type=str | |
) | |
# Spine | |
spine_parser = subparsers.add_parser("spine", parents=[base_parser]) | |
spine_parser.add_argument("--spine_model", default="ts_spine", type=str) | |
# Spine + muscle + fat | |
spine_muscle_adipose_tissue_parser = subparsers.add_parser( | |
"spine_muscle_adipose_tissue", parents=[base_parser] | |
) | |
spine_muscle_adipose_tissue_parser.add_argument( | |
"--muscle_fat_model", default="stanford_v0.0.2", type=str | |
) | |
spine_muscle_adipose_tissue_parser.add_argument( | |
"--spine_model", default="ts_spine", type=str | |
) | |
liver_spleen_pancreas = subparsers.add_parser( | |
"liver_spleen_pancreas", parents=[base_parser] | |
) | |
aortic_calcium = subparsers.add_parser("aortic_calcium", parents=[base_parser]) | |
contrast_phase_parser = subparsers.add_parser( | |
"contrast_phase", parents=[base_parser] | |
) | |
hip_parser = subparsers.add_parser("hip", parents=[base_parser]) | |
hip_parser.add_argument( | |
"--hip_model", | |
default="ts_hip", | |
type=str, | |
) | |
# AAA | |
aorta_diameter_parser = subparsers.add_parser("aaa", help="aorta diameter", parents=[base_parser]) | |
aorta_diameter_parser.add_argument( | |
"--aorta_model", | |
default="ts_spine", | |
type=str, | |
help="aorta model to use for inference", | |
) | |
aorta_diameter_parser.add_argument( | |
"--spine_model", | |
default="ts_spine", | |
type=str, | |
help="spine model to use for inference", | |
) | |
all_parser = subparsers.add_parser("all", parents=[base_parser]) | |
all_parser.add_argument( | |
"--muscle_fat_model", | |
default="abCT_v0.0.1", | |
type=str, | |
) | |
all_parser.add_argument( | |
"--spine_model", | |
default="ts_spine", | |
type=str, | |
) | |
all_parser.add_argument( | |
"--hip_model", | |
default="ts_hip", | |
type=str, | |
) | |
return parser | |
def main(): | |
args = argument_parser().parse_args() | |
if args.pipeline == "spine_muscle_adipose_tissue": | |
process_3d(args, SpineMuscleAdiposeTissuePipelineBuilder) | |
elif args.pipeline == "spine": | |
process_3d(args, SpinePipelineBuilder) | |
elif args.pipeline == "contrast_phase": | |
process_3d(args, ContrastPhasePipelineBuilder) | |
elif args.pipeline == "liver_spleen_pancreas": | |
process_3d(args, LiverSpleenPancreasPipelineBuilder) | |
elif args.pipeline == "aortic_calcium": | |
process_3d(args, AorticCalciumPipelineBuilder) | |
elif args.pipeline == "hip": | |
process_3d(args, HipPipelineBuilder) | |
elif args.pipeline == "aaa": | |
process_3d(args, AAAPipelineBuilder) | |
elif args.pipeline == "all": | |
process_3d(args, AllPipelineBuilder) | |
else: | |
raise AssertionError("{} command not supported".format(args.action)) | |
if __name__ == "__main__": | |
main() | |