在网上看的这个项目不错,谁知道是个大坑,自己在第一步打标签就出现问题,一直以为自己环境问题,然而经过查找,
发现是下载的经过处理的文件scannet_frames_25k和源代码不匹配,
这个打标签的函数是按照原始文件从0到1开始读取的文件,所以他的id是从0到1,并不是我想象中的从文件读取文件名,所以当我们使用经过处理的文件时,它会提示找不到文件等等错误,所以当我们这种下载处理过的数据的时候,我们需要去项目的tools文件中找到simple_loader.py文件进行修改,只需要做一些简单修改,就在这里
def __init__(self, n_imgs, scene, data_path, max_depth, id_list=[]):
"""
Args:
"""
self.n_imgs = n_imgs
self.scene = scene
self.data_path = data_path
self.max_depth = max_depth
# if id_list is None:
#self.id_list = [i for i in range(n_imgs)]
for i in range(n_imgs):
id_list += [str(i).rjust(4, '0') + '00']
# else:
self.id_list = id_list
防止有人看不懂,下面是我完整的代码,
今天刚刚做到这一步,感兴趣的可以点个关注,后续更新
def __init__(self, n_imgs, scene, data_path, max_depth, id_list=[]):
"""
Args:
"""
self.n_imgs = n_imgs
self.scene = scene
self.data_path = data_path
self.max_depth = max_depth
# if id_list is None:
#self.id_list = [i for i in range(n_imgs)]
for i in range(n_imgs):
id_list += [str(i).rjust(4, '0') + '00']
# else:
self.id_list = id_list
def __len__(self):
return self.n_imgs
def __getitem__(self, id):
"""
Returns:
dict of meta data and images for a single frame
"""
id =self.id_list[id]
cam_pose = np.loadtxt(os.path.join(self.data_path, self.scene, "pose", str(id) + ".txt"))#, delimiter=' '
# Read depth image and camera pose
depth_im = cv2.imread(os.path.join(self.data_path, self.scene, "depth", str(id) + ".png"), -1).astype(
np.float32)
depth_im /= 1000. # depth is saved in 16-bit PNG in millimeters
depth_im[depth_im > self.max_depth] = 0
# Read RGB image
color_image = cv2.cvtColor(cv2.imread(os.path.join(self.data_path, self.scene, "color", str(id) + ".jpg")),
cv2.COLOR_BGR2RGB)
color_image = cv2.resize(color_image, (depth_im.shape[1], depth_im.shape[0]), interpolation=cv2.INTER_AREA)
return cam_pose, depth_im, color_image