def writeStatsToYAML(self, filename='hist_stats.yaml'): logger.debug('writeStatsToYAML') gr = self.stats['Graph'] for i in gr: logger.info('Processing edge num '+str(i)) try: gr[i]['lengthEstimationPoly'] = float(gr[i]['lengthEstimationPoly']) except: logger.warning('lengthEstimationPoly not a number') gr[i]['lengthEstimationPoly'] = None try: gr[i]['lengthEstimationSpline'] = float(gr[i]['lengthEstimationSpline']) except: logger.warning('lengthEstimationSpline not a number') gr[i]['lengthEstimationSpline'] = None try: self.stats['lengthEstimation'] = float(gr[i]['lengthEstimation']) except: logger.warning('lengthEstimation not a number') gr[i]['lengthEstimation'] = None try: gr[i]['lengthEstimationPixel'] = float(gr[i]['lengthEstimationPixel']) except: logger.warning('lengthEstimationPixel not a number') gr[i]['lengthEstimationPixel'] = None self.stats['Graph'] = gr misc.obj_to_file(self.stats, filename=filename, filetype='yaml')
def update_by_plan(filename="~/lisa_data/.update_plan.yaml", update_periode_days=10): """ :return: True or False """ filename = op.expanduser(filename) retval = False now = datetime.datetime.now() try: # this import is necessary here. This module requires scipy and it is # not installed yet import misc data = misc.obj_from_file(filename) string_date = data['update_datetime'] dt = datetime.datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S.%f") dt_delta = datetime.timedelta(days=update_periode_days) if now > (dt + dt_delta): retval = True data['update_datetime'] = str(now) misc.obj_to_file(data, filename) # data['update_datetime'] = except: retval = True data = {} data['update_datetime'] = str(now) import lisa_data lisa_data.create_lisa_data_dir_tree() misc.obj_to_file(data, filename) return retval
def get_subdirs(dirpath, wildcard='*', outputfile='experiment_data.yaml'): dirlist = [] if os.path.exists(dirpath): logger.info('dirpath = ' + dirpath) # print completedirpath else: logger.error('Wrong path: ' + dirpath) raise Exception('Wrong path : ' + dirpath) dirpath = os.path.abspath(dirpath) # print 'copmpletedirpath = ', completedirpath # import pdb; pdb.set_trace() dirlist = { o: {'abspath': os.path.abspath(os.path.join(dirpath, o))} for o in os.listdir(dirpath) if os.path.isdir( os.path.join(dirpath, o)) } # import pdb; pdb.set_trace() # print [o for o in os.listdir(dirpath) if # os.path.isdir(os.path.abspath(o))] # dirlist.append(infile) # print "current file is: " + infile misc.obj_to_file(dirlist, 'experiment_data.yaml', 'yaml') return dirlist
def test_create_iparams(self): """ Interactivity is stored to file """ if self.verbose: print "test_create_iparams" import misc dcmdir = os.path.join(path_to_script,'./../sample_data/jatra_5mm') segparams = {'pairwiseAlpha':20, 'use_boundary_penalties':False,'boundary_penalties_sigma':200} #oseg = organ_segmentation.OrganSegmentation(dcmdir, working_voxelsize_mm = 4) oseg = organ_segmentation.OrganSegmentation(dcmdir, working_voxelsize_mm = 4, segparams=segparams, manualroi=False) #oseg.add_seeds_mm([120,160],[150,120],[70], label=1, radius=20) oseg.add_seeds_mm([120,160],[150,80],[85], label=1, radius=20) oseg.add_seeds_mm([170,220,250,100],[250,300,200,350],[85], label=2, radius=20) oseg.add_seeds_mm([170],[240],[70], label=2, radius=20) #print "test_ipars" #oseg.interactivity() oseg.ninteractivity() volume = oseg.get_segmented_volume_size_mm3() #print 'vol %.3g ' %(volume) misc.obj_to_file(oseg.get_iparams(),'iparams.pkl',filetype='pickle') self.assertGreater(volume,1000000)
def sample_input_data(): inputdata = {'basedir': '/home/mjirik/data/medical/', # noqa 'data': [ {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg001.mhd', 'ourseg': 'data_processed/organ_small-liver-orig001.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg002.mhd', 'ourseg': 'data_processed/organ_small-liver-orig002.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg003.mhd', 'ourseg': 'data_processed/organ_small-liver-orig003.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg004.mhd', 'ourseg': 'data_processed/organ_small-liver-orig004.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg005.mhd', 'ourseg': 'data_processed/organ_small-liver-orig005.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg006.mhd', 'ourseg': 'data_processed/organ_small-liver-orig006.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg007.mhd', 'ourseg': 'data_processed/organ_small-liver-orig007.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg008.mhd', 'ourseg': 'data_processed/organ_small-liver-orig008.mhd.pkl'}, # noqa {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg009.mhd', 'ourseg': 'data_processed/organ_small-liver-orig009.mhd.pkl'}, # noqa ] } sample_data_file = os.path.join(path_to_script, "20130812_liver_volumetry_sample.yaml") # print sample_data_file, path_to_script misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
def save_outputs(self, filepath=None): # savestring_qt, ok = QInputDialog.getText( # None, # "Save", # 'Save output data? Yes/No/All with input data (y/n/a):', # text="a" # ) # savestring = str(savestring_qt) # if savestring in ['Y', 'y', 'a', 'A']: data = self.export() data['version'] = self.version # qmisc.getVersionString() data['experiment_caption'] = self.experiment_caption data['lisa_operator_identifier'] = self.lisa_operator_identifier # data['organ_interactivity_counter'] = self.organ_interactivity_counter # save renamed file too # pth, filename = op.split(op.normpath(self.datapath)) # filename += "-" + self.experiment_caption # # if savestring in ['a', 'A']: # filepath = 'org-' + filename + '.' + self.save_filetype # # rint filepath # # rint 'op ', op odp = self.output_datapath if not op.exists(odp): os.makedirs(odp) if filepath is None: filepath = self.get_standard_ouptut_filename() misc.obj_to_file(data, filepath, filetype=self.save_filetype)
def main(): logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser parser = argparse.ArgumentParser( description='Module for segmentation of simple anatomical structures') parser.add_argument('-i', '--inputfile', default='organ.pkl', help='path to data dir') args = parser.parse_args() data = misc.obj_from_file(args.inputfile, filetype = 'pickle') data3d = data['data3d'] voxelsize_mm = data['voxelsize_mm'] ss = SimpleSegmentation() simple_seg = ss.simple_segmentation(data3d, voxelsize_mm) #visualization pyed = sed3.sed3(data['data3d'], seeds=simple_seg) pyed.show() # save savestring = raw_input('Save output data? (y/n): ') if savestring in ['Y', 'y']: misc.obj_to_file(data, "resection.pkl", filetype='pickle')
def save(self, outputfile, filetype='pklz'): data = { 'data3d': self.data3d, 'voxelsize_mm': self.voxelsize_mm } misc.obj_to_file(data, outputfile, filetype=filetype) print "saved"
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') parser = argparse.ArgumentParser( description='Compute features on liver and other tissue.') parser.add_argument('-si', '--sampleInput', action='store_true', help='generate sample intput data', default=False) parser.add_argument('-v', '--visualization', action='store_true', help='Turn on visualization', default=False) parser.add_argument('-fc', '--features_classifs', action='store_true', help='Read features and classifs list from file', default=False) parser.add_argument('-i', '--input', help='input yaml file', default="20130919_liver_statistics.yaml") parser.add_argument('-o', '--output', help='output file', default="20130919_liver_statistics_results.pkl") parser.add_argument('-t', '--train', help='Training', default=False, action='store_true' ) args = parser.parse_args() if args.sampleInput: sample_input_data() # input parser #path_to_yaml = os.path.join(path_to_script, args.input) path_to_yaml = args.input #write_csv(fvall) list_of_feature_fcn = [feat_hist] from sklearn import svm from sklearn.naive_bayes import GaussianNB list_of_classifiers = [svm.SVC, GaussianNB] tile_shape = [10, 100, 100] if args.features_classifs: import features_classifs featrs_plus_classifs = features_classifs.fc else: featrs_plus_classifs = make_product_list(list_of_feature_fcn, list_of_classifiers) result = experiment(path_to_yaml, featrs_plus_classifs, tile_shape=tile_shape, visualization=args.visualization, train=args.train) # Ukládání výsledku do souboru output_file = os.path.join(path_to_script, args.output) misc.obj_to_file(result, output_file, filetype='pickle')
def delete_config_records(filename, records_to_save=[]): """ All records of config file are deleted except records_to_save. """ if os.path.isfile(filename): cfg = misc.obj_from_file(filename, filetype='yaml') new_cfg = subdict(cfg, records_to_save) print cfg misc.obj_to_file(new_cfg, "test_" + filename , filetype='yaml')
def update_config_records(filename, new_cfg): """ All records of config file are updated exept records_to_save. """ if os.path.isfile(filename): cfg = misc.obj_from_file(filename, filetype='yaml') cfg.update(new_cfg) print cfg misc.obj_to_file(new_cfg, "test_" + filename , filetype='yaml')
def generate_input_yaml(sliver_dir, pklz_dir, sliver_ext='*seg0*.mhd', pklz_ext='*0*.pklz', yaml_filename=None, return_dir_lists=False ): """ Function pair files from different directory by numer in format g0XX. It is ok for seg001 and orig001 too. If there is given some yaml_filename, it is created. """ import glob import re onlyfiles1 = glob.glob(os.path.join(sliver_dir, sliver_ext)) onlyfiles2 = glob.glob(os.path.join(pklz_dir, pklz_ext)) onlyfiles1.sort() onlyfiles2.sort() logger.debug('sliver files \n' + str(onlyfiles1)) logger.debug('pklz files \n' + str(onlyfiles2)) data = [] for flns in onlyfiles1: base, flnsh = os.path.split(os.path.normpath(flns)) pattern = re.search('(g0[0-9]{2})', flnsh) if pattern: pattern = pattern.group(1) logger.debug('pattern1 ' + pattern) for flnp in onlyfiles2: base, flnph = os.path.split(os.path.normpath(flnp)) pt = re.match('.*' + pattern + '.*', flnph) if pt: data.append({ 'sliverseg': flns, 'ourseg': flnp }) inputdata = { 'basedir': '', 'data': data } retval = [] if yaml_filename is None: retval.append(inputdata) else: misc.obj_to_file(inputdata, yaml_filename, filetype='yaml') if return_dir_lists: retval.append(onlyfiles1) retval.append(onlyfiles2) if len(retval) > 1: return tuple(retval) elif len(retval) == 1: return retval[0]
def test_obj_to_and_from_file_pickle(self): testdata = np.random.random([4, 4, 3]) test_object = {'a': 1, 'data': testdata} filename = 'test_obj_to_and_from_file.pkl' misc.obj_to_file(test_object, filename, 'pickle') saved_object = misc.obj_from_file(filename, 'pickle') self.assertTrue(saved_object['a'] == 1) self.assertTrue(saved_object['data'][1, 1, 1] == testdata[1, 1, 1]) os.remove(filename)
def skeleton_analysis(self, guiUpdateFunction = None): """ Glossary: element: line structure of skeleton connected to node on both ends node: connection point of elements. It is one or few voxelsize_mm terminal: terminal node """ if not fast_debug: if self.volume_data is not None: skdst = self.__radius_analysis_init() stats = {} len_edg = np.max(self.sklabel) #len_edg = 30 for edg_number in range(1,len_edg+1): edgst = self.__connection_analysis(edg_number) edgst.update(self.__edge_length(edg_number)) edgst.update(self.__edge_curve(edg_number, edgst, self.voxelsize_mm)) edgst.update(self.__edge_vectors(edg_number, edgst)) #edgst = edge_analysis(sklabel, i) if self.volume_data is not None: edgst['radius_mm'] = float(self.__radius_analysis(edg_number,skdst)) stats[edgst['id']] = edgst if guiUpdateFunction is not None: # update gui progress guiUpdateFunction(edg_number,len_edg,1) #save data for faster debug struct = {'sVD':self.volume_data, 'stats':stats, 'len_edg':len_edg} misc.obj_to_file(struct, filename='tmp.pkl', filetype='pickle') else: struct = misc.obj_from_file(filename='tmp.pkl', filetype='pickle') self.volume_data = struct['sVD'] stats = struct['stats'] len_edg = struct['len_edg'] #@TODO dokončit for edg_number in range (1,len_edg+1): edgst = stats[edg_number] edgst.update(self.__connected_edge_angle(edg_number, stats)) if guiUpdateFunction is not None: # update gui progress guiUpdateFunction(edg_number,len_edg,2) return stats
def sample_input_data(): inputdata = { 'basedir': '/home/mjirik/data/medical/', 'data': [ {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg001.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig001.mhd'}, {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg002.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig002.mhd'}, ] } sample_data_file = os.path.join(path_to_script, "20130919_liver_statistics.yaml") #print sample_data_file, path_to_script misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
def test_obj_to_and_from_file_with_directories(self): import shutil testdata = np.random.random([4, 4, 3]) test_object = {'a': 1, 'data': testdata} dirname = '__test_write_and_read' filename = '__test_write_and_read/test_obj_to_and_from_file.pkl' misc.obj_to_file(test_object, filename, 'pickle') saved_object = misc.obj_from_file(filename, 'pickle') self.assertTrue(saved_object['a'] == 1) self.assertTrue(saved_object['data'][1, 1, 1] == testdata[1, 1, 1]) shutil.rmtree(dirname)
def evaluate_and_write_to_file( inputYamlFile, directoryPklz, directorySliver, outputfile, visualization, return_dir_lists=False, special_evaluation_function=None, return_all_data=False ): """ Function computes yaml file (if there are given input sliver and pklz directories). Based on yaml file are compared sliver segmentations and our pklz files. """ dirlists = None if (directoryPklz is not None) and (directorySliver is not None): dirlists = generate_input_yaml( directorySliver, directoryPklz, yaml_filename=inputYamlFile, return_dir_lists=return_dir_lists ) # input parser data_file = inputYamlFile inputdata = misc.obj_from_file(data_file, filetype='yaml') evaluation_all = eval_all_from_dataset_metadata( inputdata, visualization, special_evaluation_function=special_evaluation_function ) logger.debug(str(evaluation_all)) logger.debug('eval all') logger.debug(make_sum(evaluation_all)) write_csv(evaluation_all, filename=outputfile + '.csv') misc.obj_to_file(evaluation_all, outputfile + '.pkl', filetype='pkl') retval = [] if return_dir_lists: retval.append(dirlists) if return_all_data: retval.append(evaluation_all) if len(retval) > 0: return retval
def get_config(filename, default_cfg): """ Looks config file and update default_cfg values. If file does not exist it is created. """ if os.path.isfile(filename): cfg = misc.obj_from_file(filename, filetype='yaml') default_cfg.update(cfg) cfg_out = default_cfg else: misc.obj_to_file(default_cfg, filename, filetype='yaml') cfg_out = default_cfg # default config return cfg_out
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser params = {'datadir':None, 'working_voxelsize_mm':3} dirpath = os.path.join(path_to_script, "../../../data/medical/data_orig/volumetrie") experiment_results = {'params':params,'dirpath':dirpath, 'volume_l':{}} output_dirpath = os.path.join(path_to_script, '../../../data/medical') dirlist = experiments.get_subdirs(dirpath) for key in dirlist: print key # import pdb; pdb.set_trace() try: dirname = dirlist[key]['abspath'] params['datadir'] = dirname oseg = organ_segmentation.OrganSegmentation(**params) oseg.interactivity() print ( "Volume " + str(oseg.get_segmented_volume_size_mm3() / 1000000.0) + ' [l]') volume_l = (oseg.get_segmented_volume_size_mm3() / 1000000.0) experiment_results['volume_l'][key] = volume_l head, teil = os.path.split(dirname) filename_organ = os.path.join(output_dirpath, teil) data = oseg.export() misc.obj_to_file(data, filename_organ + "-organ.pkl", filetype='pickle') #misc.obj_to_file(data, "organ.pkl", filetype='pickle') misc.obj_to_file(oseg.get_iparams(), filename_organ + '-iparams.pkl', filetype='pickle') misc.obj_to_file(experiment_results, filename_organ + "-info.yaml", filetype='yaml') except: print 'Selhani, pokracujeme dal' print traceback.format_exc() import pdb; pdb.set_trace() misc.obj_to_file(experiment_results, "results.yaml", filetype='yaml')
def sample_input_data(): inputdata = { "basedir": "/home/mjirik/data/medical/", "data": [ { "sliverseg": "data_orig/sliver07/training-part1/liver-seg001.mhd", "sliverorig": "data_orig/sliver07/training-part1/liver-orig001.mhd", }, { "sliverseg": "data_orig/sliver07/training-part1/liver-seg002.mhd", "sliverorig": "data_orig/sliver07/training-part1/liver-orig002.mhd", }, ], } sample_data_file = os.path.join(path_to_script, "20130919_liver_statistics.yaml") # print sample_data_file, path_to_script misc.obj_to_file(inputdata, sample_data_file, filetype="yaml")
def __vesselTree(self, binaryData3d, textLabel): import skelet3d import skeleton_analyser # histology_analyser as skan data3d_thr = (binaryData3d > 0).astype(np.int8) data3d_skel = skelet3d.skelet3d(data3d_thr) skan = skeleton_analyser.SkeletonAnalyser( data3d_skel, volume_data=data3d_thr, voxelsize_mm=self.voxelsize_mm) stats = skan.skeleton_analysis(guiUpdateFunction=None) if 'graph' not in self.vessel_tree.keys(): self.vessel_tree['voxelsize_mm'] = self.voxelsize_mm self.vessel_tree['graph'] = {} self.vessel_tree['graph'][textLabel] = stats # print sa.stats # save skeleton to special file misc.obj_to_file(self.vessel_tree, 'vessel_tree.yaml', filetype='yaml')
def main(): # logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) # logger.debug('input params') parser = argparse.ArgumentParser(description="Compute features on liver and other tissue.") parser.add_argument("-si", "--sampleInput", action="store_true", help="generate sample intput data", default=False) parser.add_argument("-v", "--visualization", action="store_true", help="Turn on visualization", default=False) parser.add_argument("-i", "--input", help="input yaml file", default="20130919_liver_statistics.yaml") parser.add_argument("-o", "--output", help="output file", default="20130919_liver_statistics_results.pkl") parser.add_argument("-t", "--train", help="Training", default=False, action="store_true") args = parser.parse_args() if args.sampleInput: sample_input_data() # input parser # path_to_yaml = os.path.join(path_to_script, args.input) path_to_yaml = args.input # write_csv(fvall) list_of_feature_fcn = [feat_hist] from sklearn import svm from sklearn.naive_bayes import GaussianNB list_of_classifiers = [svm.SVC, GaussianNB] tile_shape = [1, 100, 100] featrs_plus_classifs = make_product_list(list_of_feature_fcn, list_of_classifiers) result = experiment( path_to_yaml, featrs_plus_classifs, tile_shape=tile_shape, visualization=args.visualization, train=args.train ) # Ukládání výsledku do souboru output_file = os.path.join(path_to_script, args.output) misc.obj_to_file(result, output_file, filetype="pickle")
def check_config_version_and_remove_old_records(filename, version, records_to_save): """ Check if config file version is ok. If it is not all records except records_to_save are deleted and config_version in file is set to version. It is used to update user configuration. """ if os.path.isfile(filename): cfg = misc.obj_from_file(filename, filetype='yaml') if ('config_version' in cfg and (cfg['config_version'] == version)): # everything is ok, no need to panic return else: # older version of config file cfg = misc.obj_from_file(filename, filetype='yaml') misc.obj_to_file(cfg, filename + '.old', filetype='yaml') print 'cfg ', cfg new_cfg = subdict(cfg, records_to_save) new_cfg['config_version'] = version print 'ncfg ', new_cfg misc.obj_to_file(new_cfg, filename, filetype='yaml')
def sample_input_data(): inputdata = { 'basedir': '/home/mjirik/data/medical/', 'data': [ { 'sliverseg': 'data_orig/sliver07/training-part1/liver-seg001.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig001.mhd' }, # noqa { 'sliverseg': 'data_orig/sliver07/training-part1/liver-seg002.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig002.mhd' }, # noqa ] } sample_data_file = os.path.join(path_to_script, "20130919_liver_statistics.yaml") # print sample_data_file, path_to_script misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
def save_outputs(self): # savestring_qt, ok = QInputDialog.getText( # None, # "Save", # 'Save output data? Yes/No/All with input data (y/n/a):', # text="a" # ) # savestring = str(savestring_qt) # if savestring in ['Y', 'y', 'a', 'A']: odp = self.output_datapath if not op.exists(odp): os.makedirs(odp) data = self.export() data['version'] = self.version # qmisc.getVersionString() data['experiment_caption'] = self.experiment_caption data['lisa_operator_identifier'] = self.lisa_operator_identifier # data['organ_interactivity_counter'] = self.organ_interactivity_counter pth, filename = op.split(op.normpath(self.datapath)) filename += "-" + self.experiment_caption # if savestring in ['a', 'A']: # save renamed file too filepath = 'org-' + filename + '.' + self.save_filetype # rint filepath # rint 'op ', op filepath = op.join(odp, filepath) filepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype=self.save_filetype) filepath = 'organ_last.' + self.save_filetype filepath = op.join(odp, filepath) # ilepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype=self.save_filetype) # save to mat # iparams = self.get_iparams() # filepath = 'organ_iparams.pklz' # filepath = op.join(odp, filepath) # misc.obj_to_file(iparams, filepath, filetype='pklz') # f savestring in ['a', 'A']: if False: # save renamed file too data['data3d'] = None filepath = 'organ_small-' + filename + '.pklz' filepath = op.join(odp, filepath) filepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype='pklz')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser parser = argparse.ArgumentParser( description='Segmentation of bones, lungs and heart.') parser.add_argument('-i', '--datadir', default=None, help='path to data dir') parser.add_argument('-o', '--output', default=None, help='output file') parser.add_argument('-d', '--debug', action='store_true', help='run in debug mode') parser.add_argument('-ss', '--segspine', action='store_true', help='run spine segmentaiton') parser.add_argument('-sl', '--seglungs', action='store_true', help='run lungs segmentation') parser.add_argument('-sh', '--segheart', action='store_true', help='run heart segmentation') parser.add_argument('-sb', '--segbones', action='store_true', help='run bones segmentation') parser.add_argument('-exd', '--exampledata', action='store_true', help='run unittest') parser.add_argument('-so', '--show_output', action='store_true', help='Show output data in viewer') args = parser.parse_args() if args.debug: logger.setLevel(logging.DEBUG) if args.exampledata: args.dcmdir = '../sample_data/liver-orig001.raw' # if dcmdir == None: #else: #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/') #data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir) data3d, metadata = io3d.datareader.read(args.datadir) sseg = SupportStructureSegmentation( data3d=data3d, voxelsize_mm=metadata['voxelsize_mm'], ) #sseg.orientation() if args.segbones: sseg.bone_segmentation() if args.segspine: sseg.spine_segmentation() if args.seglungs or args.segheart: sseg.lungs_segmentation() if args.segheart: sseg.heart_segmentation() sseg.resize_back_to_orig() #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) ) #igc = pycut.ImageGraphCut(data3d, zoom = 0.5) #igc.interactivity() #igc.make_gc() #igc.show_segmentation() # volume #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm) #pyed = sed3.sed3(oseg.data3d, contour = oseg.segmentation) #pyed.show() if args.show_output: sseg.visualization() #savestring = raw_input ('Save output data? (y/n): ') #sn = int(snstring) if args.output is not None: # savestring in ['Y','y']: import misc data = sseg.export() misc.obj_to_file(data, args.output, filetype='pickle')
# seg = np.zeros([100,100,100]) # seg [50:80, 50:80, 60:75] = 1 # seg[58:60, 56:72, 66:68]=2 # dat = np.random.rand(100,100,100) # dat [50:80, 50:80, 60:75] = dat [50:80, 50:80, 60:75] + 1 # dat [58:60, 56:72, 66:68] = dat [58:60, 56:72, 66:68] + 1 # slab = {'liver':1, 'porta':2, 'portaa':3, 'portab':4} # data = {'segmentation':seg, 'data3d':dat, 'slab':slab} name = 'porta' # cut_editor(data,args.inputfile) if args.use_old_editor: resection(data, name, use_old_editor=args.use_old_editor) else: cut_editor(data, args.picklefile) # print normal # print coordinates defaultoutputfile = "05-resection.pkl" if args.defaultoutputfile: args.outputfile = defaultoutputfile if args.outputfile is None: savestring = raw_input('Save output data? (y/n): ') if savestring in ['Y', 'y']: misc.obj_to_file(data, defaultoutputfile, filetype='pickle') else: misc.obj_to_file(data, args.outputfile, filetype='pickle')
def save_outputs(args, oseg, qt_app): from PyQt4.QtGui import QInputDialog savestring_qt, ok = QInputDialog.getText( None, "Save", 'Save output data? Yes/No/All+Dicom with input data (y/n/a/ad):', text="a" ) savestring = str(savestring_qt) #import pdb; pdb.set_trace() #savestring = raw_input( # 'Save output data? Yes/No/All with input data (y/n/a): ' #) if savestring in ['Y', 'y', 'a', 'A', 'ad']: if not os.path.exists(args["output_datapath"]): os.makedirs(args['output_datapath']) op = args['output_datapath'] # rename data = oseg.export() data['version'] = qmisc.getVersionString() data['experiment_caption'] = args['experiment_caption'] data['lisa_operator_identifier'] = args['lisa_operator_identifier'] #data['organ_segmentation_time'] = t1 iparams = oseg.get_iparams() #import pdb; pdb.set_trace() pth, filename = os.path.split(os.path.normpath(args['datapath'])) filename += "-" + args['experiment_caption'] if savestring in ['a', 'A', 'ad']: # save renamed file too filepath = 'ob-' + filename + '.pklz' filepath = os.path.join(op, filepath) filepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype='pklz') filepath = 'organ.pklz' filepath = os.path.join(op, filepath) #filepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype='pklz') filepath = 'organ_iparams.pklz' filepath = os.path.join(op, filepath) misc.obj_to_file(iparams, filepath, filetype='pklz') data['data3d'] = None filepath = 'organ_small-' + filename + '.pklz' filepath = os.path.join(op, filepath) filepath = misc.suggest_filename(filepath) misc.obj_to_file(data, filepath, filetype='pklz') #output = segmentation.vesselSegmentation(oseg.data3d, # oseg.orig_segmentation) # print "uf" if savestring in ['ad']: # save to DICOM filepath = 'dicom-' + filename filepath = os.path.join(op, filepath) filepath = misc.suggest_filename(filepath) output_dicom_dir = filepath #import ipdb; ipdb.set_trace() # BREAKPOINT overlays = { 3: (data['segmentation'] == args['output_label']).astype(np.int8) } saveOverlayToDicomCopy(oseg.metadata['dcmfilelist'], output_dicom_dir, overlays, data['crinfo'], data['orig_shape'])
def save_config(cfg, filename): cfg misc.obj_to_file(cfg, filename, filetype="yaml")
def generate_input_yaml(sliver_dir, pklz_dir, sliver_ext='*seg0*.mhd', pklz_ext='*0*.pklz', yaml_filename=None, return_dir_lists=False ): """ Function pair files from different directory by numer in format g0XX. It is ok for seg001 and orig001 too. If there is given some yaml_filename, it is created. """ import glob import re if not os.path.exists(sliver_dir): raise IOError("Directory with reference data (" + sliver_dir + ") does not exists") if not os.path.exists(pklz_dir): raise IOError("Directory with input pklz data (" + pklz_dir + ") does not exists") onlyfiles1 = glob.glob(os.path.join(sliver_dir, sliver_ext)) onlyfiles2 = glob.glob(os.path.join(pklz_dir, pklz_ext)) onlyfiles1.sort() onlyfiles2.sort() if len(onlyfiles1) == 0: raise IOError("Directory with reference data (%s) appears to be empty" % (sliver_dir)) if len(onlyfiles2) == 0: raise IOError("Directory with pklz data (%s) appears to be empty" % (pklz_dir)) logger.debug('sliver files \n' + str(onlyfiles1)) logger.debug('pklz files \n' + str(onlyfiles2)) data = [] for flns in onlyfiles1: base, flnsh = os.path.split(os.path.normpath(flns)) pattern = re.search('(g0[0-9]{2})', flnsh) if pattern: pattern = pattern.group(1) logger.debug('pattern1 ' + pattern) for flnp in onlyfiles2: base, flnph = os.path.split(os.path.normpath(flnp)) pt = re.match('.*' + pattern + '.*', flnph) if pt: data.append({ 'sliverseg': flns, 'ourseg': flnp }) inputdata = { 'basedir': '', 'data': data } retval = [] if yaml_filename is None: retval.append(inputdata) else: misc.obj_to_file(inputdata, yaml_filename, filetype='yaml') if return_dir_lists: retval.append(onlyfiles1) retval.append(onlyfiles2) if len(retval) > 1: return tuple(retval) elif len(retval) == 1: return retval[0]
def main(): # # logger = logging.getLogger() # logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) # logger.debug('input params') parser = argparse.ArgumentParser( description='Compute features on liver and other tissue.') parser.add_argument('-tr', '--training_yaml_path', help='Input yaml file.' + " You can check sample with -si parameter.", default="20130919_liver_statistics.yaml") parser.add_argument('-te', '--testing_yaml_path', help='Input yaml file.' + " You can check sample with -si parameter.", default=None) parser.add_argument('-si', '--sampleInput', action='store_true', help='generate sample intput data', default=False) parser.add_argument('-v', '--visualization', action='store_true', help='Turn on visualization', default=False) parser.add_argument('-fc', '--features_classifs', action='store_true', help='Read features and classifs list from file', default=False) parser.add_argument('-o', '--output', help='output file', default="20130919_liver_statistics_results.pkl") parser.add_argument('-t', '--train', help='Training', default=False, action='store_true') parser.add_argument( '-cl', '--classifers', help='classifer by string: "SVC", or "GaussianNB", ...', nargs='+', type=str, default=['SVC']) parser.add_argument('-fe', '--features', help='features by string: "hist", or "glcm", ...', nargs='+', type=str, default=['hist']) args = parser.parse_args() if args.sampleInput: sample_input_data() # input parser # path_to_yaml = os.path.join(path_to_script, args.input) # training_yaml_path = args.training_yaml_path # testing_yaml_path = args.testing_yaml_path if args.testing_yaml_path is None: print('testing is same as training') args.testing_yaml_path = args.training_yaml_path # write_csv(fvall) gf = tfeat.GaborFeatures() # noqa glcmf = tfeat.GlcmFeatures() # noqa haralick = tfeat.HaralickFeatures() # noqa list_of_feature_fcn = prepared_texture_features_by_string(args.features) list_of_classifiers = prepared_classifiers_by_string(args.classifers) tile_shape = [10, 50, 50] if args.features_classifs: import features_classifs featrs_plus_classifs = features_classifs.fc else: featrs_plus_classifs = make_product_list(list_of_feature_fcn, list_of_classifiers) result = experiment(args.training_yaml_path, args.testing_yaml_path, featrs_plus_classifs, tile_shape=tile_shape, use_voxelsize_norm=True, working_voxelsize_mm=[1, 1, 1], visualization=args.visualization, train=args.train) # Ukládání výsledku do souboru output_file = os.path.join(path_to_script, args.output) misc.obj_to_file(result, output_file, filetype='pickle')
def save_labels(inputfile, data3d, segmentation, feature_fcn, feature_fcn_params, classif_inst, classif_fcn_plus_params, voxelsize, tile_shape, use_voxelsize_norm): """ classif_fcn_plus_params: used for directory name """ path_directory = 'lisa_data/' subdirectory = 'experiments/' # actual = os.getcwd() path_directory = os.path.join(os.path.expanduser('~'), path_directory) # Ukládání výsledku do souboru if (os.path.exists(path_directory) is False): os.makedirs(path_directory) path_subdirectory = os.path.join(path_directory, subdirectory) if (os.path.exists(path_subdirectory) is False): os.makedirs(path_subdirectory) # TODO : Main Saving Loop ... dataplus = [] slab = {} slab['liver'] = 1 slab['none'] = 0 # there are two possible ways for fature_fcn. One is function, other is object # with "description" attribute and function 'features' if hasattr(feature_fcn, 'description'): feature_fcn_description = feature_fcn.description else: feature_fcn_description = str(feature_fcn) dataplus = { # 'segmentation': segmentation[:10, :10, :10].astype(np.int8), # 'data3d': data3d[:10, :10, :10].astype(np.int16), 'segmentation': segmentation.astype(np.int8), 'data3d': data3d.astype(np.int16), 'processing_information': { 'feature_fcn': feature_fcn_description, 'feature_fcn_params': str(feature_fcn_params), 'classif_fcn_name': str(classif_inst.__class__.__name__), 'classif_fcn': str(classif_inst) }, 'voxelsize_mm': voxelsize, 'slab': slab } # inputfilename = path_leaf(inputfile) str_feat_params = __struct_to_string_for_filename(feature_fcn_params) str_clf_params = __struct_to_string_for_filename(str(classif_inst)) str_clf_params = __struct_to_string_for_filename( str(classif_fcn_plus_params)) vsnorm_string = "vsnF_" if use_voxelsize_norm: vsnorm_string = "vsnT_" # construct filename experiment_dirname =\ feature_fcn_description + '_' + \ str_feat_params + '_' +\ vsnorm_string +\ classif_inst.__class__.__name__ + '_' + \ str_clf_params + '_' +\ str(tile_shape[0]) + '_' + str(tile_shape[1]) + '_' +\ str(tile_shape[2]) filename = __struct_to_string_for_filename(inputfile + '.pklz') path_to_file = os.path.join(path_subdirectory, experiment_dirname, filename) misc.obj_to_file(dataplus, path_to_file, filetype='pklz') # os.chdir(actual) # save info to dir info = { 'feature_fcn': feature_fcn_description, 'feature_fcn_params': str(feature_fcn_params), 'classif_fcn': str(classif_inst) } infofilepath = os.path.join(path_subdirectory, experiment_dirname, 'info.yaml') misc.obj_to_file(info, infofilepath, 'yaml')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser parser = argparse.ArgumentParser(description= 'Segmentation of bones, lungs and heart.') parser.add_argument('-i','--datadir', default=None, help='path to data dir') parser.add_argument('-o','--output', default=None, help='output file') parser.add_argument('-d', '--debug', action='store_true', help='run in debug mode') parser.add_argument('-ss', '--segspine', action='store_true', help='run spine segmentaiton') parser.add_argument('-sl', '--seglungs', action='store_true', help='run lungs segmentation') parser.add_argument('-sh', '--segheart', action='store_true', help='run heart segmentation') parser.add_argument('-sb', '--segbones', action='store_true', help='run bones segmentation') parser.add_argument('-exd', '--exampledata', action='store_true', help='run unittest') parser.add_argument('-so', '--show_output', action='store_true', help='Show output data in viewer') args = parser.parse_args() if args.debug: logger.setLevel(logging.DEBUG) if args.exampledata: args.dcmdir = '../sample_data/liver-orig001.raw' # if dcmdir == None: #else: #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/') #data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir) data3d , metadata = io3d.datareader.read(args.datadir) sseg = SupportStructureSegmentation(data3d = data3d, voxelsize_mm = metadata['voxelsize_mm'], ) #sseg.orientation() if args.segbones: sseg.bone_segmentation() if args.segspine: sseg.spine_segmentation() if args.seglungs or args.segheart: sseg.lungs_segmentation() if args.segheart: sseg.heart_segmentation() sseg.resize_back_to_orig() #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) ) #igc = pycut.ImageGraphCut(data3d, zoom = 0.5) #igc.interactivity() #igc.make_gc() #igc.show_segmentation() # volume #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm) #pyed = sed3.sed3(oseg.data3d, contour = oseg.segmentation) #pyed.show() if args.show_output: sseg.visualization() #savestring = raw_input ('Save output data? (y/n): ') #sn = int(snstring) if args.output is not None: # savestring in ['Y','y']: import misc data = sseg.export() misc.obj_to_file(data, args.output, filetype = 'pickle')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser params = {'datadir': None, 'working_voxelsize_mm': 3} dirpath = os.path.join(path_to_script, "../../../data/medical/data_orig/volumetrie") experiment_results = {'params': params, 'dirpath': dirpath, 'volume_l': {}} output_dirpath = os.path.join(path_to_script, '../../../data/medical') dirlist = experiments.get_subdirs(dirpath) for key in dirlist: print key # import pdb; pdb.set_trace() try: dirname = dirlist[key]['abspath'] params['datadir'] = dirname oseg = organ_segmentation.OrganSegmentation(**params) oseg.interactivity() print("Volume " + str(oseg.get_segmented_volume_size_mm3() / 1000000.0) + ' [l]') volume_l = (oseg.get_segmented_volume_size_mm3() / 1000000.0) experiment_results['volume_l'][key] = volume_l head, teil = os.path.split(dirname) filename_organ = os.path.join(output_dirpath, teil) data = oseg.export() misc.obj_to_file(data, filename_organ + "-organ.pkl", filetype='pickle') #misc.obj_to_file(data, "organ.pkl", filetype='pickle') misc.obj_to_file(oseg.get_iparams(), filename_organ + '-iparams.pkl', filetype='pickle') misc.obj_to_file(experiment_results, filename_organ + "-info.yaml", filetype='yaml') except: print 'Selhani, pokracujeme dal' print traceback.format_exc() import pdb pdb.set_trace() misc.obj_to_file(experiment_results, "results.yaml", filetype='yaml')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser parser = argparse.ArgumentParser( description='Segment vessels from liver \n\ \npython organ_segmentation.py\n\ \npython organ_segmentation.py -mroi -vs 0.6') parser.add_argument('-dd', '--dcmdir', default=None, help='path to data dir') parser.add_argument('-d', '--debug', action='store_true', help='run in debug mode') parser.add_argument('-vs', '--voxelsize_mm', default='3', type=str, help='Insert working voxelsize. It can be number or \ array of three numbers. \n \ -vs 3 \n \ -vs [3,3,5]') parser.add_argument('-mroi', '--manualroi', action='store_true', help='manual crop before data processing') parser.add_argument( '-iparams', '--iparams', default=None, help='filename of ipars file with stored interactivity') parser.add_argument('-t', '--tests', action='store_true', help='run unittest') parser.add_argument('-tx', '--textureanalysis', action='store_true', help='run with texture analysis') parser.add_argument('-exd', '--exampledata', action='store_true', help='run unittest') parser.add_argument('-ed', '--editdata', action='store_true', help='Run data editor') parser.add_argument('-so', '--show_output', action='store_true', help='Show output data in viewer') parser.add_argument('-ss', '--segmentation_smoothing', action='store_true', help='Smoothing of output segmentation', default=False) args = parser.parse_args() # voxelsize_mm can be number or array args.voxelsize_mm = np.array(eval(args.voxelsize_mm)) if args.debug: logger.setLevel(logging.DEBUG) if args.tests: # hack for use argparse and unittest in one module sys.argv[1:] = [] unittest.main() sys.exit() if args.exampledata: args.dcmdir = '../sample_data/\ matlab/examples/sample_data/DICOM/digest_article/' if args.iparams is not None: args.iparams = misc.obj_from_file(args.iparams) #else: #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/') #data3d, metadata = dcmreaddata.dcm_read_from_dir() oseg = OrganSegmentation(args.dcmdir, working_voxelsize_mm=args.voxelsize_mm, manualroi=args.manualroi, texture_analysis=args.textureanalysis, edit_data=args.editdata, smoothing=args.action_segmentation_smoothing, iparams=args.iparams) oseg.interactivity() #igc = pycut.ImageGraphCut(data3d, zoom = 0.5) #igc.interactivity() #igc.make_gc() #igc.show_segmentation() # volume #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm) print("Volume " + str(oseg.get_segmented_volume_size_mm3() / 1000000.0) + ' [l]') #pyed = sed3.sed3(oseg.data3d, contour = # oseg.segmentation) #pyed.show() if args.show_output: oseg.show_output() savestring = raw_input('Save output data? (y/n): ') #sn = int(snstring) if savestring in ['Y', 'y']: data = oseg.export() misc.obj_to_file(data, "organ.pkl", filetype='pickle') misc.obj_to_file(oseg.get_ipars(), 'ipars.pkl', filetype='pickle') #output = segmentation.vesselSegmentation(oseg.data3d, # oseg.orig_segmentation) def checkSegData(self): if self.segmentation_data is None: self.statusBar().showMessage('No SEG data!') return nzs = self.segmentation_data.nonzero() nn = nzs[0].shape[0] if nn > 0: aux = ' voxels = %d, volume = %.2e mm3' % (nn, nn * self.voxel_volume) self.setLabelText(self.text_seg_data, aux) self.setLabelText(self.text_mesh_in, 'segmentation data') self.statusBar().showMessage('Ready') else: self.statusBar().showMessage('Zero SEG data!') def autoSeg(self): if self.dcm_3Ddata is None: self.statusBar().showMessage('No DICOM data!') return igc = pycut.ImageGraphCut(self.dcm_3Ddata, voxelsize=self.voxel_size_mm) pyed = QTSeedEditor(self.dcm_3Ddata, seeds=self.segmentation_seeds, modeFun=igc.interactivity_loop, voxelVolume=self.voxel_volume) pyed.exec_() self.segmentation_data = pyed.getContours() self.segmentation_seeds = pyed.getSeeds() self.checkSegData()
#print np.max(output) #import pdb; pdb.set_trace() #data = {} #data['data3d'] = oseg.data3d #data['crinfo'] = oseg.crinfo #data['segmentation'] = oseg.segmentation data['segmentation'][output] = data['slab']['porta'] #data['slab'] = slab pyed = sed3.sed3(data['data3d'], contour=data['segmentation'] == data['slab']['porta']) pyed.show() #pyed = sed3.sed3(data['segmentation']) #pyed.show() # Uvolneni pameti garbage.collect() if args.outputfile == None: savestring = raw_input('Save output data? (y/n): ') #sn = int(snstring) if savestring in ['Y', 'y']: pth, filename = os.path.split(os.path.normpath(args.inputfile)) misc.obj_to_file(data, defaultoutputfile + '-' + filename, filetype='pickle') else: misc.obj_to_file(data, args.outputfile, filetype='pickle')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') # input parser parser = argparse.ArgumentParser(description= 'Segmentation of bones, lungs and heart.') parser.add_argument('-dd','--dcmdir', default=None, help='path to data dir') parser.add_argument('-d', '--debug', action='store_true', help='run in debug mode') parser.add_argument('-exd', '--exampledata', action='store_true', help='run unittest') parser.add_argument('-so', '--show_output', action='store_true', help='Show output data in viewer') args = parser.parse_args() if args.debug: logger.setLevel(logging.DEBUG) if args.exampledata: args.dcmdir = '../sample_data/matlab/examples/sample_data/DICOM/digest_article/' # if dcmdir == None: #else: #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/') #data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir) reader = dcmr.DicomReader(args.datadir) self.data3d = reader.get_3Ddata() self.metadata = reader.get_metaData() sseg = SupportStructureSegmentation(data3d = data3d, voxelsize_mm = metadata['voxelsize_mm'], ) sseg.bone_segmentation() #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) ) #igc = pycut.ImageGraphCut(data3d, zoom = 0.5) #igc.interactivity() #igc.make_gc() #igc.show_segmentation() # volume #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm) #pyed = py3DSeedEditor.py3DSeedEditor(oseg.data3d, contour = oseg.segmentation) #pyed.show() if args.show_output: sseg.show_output() savestring = raw_input ('Save output data? (y/n): ') #sn = int(snstring) if savestring in ['Y','y']: import misc data = sseg.export() misc.obj_to_file(data, "organ.pickle", filetype = 'pickle')
def writeSkeletonToPickle(self, filename='skel.pkl'): misc.obj_to_file(self.sklabel, filename=filename, filetype='pickle')
def main(): #logger = logging.getLogger(__name__) logger = logging.getLogger() logger.setLevel(logging.WARNING) ch = logging.StreamHandler() logger.addHandler(ch) #logger.debug('input params') parser = argparse.ArgumentParser( description='Compute features on liver and other tissue.') parser.add_argument('-si', '--sampleInput', action='store_true', help='generate sample intput data', default=False) parser.add_argument('-v', '--visualization', action='store_true', help='Turn on visualization', default=False) parser.add_argument('-i', '--input', help='input yaml file', default="20130919_liver_statistics.yaml") parser.add_argument('-o', '--output', help='output file', default="20130919_liver_statistics_results.pkl") parser.add_argument('-t', '--train', help='Training', default=False, action='store_true') args = parser.parse_args() if args.sampleInput: sample_input_data() # input parser #path_to_yaml = os.path.join(path_to_script, args.input) path_to_yaml = args.input #write_csv(fvall) list_of_feature_fcn = [feat_hist] from sklearn import svm from sklearn.naive_bayes import GaussianNB list_of_classifiers = [svm.SVC, GaussianNB] tile_shape = [1, 100, 100] featrs_plus_classifs = make_product_list(list_of_feature_fcn, list_of_classifiers) result = experiment(path_to_yaml, featrs_plus_classifs, tile_shape=tile_shape, visualization=args.visualization, train=args.train) # Ukládání výsledku do souboru output_file = os.path.join(path_to_script, args.output) misc.obj_to_file(result, output_file, filetype='pickle')