| import lmdb |
| import numpy as np |
| import cv2 |
| import json |
|
|
| LMDB_ENVS = dict() |
| LMDB_HANDLES = dict() |
| LMDB_FILELISTS = dict() |
|
|
|
|
| def get_lmdb_handle(name): |
| global LMDB_HANDLES, LMDB_FILELISTS |
| item = LMDB_HANDLES.get(name, None) |
| if item is None: |
| env = lmdb.open(name, readonly=True, lock=False, readahead=False, meminit=False) |
| LMDB_ENVS[name] = env |
| item = env.begin(write=False) |
| LMDB_HANDLES[name] = item |
|
|
| return item |
|
|
|
|
| def decode_img(lmdb_fname, key_name): |
| handle = get_lmdb_handle(lmdb_fname) |
| binfile = handle.get(key_name.encode()) |
| if binfile is None: |
| print("Illegal data detected. %s %s" % (lmdb_fname, key_name)) |
| s = np.frombuffer(binfile, np.uint8) |
| x = cv2.cvtColor(cv2.imdecode(s, cv2.IMREAD_COLOR), cv2.COLOR_BGR2RGB) |
| return x |
|
|
|
|
| def decode_str(lmdb_fname, key_name): |
| handle = get_lmdb_handle(lmdb_fname) |
| binfile = handle.get(key_name.encode()) |
| string = binfile.decode() |
| return string |
|
|
|
|
| def decode_json(lmdb_fname, key_name): |
| return json.loads(decode_str(lmdb_fname, key_name)) |
|
|
|
|
| if __name__ == "__main__": |
| lmdb_fname = "/data/sda/v-yanbi/iccv21/LittleBoy_clean/data/got10k_lmdb" |
| '''Decode image''' |
| |
| |
| |
| '''Decode str''' |
| |
| |
| key_name = "train/GOT-10k_Train_000001/absence.label" |
| str_ = decode_str(lmdb_fname, key_name) |
| print(str_) |
|
|