Я сгенерировал базу данных LMDB, используя вилку SSD-Caffe здесь .Я успешно сгенерировал каталоги VCD LMDB trainval / test LMDB и могу тренировать модель.
Однако я хочу знать, как получить доступ к содержимому базы данных.Основываясь на ответе здесь , я использую этот код:
import caffe
import lmdb
import PIL.Image
from StringIO import StringIO
import numpy as np
lmdb_file = 'data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb/'
cursor = lmdb.open(lmdb_file, readonly=True).begin().cursor()
datum = caffe.proto.caffe_pb2.Datum()
for key, value in cursor:
print(key)
datum.ParseFromString(value)
ss = StringIO()
ss.write(datum.data)
ss.seek(0)
print(np.array(PIL.Image.open(ss)))
Однако, это не удается.Переменные key
кажутся правильными (я получаю такие значения, как '00000000_VOC2007/JPEGImages/002378.jpg'
. Однако переменная value
дает строку байтов, такую как: '\n\xee\xa7\t\x08\x03\x10\xf7\x02\x18\xf4\x03"\xd5\xa7\...'
. Это выдает ошибку в PIL.Image.open(ss))
:
*** IOError: cannot identify image file <StringIO.StringIO instance at 0x7f32749a1dd0>
Следует отметить, что база данных LMDB содержит как (1) изображения jpg, так и (2) аннотации ограничивающего прямоугольника. Я хотел бы восстановить оба!
Спасибо!