def precompute_flann(data, cache_dir=None, uid='', flann_params=None, force_recompute=False): ''' Tries to load a cached flann index before doing anything''' print('[algos] precompute_flann(%r): ' % uid) cache_dir = '.' if cache_dir is None else cache_dir # Generate a unique filename for data and flann parameters fparams_uid = helpers.remove_chars(str(flann_params.values()), ', \'[]') data_uid = helpers.hashstr_arr(data, 'dID') # flann is dependent on the data flann_suffix = '_' + fparams_uid + '_' + data_uid + '.flann' # Append any user labels flann_fname = 'flann_index_' + uid + flann_suffix flann_fpath = os.path.normpath(join(cache_dir, flann_fname)) # Load the index if it exists flann = pyflann.FLANN() load_success = False if helpers.checkpath(flann_fpath) and not force_recompute: try: #print('[algos] precompute_flann(): #trying to load: %r ' % flann_fname) flann.load_index(flann_fpath, data) print('[algos]...flann cache hit') load_success = True except Exception as ex: print('[algos] precompute_flann(): ...cannot load index') print('[algos] precompute_flann(): ...caught ex=\n%r' % (ex,)) if not load_success: # Rebuild the index otherwise with helpers.Timer(msg='compute FLANN', newline=False): flann.build_index(data, **flann_params) print('[algos] precompute_flann(): save_index(%r)' % flann_fname) flann.save_index(flann_fpath) return flann
def get_uid_list(sv_cfg): if not sv_cfg.sv_on or sv_cfg.xy_thresh is None: return ['_SV()'] sv_uid = ['_SV('] sv_uid += [str(sv_cfg.nShortlist)] sv_uid += [',' + str(sv_cfg.xy_thresh)] scale_thresh = (sv_cfg.scale_thresh_low, sv_cfg.scale_thresh_high) scale_str = helpers.remove_chars(str(scale_thresh), ' ()') sv_uid += [',' + scale_str.replace(',', '_')] sv_uid += [',cdl' * sv_cfg.use_chip_extent] # chip diag len sv_uid += [',aff' * sv_cfg.just_affine] # chip diag len sv_uid += [',' + sv_cfg.prescore_method] sv_uid += [')'] return sv_uid
def precompute_flann(data, cache_dir=None, uid='', flann_params=None, force_recompute=False): ''' Tries to load a cached flann index before doing anything''' print('[algos] precompute_flann(%r): ' % uid) cache_dir = '.' if cache_dir is None else cache_dir # Generate a unique filename for data and flann parameters fparams_uid = helpers.remove_chars(str(flann_params.values()), ', \'[]') data_uid = helpers.hashstr_arr(data, 'dID') # flann is dependent on the data flann_suffix = '_' + fparams_uid + '_' + data_uid + '.flann' # Append any user labels flann_fname = 'flann_index_' + uid + flann_suffix flann_fpath = os.path.normpath(join(cache_dir, flann_fname)) # Load the index if it exists flann = pyflann.FLANN() load_success = False if helpers.checkpath(flann_fpath) and not force_recompute: try: #print('[algos] precompute_flann(): #trying to load: %r ' % flann_fname) flann.load_index(flann_fpath, data) print('[algos]...flann cache hit') load_success = True except Exception as ex: print('[algos] precompute_flann(): ...cannot load index') print('[algos] precompute_flann(): ...caught ex=\n%r' % (ex, )) if not load_success: # Rebuild the index otherwise with helpers.Timer(msg='compute FLANN', newline=False): flann.build_index(data, **flann_params) print('[algos] precompute_flann(): save_index(%r)' % flann_fname) flann.save_index(flann_fpath) return flann