Python lmdb

* * 전재 또는 인용 출처, ayst 123 칼럼 (http://blog.csdn.net/ayst123/article/details/44077903감사합니다!
최근 leveldb 에서 lmdb 로 이동 하려 면 python 으로 이 루어 져 야 합 니 다.caffe 를 살 펴 보면 db 에 저 장 된 것 은 모두 datum format 이기 때문에 datum 은 중간 중심 이 되 었 다.
python 으로 levedb 함 수 를 호출 합 니 다. 여 기 는 lmdb documens 입 니 다.
write
db_img = lmdb.Environment(lmdb_img_name,map_size=int(1e12))
txn_img = db_img.begin(write=True,buffers=True)
datum_img = getImgDatum(img_path)
txn_img.put(key,datum_img.SerializeToString())
txn_img.commit()
db_img.close()

여기, lmdb 의 instance, db 를 먼저 만 듭 니 다.img。 그리고 txn 을 시작 합 니 다.put 저장, 마지막 으로 commt () 에 주의 하 십시오.그렇지 않 으 면 저장 되 지 않 았 습 니 다. 생 성 된 lmdb 파일 을 확인 하면 알 수 있 습 니 다.마지막, close ()
여기 서 datum 을 생 성 하 는 것 은 caffe 자체 함수 로 io. py 를 만 드 는 것 으로 caffe. io. array 라 고 합 니 다.to_datum, array 를 datum 으로 변환 합 니 다.
Note:
datum 을 저장 할 때 는 반드시 datum. SerializeToString () 을 사용 하여 string () 으로 만들어 야 합 니 다.
세그먼트 쓰기
for ind,obj in enumerate(list):
    if ind%100=0:
        txn.commit()
        txn = env.begin(write=True)

txn.commit()
env.close()

매번 commt 후, txn = env. begin (write = True) for loop 바깥 마지막 commt 를 다시 정의 해 야 합 니 다.
Read
img_lmdb = imdb.open("name")
txn= img_lmdb.begin()
cursor = txn.cursor()
cursor.iternext()
key = cursor.key()
value = cursor.value()

datum = caffe_pb2.Datum()
datum.ParseFromString(value)

Note:
cursor 첫 번 째 는 비어 있 고, iternext () 다음 은 첫 번 째 값 입 니 다.
순환 하 다.
txn = … cursor = txn.cursor() for ( idx, (key, value) ) in enumerate(cursor): …………….
순환 해서 찾 을 수 있어 요.
* * 전재 또는 인용 출처, ayst 123 칼럼 (http://blog.csdn.net/ayst123/article/details/44077903감사합니다!

좋은 웹페이지 즐겨찾기