caffe_lmdb.py 984 Bytes
Newer Older
dengjb's avatar
update  
dengjb committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import lmdb
from Caffe import caffe_pb2 as pb2
import numpy as np

class Read_Caffe_LMDB():
    def __init__(self,path,dtype=np.uint8):

        self.env=lmdb.open(path, readonly=True)
        self.dtype=dtype
        self.txn=self.env.begin()
        self.cursor=self.txn.cursor()

    @staticmethod
    def to_numpy(value,dtype=np.uint8):
        datum = pb2.Datum()
        datum.ParseFromString(value)
        flat_x = np.fromstring(datum.data, dtype=dtype)
        data = flat_x.reshape(datum.channels, datum.height, datum.width)
        label=flat_x = datum.label
        return data,label

    def iterator(self):
        while True:
            key,value=self.cursor.key(),self.cursor.value()
            yield self.to_numpy(value,self.dtype)
            if not self.cursor.next():
                return

    def __iter__(self):
        self.cursor.first()
        it = self.iterator()
        return it

    def __len__(self):
        return int(self.env.stat()['entries'])