|
# 提取mxnet格式的图片数据的通用方法
train_idx = "/home/dfy888/DataSets/faces_emore/train.idx"
train_rec = "/home/dfy888/DataSets/faces_emore/train.rec"
imgrec = mx.recordio.MXIndexedRecordIO(train_idx, train_rec, 'r')
# 0号索引放了 图片信息
img_info = imgrec.read_idx(0)
# unpack 打开信息
header, _ = mx.recordio.unpack(img_info)
print("0号索引放图片信息头:", header)
# 可以得到最大的id
max_idx = int(header.label[0])
print("最大=", max_idx)
# 随便取一个具体图片数据的索引
img_info = imgrec.read_idx(1000)
# unpack_img 打开图片
header, img = mx.recordio.unpack_img(img_info)
print("1000号索引放图片数据的信息头:", header)
label = int(header.label)
print("label是具体属于哪个人和 图片的类型:", label, type(img), img.shape)
# img = Image.fromarray(img)
0号索引放图片信息头: HEADER(flag=2, label=array([5822654., 5908396.], dtype=float32), id=0, id2=0)
最大= 5822654
1000号索引放图片数据的信息头: HEADER(flag=0, label=13.0, id=1000, id2=0)
label是具体属于哪个人和 图片的类型: 13 <class 'numpy.ndarray'> (112, 112, 3)
- train_idx = os.path.join(rec_path, "train.idx")
- train_rec = os.path.join(rec_path, "train.rec")
- # 正式读取mxnet个数的训练数据 : train.rec train.idx
- # 提取mxnet数据格式的通用方法
- imgrec = mx.recordio.MXIndexedRecordIO(train_idx, train_rec, 'r')
- # 0号索引放了 图片信息
- img_info = imgrec.read_idx(0)
- # unpack 打开信息
- header, _ = mx.recordio.unpack(img_info)
- # 可以得到最大的id
- max_idx = int(header.label[0])
- for idx in tqdm(range(1, max_idx)):
- # 索引从1开始
- img_info = imgrec.read_idx(idx)
- # unpack_img 打开图片
- header, img = mx.recordio.unpack_img(img_info)
- label = int(header.label)
- img = Image.fromarray(img)
- # label_path = save_path / str(label)
- # 这个label相对于 每个人的id 0 1 2 3 ... 同一个人会放同一个文件夹下
- label_path = os.path.join(save_path, str(label))
- os.makedirs(label_path, exist_ok=True)
- img.save(label_path + '/{}.jpg'.format(idx), quality=95)
复制代码
|
|