2626from monai .data import Dataset
2727from monai .inferers import SimpleInferer , SlidingWindowInferer
2828from monai .networks .nets import UNet
29- from monai .transforms import Compose , LoadImage
29+ from monai .transforms import Compose , LoadImage , LoadImaged , SaveImaged
3030from tests .nonconfig_workflow import NonConfigWorkflow
3131
3232TEST_CASE_1 = [os .path .join (os .path .dirname (__file__ ), "testing_data" , "inference.json" )]
3535
3636TEST_CASE_3 = [os .path .join (os .path .dirname (__file__ ), "testing_data" , "config_fl_train.json" )]
3737
38+ TEST_CASE_4 = [os .path .join (os .path .dirname (__file__ ), "testing_data" , "responsive_inference.json" )]
39+
3840TEST_CASE_NON_CONFIG_WRONG_LOG = [None , "logging.conf" , "Cannot find the logging config file: logging.conf." ]
3941
4042
@@ -45,7 +47,9 @@ def setUp(self):
4547 self .expected_shape = (128 , 128 , 128 )
4648 test_image = np .random .rand (* self .expected_shape )
4749 self .filename = os .path .join (self .data_dir , "image.nii" )
50+ self .filename1 = os .path .join (self .data_dir , "image1.nii" )
4851 nib .save (nib .Nifti1Image (test_image , np .eye (4 )), self .filename )
52+ nib .save (nib .Nifti1Image (test_image , np .eye (4 )), self .filename1 )
4953
5054 def tearDown (self ):
5155 shutil .rmtree (self .data_dir )
@@ -115,6 +119,35 @@ def test_inference_config(self, config_file):
115119 self ._test_inferer (inferer )
116120 self .assertEqual (inferer .workflow_type , None )
117121
122+ @parameterized .expand ([TEST_CASE_4 ])
123+ def test_responsive_inference_config (self , config_file ):
124+ input_loader = LoadImaged (keys = "image" )
125+ output_saver = SaveImaged (keys = "pred" , output_dir = self .data_dir , output_postfix = "seg" )
126+
127+ # test standard MONAI model-zoo config workflow
128+ inferer = ConfigWorkflow (
129+ workflow_type = "infer" ,
130+ config_file = config_file ,
131+ logging_file = os .path .join (os .path .dirname (__file__ ), "testing_data" , "logging.conf" ),
132+ )
133+ # FIXME: temp add the property for test, we should add it to some formal realtime infer properties
134+ inferer .add_property (name = "dataflow" , required = True , config_id = "dataflow" )
135+
136+ inferer .initialize ()
137+ inferer .dataflow .update (input_loader ({"image" : self .filename }))
138+ inferer .run ()
139+ output_saver (inferer .dataflow )
140+ self .assertTrue (os .path .exists (os .path .join (self .data_dir , "image" , "image_seg.nii.gz" )))
141+
142+ # bundle is instantiated and idle, just change the input for next inference
143+ inferer .dataflow .clear ()
144+ inferer .dataflow .update (input_loader ({"image" : self .filename1 }))
145+ inferer .run ()
146+ output_saver (inferer .dataflow )
147+ self .assertTrue (os .path .exists (os .path .join (self .data_dir , "image1" , "image1_seg.nii.gz" )))
148+
149+ inferer .finalize ()
150+
118151 @parameterized .expand ([TEST_CASE_3 ])
119152 def test_train_config (self , config_file ):
120153 # test standard MONAI model-zoo config workflow
0 commit comments