Merge branch 'master' of https://git.hofee.top/hofee/nbv_reconstruction
This commit is contained in:
commit
8d92676c34
@ -28,8 +28,8 @@ runner:
|
|||||||
datasets:
|
datasets:
|
||||||
OmniObject3d:
|
OmniObject3d:
|
||||||
#"/media/hofee/data/data/temp_output"
|
#"/media/hofee/data/data/temp_output"
|
||||||
root_dir: "/media/hofee/data/tempdir/test_real_output"
|
root_dir: "/media/hofee/data/data/box_output"
|
||||||
model_dir: "/media/hofee/data/tempdir/test_real"
|
model_dir: "/media/hofee/data/data/box_object_meshes"
|
||||||
from: 0
|
from: 0
|
||||||
to: -1 # -1 means end
|
to: -1 # -1 means end
|
||||||
#output_dir: "/media/hofee/data/data/label_output"
|
#output_dir: "/media/hofee/data/data/label_output"
|
||||||
|
@ -8,11 +8,11 @@ runner:
|
|||||||
root_dir: experiments
|
root_dir: experiments
|
||||||
generate:
|
generate:
|
||||||
port: 5004
|
port: 5004
|
||||||
from: 0
|
from: 590
|
||||||
to: 1 # -1 means all
|
to: 2000 # -1 means all
|
||||||
object_dir: /media/hofee/data/tempdir/test_real
|
object_dir: /media/hofee/data/data/scaled_object_meshes
|
||||||
table_model_path: /media/hofee/data/data/others/table.obj
|
table_model_path: /media/hofee/data/data/others/table.obj
|
||||||
output_dir: /media/hofee/data/tempdir/test_real_output
|
output_dir: /media/hofee/repository/full_data_output
|
||||||
binocular_vision: true
|
binocular_vision: true
|
||||||
plane_size: 10
|
plane_size: 10
|
||||||
max_views: 512
|
max_views: 512
|
||||||
@ -29,9 +29,9 @@ runner:
|
|||||||
max_radius: 0.3
|
max_radius: 0.3
|
||||||
display_object:
|
display_object:
|
||||||
min_x: 0
|
min_x: 0
|
||||||
max_x: 0.03
|
max_x: 0.05
|
||||||
min_y: 0
|
min_y: 0
|
||||||
max_y: 0.03
|
max_y: 0.05
|
||||||
min_z: 0.01
|
min_z: 0.01
|
||||||
max_z: 0.01
|
max_z: 0.01
|
||||||
random_rotation_ratio: 0.3
|
random_rotation_ratio: 0.3
|
||||||
|
@ -11,7 +11,7 @@ runner:
|
|||||||
root_dir: "experiments"
|
root_dir: "experiments"
|
||||||
|
|
||||||
generate:
|
generate:
|
||||||
voxel_threshold: 0.01
|
voxel_threshold: 0.005
|
||||||
overlap_threshold: 0.5
|
overlap_threshold: 0.5
|
||||||
filter_degree: 75
|
filter_degree: 75
|
||||||
to_specified_dir: False # if True, output_dir is used, otherwise, root_dir is used
|
to_specified_dir: False # if True, output_dir is used, otherwise, root_dir is used
|
||||||
|
@ -31,14 +31,17 @@ def save_scan_points(root, scene, scan_points: np.ndarray):
|
|||||||
scan_points_path = os.path.join(root,scene, "scan_points.txt")
|
scan_points_path = os.path.join(root,scene, "scan_points.txt")
|
||||||
save_np_pts(scan_points_path, scan_points)
|
save_np_pts(scan_points_path, scan_points)
|
||||||
|
|
||||||
def get_world_points(depth, mask, cam_intrinsic, cam_extrinsic):
|
def get_world_points(depth, mask, cam_intrinsic, cam_extrinsic, random_downsample_N):
|
||||||
z = depth[mask]
|
z = depth[mask]
|
||||||
i, j = np.nonzero(mask)
|
i, j = np.nonzero(mask)
|
||||||
x = (j - cam_intrinsic[0, 2]) * z / cam_intrinsic[0, 0]
|
x = (j - cam_intrinsic[0, 2]) * z / cam_intrinsic[0, 0]
|
||||||
y = (i - cam_intrinsic[1, 2]) * z / cam_intrinsic[1, 1]
|
y = (i - cam_intrinsic[1, 2]) * z / cam_intrinsic[1, 1]
|
||||||
|
|
||||||
points_camera = np.stack((x, y, z), axis=-1).reshape(-1, 3)
|
points_camera = np.stack((x, y, z), axis=-1).reshape(-1, 3)
|
||||||
points_camera_aug = np.concatenate((points_camera, np.ones((points_camera.shape[0], 1))), axis=-1)
|
sampled_target_points = PtsUtil.random_downsample_point_cloud(
|
||||||
|
points_camera, random_downsample_N
|
||||||
|
)
|
||||||
|
points_camera_aug = np.concatenate((sampled_target_points, np.ones((sampled_target_points.shape[0], 1))), axis=-1)
|
||||||
points_camera_world = np.dot(cam_extrinsic, points_camera_aug.T).T[:, :3]
|
points_camera_world = np.dot(cam_extrinsic, points_camera_aug.T).T[:, :3]
|
||||||
|
|
||||||
return points_camera_world
|
return points_camera_world
|
||||||
@ -96,15 +99,9 @@ def save_scene_data(root, scene, scene_idx=0, scene_total=1,file_type="txt"):
|
|||||||
target_mask_img_R = (mask_R == target_mask_label).all(axis=-1)
|
target_mask_img_R = (mask_R == target_mask_label).all(axis=-1)
|
||||||
|
|
||||||
|
|
||||||
target_points_L = get_world_points(depth_L, target_mask_img_L, cam_info["cam_intrinsic"], cam_info["cam_to_world"])
|
sampled_target_points_L = get_world_points(depth_L, target_mask_img_L, cam_info["cam_intrinsic"], cam_info["cam_to_world"], random_downsample_N)
|
||||||
target_points_R = get_world_points(depth_R, target_mask_img_R, cam_info["cam_intrinsic"], cam_info["cam_to_world_R"])
|
sampled_target_points_R = get_world_points(depth_R, target_mask_img_R, cam_info["cam_intrinsic"], cam_info["cam_to_world_R"], random_downsample_N)
|
||||||
|
|
||||||
sampled_target_points_L = PtsUtil.random_downsample_point_cloud(
|
|
||||||
target_points_L, random_downsample_N
|
|
||||||
)
|
|
||||||
sampled_target_points_R = PtsUtil.random_downsample_point_cloud(
|
|
||||||
target_points_R, random_downsample_N
|
|
||||||
)
|
|
||||||
|
|
||||||
has_points = sampled_target_points_L.shape[0] > 0 and sampled_target_points_R.shape[0] > 0
|
has_points = sampled_target_points_L.shape[0] > 0 and sampled_target_points_R.shape[0] > 0
|
||||||
if has_points:
|
if has_points:
|
||||||
@ -138,7 +135,7 @@ def save_scene_data(root, scene, scene_idx=0, scene_total=1,file_type="txt"):
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
#root = "/media/hofee/repository/new_data_with_normal"
|
#root = "/media/hofee/repository/new_data_with_normal"
|
||||||
root = r"/media/hofee/data/tempdir/test_real_output"
|
root = r"/media/hofee/data/data/box_output"
|
||||||
# list_path = r"/media/hofee/repository/full_list.txt"
|
# list_path = r"/media/hofee/repository/full_list.txt"
|
||||||
# scene_list = []
|
# scene_list = []
|
||||||
|
|
||||||
@ -147,7 +144,8 @@ if __name__ == "__main__":
|
|||||||
# scene_list.append(line.strip())
|
# scene_list.append(line.strip())
|
||||||
scene_list = os.listdir(root)
|
scene_list = os.listdir(root)
|
||||||
from_idx = 0 # 1000
|
from_idx = 0 # 1000
|
||||||
to_idx = 1 # 1500
|
to_idx = len(scene_list) # 1500
|
||||||
|
print(scene_list)
|
||||||
|
|
||||||
|
|
||||||
cnt = 0
|
cnt = 0
|
||||||
@ -155,7 +153,7 @@ if __name__ == "__main__":
|
|||||||
total = to_idx - from_idx
|
total = to_idx - from_idx
|
||||||
for scene in scene_list[from_idx:to_idx]:
|
for scene in scene_list[from_idx:to_idx]:
|
||||||
start = time.time()
|
start = time.time()
|
||||||
save_scene_data(root, scene, cnt, total, file_type="npy")
|
save_scene_data(root, scene, cnt, total, file_type="txt")
|
||||||
cnt+=1
|
cnt+=1
|
||||||
end = time.time()
|
end = time.time()
|
||||||
print(f"Time cost: {end-start}")
|
print(f"Time cost: {end-start}")
|
||||||
|
@ -121,9 +121,6 @@ class ReconstructionUtil:
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
# ----- Debug Trace ----- #
|
|
||||||
import ipdb; ipdb.set_trace()
|
|
||||||
# ------------------------ #
|
|
||||||
if status_info is not None:
|
if status_info is not None:
|
||||||
sm = status_info["status_manager"]
|
sm = status_info["status_manager"]
|
||||||
app_name = status_info["app_name"]
|
app_name = status_info["app_name"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user