def array_to_mtcnndatum(img_data, label, roi, pts=None): """Convert data to mtcnnDatum """ mtcnn_datum = caffe_pb2.MTCNNDatum() datum = caffe_pb2.Datum() datum = caffe.io.array_to_datum(img_data.transpose((2, 0, 1)), label) # rgb # datum = caffe.io.array_to_datum(img_data, label) #bgr # copy data mtcnn_datum.datum.data = datum.data mtcnn_datum.datum.label = datum.label mtcnn_datum.datum.channels = datum.channels mtcnn_datum.datum.height = datum.height mtcnn_datum.datum.width = datum.width # set roi data mtcnn_datum.rois.xmin = float(roi[0]) mtcnn_datum.rois.ymin = float(roi[1]) mtcnn_datum.rois.xmax = float(roi[2]) mtcnn_datum.rois.ymax = float(roi[3]) if pts is not None: mtcnn_datum.pts = pts return mtcnn_datum
num_for_each = 1 # create the lmdb file # map_size指的是数据库的最大容量,根据需求设置 if (lmdb_id == 0): lmdb_env_12 = lmdb.open(dir_prefix + 'mtcnn_train_12', map_size=1000000000) lmdb_txn_12 = lmdb_env_12.begin(write=True) elif (lmdb_id == 1): lmdb_env_24 = lmdb.open(dir_prefix + 'mtcnn_train_24', map_size=5000000000) lmdb_txn_24 = lmdb_env_24.begin(write=True) else: lmdb_env_48 = lmdb.open(dir_prefix + 'mtcnn_train_48', map_size=10000000000) lmdb_txn_48 = lmdb_env_48.begin(write=True) # 因为caffe中经常采用datum这种数据结构存储数据 mtcnn_datum = caffe_pb2.MTCNNDatum() for line_idx, annotation in enumerate(annotations): annotation = annotation.strip().split(' ') #每一行的数据以空白分隔符为界限 im_path = annotation[0] #图片的路径 bbox = map(float, annotation[1:]) if np.size(bbox) % 4 != 0: #标注数据有问题 print "the annotation data in line %d is invalid, please check file %s !" % ( line_idx + 1, anno_file) exit(-1) elif np.size(bbox) == 0: continue boxes = np.array(bbox, dtype=np.float32).reshape(-1, 4)