Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
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