Beispiel #1
0
class Rtree2D(object):
    """Wrapper of `rtree.Index` for supporting friendly 2d operations.

    Also forces the uniqueness of the `id` parameter, which is different from
    the rtree module's behavior.
    """

    def __init__(self):
        self._index = Rtree()
        self._locations = {}

    @staticmethod
    def to_coords(location):
        return (location[0], location[1], location[0], location[1])

    def keys(self):
        return self._locations.keys()

    def get(self, id, objects=False):
        return self._locations.get(id)

    def set(self, id, location=None, state=None, obj=None):
        # Clean up previous value first if any
        old = self._locations.get(id)
        if old is not None:
            self._index.delete(id, self.to_coords(old[0]))

        if old and state is None:
            state = old[1]

        if old and location is None:
            location = old[0]

        self._locations[id] = (location, state)
        self._index.insert(id, self.to_coords(location), obj=obj)

    def update(self, id, state, obj=None):
        old = self._locations.get(id)
        if old is not None:
            self._index.delete(id, self.to_coords(old[0]))
            self._locations[id] = (old[0], state)
            self._index.insert(id, self.to_coords(old[0]), obj=obj) 

    def remove(self, id):
        self._index.delete(id, self.to_coords(self._locations[id][0]))
        del self._locations[id]

    def nearest(self, location, count=1, objects=False, max_distance=None):
        ids = self._index.nearest(self.to_coords(location), num_results=count,
                                  objects=objects)
        if max_distance is not None:
            ids = [(id_, self._locations[id_][1]) for id_ in ids
                   if distance(self._locations[id_][0], location) <= max_distance]
        return ids
Beispiel #2
0
    hasData = property( lambda self: RTreePage.objects(name=self.name).first() is not None )

if __name__=='__main__':
    settings = Property()
    settings.writethrough= True
    settings.buffering_capacity=1

    storage = MongoStorage('test')
    storage.clear()
    r = Rtree( storage, properties=settings)

    r.add(123,(0,0,1,1))
    
    print "test 1 should be true"
    item = list(r.nearest((0,0), 1, objects=True))[0]
    print item.id
    print r.valid()

    print "test 2 should be true"
    r.delete(123, (0,0,1,1))
    print r.valid()

    print "test 3 should be true"
    r.clearBuffer()
    print r.valid()

    del r

    print "test 4 should be false"
    storage.clear()
Beispiel #3
0
        lambda self: RTreePage.objects(name=self.name).first() is not None)


if __name__ == '__main__':
    settings = Property()
    settings.writethrough = True
    settings.buffering_capacity = 1

    storage = MongoStorage('test')
    storage.clear()
    r = Rtree(storage, properties=settings)

    r.add(123, (0, 0, 1, 1))

    print "test 1 should be true"
    item = list(r.nearest((0, 0), 1, objects=True))[0]
    print item.id
    print r.valid()

    print "test 2 should be true"
    r.delete(123, (0, 0, 1, 1))
    print r.valid()

    print "test 3 should be true"
    r.clearBuffer()
    print r.valid()

    del r

    print "test 4 should be false"
    storage.clear()
Beispiel #4
0
def searching(feature_vectors_database, feature_vectors_retrieval,
              similarity_metric, image_paths, retrieval_number, file,
              list_of_parameters, feature_extraction_method, path_database):
    '''
    feature_vectors: atriutos calculados
    labels: label de cada classe
    similarity_metric: qual medida utilizar
    recuperados as k imagens com menor distancia. Se k = 0, entao o valor eh
    setado como sendo o tamanho da classe da imagem
    '''

    #name to save the pickle file
    parameters_name = ""
    for parameter in list_of_parameters:
        parameters_name = parameters_name + "_" + parameter

    file = path_database + "features/sortingRTree" + "_" + feature_extraction_method + parameters_name + '_' + similarity_metric

    feature_vectors_retrieval = preprocessing.scale(feature_vectors_retrieval)

    if not (os.path.isfile(file + '.dat')):

        #normalize signatures
        feature_vectors_database = preprocessing.scale(
            feature_vectors_database)

        # Create a N-Dimensional index
        p = index.Property()
        p.dimension = feature_vectors_database.shape[1]
        idx = index.Index(file, properties=p)

        # Create the tree
        for i, vector in enumerate(feature_vectors_database):
            idx.add(i, vector.tolist())

        #save_format = idx.dumps(idx)
        #with open(file, 'wb') as handle:
        #pickle.dump(save_format, handle)
    else:
        # Create a N-Dimensional index
        p = index.Property()
        p.dimension = feature_vectors_database.shape[1]
        idx = Rtree(file, properties=p)
        #with open(file, 'rb') as handle:
        #    idx = pickle.load(handle)

    # Find closests pair for the first N points
    ########### debug this part ###########
    small_distances = []
    for id1, query in enumerate(feature_vectors_retrieval):
        nearest = list(idx.nearest(query.tolist(), retrieval_number))
        small_distances.append(nearest)

    result = []
    for cont1, i in enumerate(small_distances):
        aux = []
        for j in i:
            aux.append(image_paths[j])
        result.append(aux)

    return result