99import os
1010from utils .download_kits23 import download_dataset
1111from natsort import natsorted
12+ import tarfile
1213
1314
1415def setup_word_dataset (dataset_dir ):
@@ -268,12 +269,82 @@ def setup_kits_dataset(dataset_dir):
268269 print ("Finished setting up KiTS2023 dataset." )
269270
270271
272+ def setup_lits_dataset (dataset_dir ):
273+ dataset_dir = Path (dataset_dir ) / "ScribbleBench"
274+ archive_dir = dataset_dir / "archive"
275+ raw_dir = dataset_dir / "raw"
276+ lits_raw_dir = raw_dir / "Task03_Liver"
277+ preprocessed_dir = dataset_dir
278+ lits_preprocessed_dir = preprocessed_dir / "LiTS"
279+ archive_dir .mkdir (parents = True , exist_ok = True )
280+ preprocessed_dir .mkdir (parents = True , exist_ok = True )
281+ lits_preprocessed_dir .mkdir (parents = True , exist_ok = True )
282+
283+ test_set = ['liver_112' , 'liver_38' , 'liver_47' , 'liver_84' , 'liver_119' , 'liver_15' , 'liver_62' , 'liver_72' , 'liver_98' ,
284+ 'liver_0' , 'liver_66' , 'liver_7' , 'liver_58' , 'liver_93' , 'liver_104' , 'liver_43' , 'liver_64' , 'liver_91' , 'liver_126' ,
285+ 'liver_69' , 'liver_102' , 'liver_123' , 'liver_127' , 'liver_26' , 'liver_35' , 'liver_45' , 'liver_73' , 'liver_89' ,
286+ 'liver_106' , 'liver_29' , 'liver_36' , 'liver_109' , 'liver_12' , 'liver_128' , 'liver_20' , 'liver_54' , 'liver_8' ,
287+ 'liver_19' , 'liver_21' ]
288+
289+ ####################################################################################################################
290+ #### Download LiTS dataset
291+ ####################################################################################################################
292+
293+ # Instead of the LiTS we are downloading the MSD Task03_Liver dataset, which is the exact same as the LiTS dataset but with fixed labels
294+ print ("Downloading LiTS dataset..." )
295+ url = 'https://drive.google.com/file/d/1jyVGUGyxKBXV6_9ivuZapQS8eUJXCIpu/view'
296+ gdown .download (url , str (archive_dir / "Task03_Liver.tar" ), fuzzy = True )
297+
298+ ####################################################################################################################
299+ #### Unpack LiTS archive
300+ ####################################################################################################################
301+
302+ print ("Unpacking LiTS archive..." )
303+ with tarfile .open (archive_dir / "Task03_Liver.tar" , "r:*" ) as tar :
304+ tar .extractall (path = raw_dir )
305+
306+ ####################################################################################################################
307+ #### Preprocess LiTS dataset
308+ ####################################################################################################################
309+
310+ print ("Preprocessing LiTS dataset..." )
311+
312+ (lits_preprocessed_dir / "imagesTr" ).mkdir (parents = True , exist_ok = True )
313+ (lits_preprocessed_dir / "imagesTs" ).mkdir (parents = True , exist_ok = True )
314+ (lits_preprocessed_dir / "labelsTr" ).mkdir (parents = True , exist_ok = True )
315+ (lits_preprocessed_dir / "labelsTs" ).mkdir (parents = True , exist_ok = True )
316+
317+ names = [p .name [:- 7 ] for p in (lits_raw_dir / "labelsTr" ).iterdir ()]
318+ names = natsorted (names )
319+ for name in names :
320+ postfix = "Tr" if name not in test_set else "Ts"
321+ shutil .move (lits_raw_dir / "imagesTr" / f"{ name } .nii.gz" , lits_preprocessed_dir / f"images{ postfix } " / f"{ name } _0000.nii.gz" )
322+ shutil .move (lits_raw_dir / "labelsTr" / f"{ name } .nii.gz" , lits_preprocessed_dir / f"labels{ postfix } " / f"{ name } .nii.gz" )
323+
324+ dataset_json_url = 'https://syncandshare.desy.de/index.php/s/wBMtJcFm6D2icXA/download/dataset.json'
325+ response = requests .get (dataset_json_url )
326+ response .raise_for_status () # Raise an error on bad status
327+ with open (lits_preprocessed_dir / "dataset.json" , "wb" ) as f :
328+ f .write (response .content )
329+
330+ ####################################################################################################################
331+ #### Delete raw dataset files
332+ ####################################################################################################################
333+
334+ print ("Deleting archive and raw dataset files..." )
335+ shutil .rmtree (archive_dir , ignore_errors = True )
336+ shutil .rmtree (raw_dir , ignore_errors = True )
337+
338+ print ("Finished setting up LiTS dataset." )
339+
340+
271341if __name__ == '__main__' :
272342 parser = argparse .ArgumentParser ()
273343 parser .add_argument ('-d' , "--dataset_dir" , required = True , type = str , help = "Path to the dir used for setting up ScribbleBench." )
274344 parser .add_argument ('--word' , required = False , default = False , action = "store_true" , help = "Download and preprocess the WORD dataset for ScribbleBench." )
275345 parser .add_argument ('--mscmr' , required = False , default = False , action = "store_true" , help = "Download and preprocess the MSCMR dataset for ScribbleBench." )
276346 parser .add_argument ('--kits' , required = False , default = False , action = "store_true" , help = "Download and preprocess the KiTS2023 dataset for ScribbleBench." )
347+ parser .add_argument ('--lits' , required = False , default = False , action = "store_true" , help = "Download and preprocess the LiTS dataset for ScribbleBench." )
277348 args = parser .parse_args ()
278349
279350 if args .word :
@@ -282,4 +353,5 @@ def setup_kits_dataset(dataset_dir):
282353 setup_mscmr_dataset (args .dataset_dir )
283354 if args .kits :
284355 setup_kits_dataset (args .dataset_dir )
285-
356+ if args .lits :
357+ setup_lits_dataset (args .dataset_dir )
0 commit comments