Source code for vtool._pyflann_backend
# -*- coding: utf-8 -*-
"""
abstract which pyflann implementation is used
from vtool._pyflann_backend import pyflann
"""
import ubelt as ub
__all__ = ['pyflann', 'FLANN_CLS']
try:
import pyflann
FLANN_CLS = pyflann.FLANN
except ImportError:
print('no pyflann, using cv2.flann_Index')
import cv2
pyflann = None
class _CV2_FLANN_CLS:
def __init__(self):
self._internal = cv2.flann_Index()
self.params = {}
def build_index(self, features, **flann_params):
# self._internal.build(features, flann_params, distType)
self._internal.build(features, flann_params)
def save_index(self, fpath):
# self._internal.build(features, flann_params, distType)
self._internal.save(fpath)
def nn_index(self, query, num_neighbors, checks=ub.NoParam):
# knnSearch(query, knn[, indices[, dists[, params]]]) -> indices, dists
return self._internal.knnSearch(query, knn=num_neighbors)
FLANN_CLS = _CV2_FLANN_CLS
if 0:
print('no pyflann, using dummy index')
class _DUMMY_FLANN_CLS:
def __init__(self):
raise RuntimeError('flann not installed')
FLANN_CLS = _DUMMY_FLANN_CLS
print('VTOOL BACKEND FOR pyflann = {!r}'.format(pyflann))
print('VTOOL BACKEND FOR FLANN_CLS = {!r}'.format(FLANN_CLS))