def __init__(nn_index, hs, cx_list):
        import algos

        cx2_desc = hs.feats.cx2_desc
        # Make unique id for indexed descriptors
        feat_uid = hs.prefs.feat_cfg.get_uid()
        sample_uid = helpers.hashstr_arr(cx_list, "dcxs")
        uid = "_" + sample_uid + feat_uid
        # Number of features per sample chip
        sx2_nFeat = [len(cx2_desc[cx]) for cx in iter(cx_list)]
        # Inverted index from indexed descriptor to chipx and featx
        _ax2_cx = [[cx] * nFeat for (cx, nFeat) in izip(cx_list, sx2_nFeat)]
        _ax2_fx = [range(nFeat) for nFeat in iter(sx2_nFeat)]
        ax2_cx = np.array(list(chain.from_iterable(_ax2_cx)))
        ax2_fx = np.array(list(chain.from_iterable(_ax2_fx)))
        # Aggregate indexed descriptors into continuous structure
        ax2_desc = np.vstack([cx2_desc[cx] for cx in cx_list if len(cx2_desc[cx]) > 0])
        # Build/Load the flann index
        flann_params = {"algorithm": "kdtree", "trees": 4}
        precomp_kwargs = {
            "cache_dir": hs.dirs.cache_dir,
            "uid": uid,
            "flann_params": flann_params,
            "force_recompute": hs.args.nocache_flann,
        }
        flann = algos.precompute_flann(ax2_desc, **precomp_kwargs)
        # ----
        # Agg Data
        nn_index.ax2_cx = ax2_cx
        nn_index.ax2_fx = ax2_fx
        nn_index.ax2_data = ax2_desc
        nn_index.flann = flann
Exemple #2
0
 def __init__(nn_index, hs, cx_list):
     import algos
     cx2_desc = hs.feats.cx2_desc
     # Make unique id for indexed descriptors
     feat_uid = hs.prefs.feat_cfg.get_uid()
     sample_uid = helpers.hashstr_arr(cx_list, 'dcxs')
     uid = '_' + sample_uid + feat_uid
     # Number of features per sample chip
     sx2_nFeat = [len(cx2_desc[cx]) for cx in iter(cx_list)]
     # Inverted index from indexed descriptor to chipx and featx
     _ax2_cx = [[cx] * nFeat for (cx, nFeat) in izip(cx_list, sx2_nFeat)]
     _ax2_fx = [range(nFeat) for nFeat in iter(sx2_nFeat)]
     ax2_cx = np.array(list(chain.from_iterable(_ax2_cx)))
     ax2_fx = np.array(list(chain.from_iterable(_ax2_fx)))
     # Aggregate indexed descriptors into continuous structure
     ax2_desc = np.vstack(
         [cx2_desc[cx] for cx in cx_list if len(cx2_desc[cx]) > 0])
     # Build/Load the flann index
     flann_params = {'algorithm': 'kdtree', 'trees': 4}
     precomp_kwargs = {
         'cache_dir': hs.dirs.cache_dir,
         'uid': uid,
         'flann_params': flann_params,
         'force_recompute': hs.args.nocache_flann
     }
     flann = algos.precompute_flann(ax2_desc, **precomp_kwargs)
     #----
     # Agg Data
     nn_index.ax2_cx = ax2_cx
     nn_index.ax2_fx = ax2_fx
     nn_index.ax2_data = ax2_desc
     nn_index.flann = flann
Exemple #3
0
def precompute_index_vsmany(hs):
    print(textwrap.dedent('''
    =============================
    [mc2] Building one-vs-many index
    ============================='''))
    # Build (or reload) one vs many flann index
    cache_dir  = hs.dirs.cache_dir
    ax2_cx, ax2_fx, ax2_desc = aggregate_descriptors_vsmany(hs)
    # Precompute flann index
    matcher_uid = params.get_matcher_uid()
    #checks = params.VSMANY_FLANN_PARAMS['checks']
    vsmany_flann_params = params.VSMANY_FLANN_PARAMS
    vsmany_flann = algos.precompute_flann(ax2_desc, 
                                          cache_dir=cache_dir,
                                          uid=matcher_uid,
                                          flann_params=vsmany_flann_params)
    # Return a one-vs-many structure
    vsmany_args = VsManyArgs(vsmany_flann, ax2_desc, ax2_cx, ax2_fx)
    return vsmany_args