Skip to content

Commit 074bdde

Browse files
authored
Improve mesh and point cloud output modes (#36)
1 parent 6b22103 commit 074bdde

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

python/cli/process/process.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def define_args(parser):
2525
parser.add_argument('--blur_filter_range', type=int, default=4, help='Remove key frames that are the blurriest in a neighborhood of this size (0=disabled)')
2626
parser.add_argument('--no_undistort', action='store_true', help='Do not undistort output images (only supported with certain devices)')
2727
parser.add_argument('--image_format', type=str, default='jpg', help="Color image format (use 'png' for top quality)")
28+
parser.add_argument("--texturize", help="Add textures to mesh export (BETA)", action="store_true")
2829
parser.add_argument("--preview", help="Show latest primary image as a preview", action="store_true")
2930
parser.add_argument("--preview3d", help="Show 3D visualization", action="store_true")
3031
return parser
@@ -349,7 +350,7 @@ def post_process_point_clouds(globalPointCloud, sparse_point_cloud_df):
349350

350351
return merged_df
351352

352-
def processMappingOutput(output):
353+
def process_mapping_output(output):
353354
nonlocal savedKeyFrames
354355
nonlocal pointClouds
355356
nonlocal sparsePointColors
@@ -602,7 +603,7 @@ def write_colmap_csv(data, fn):
602603

603604
finalMapWritten = True
604605

605-
def onVioOutput(vioOutput):
606+
def on_vio_output(vioOutput):
606607
nonlocal visualizer, isTracking
607608
wasTracking = isTracking
608609
isTracking = vioOutput.status == spectacularAI.TrackingStatus.TRACKING
@@ -612,12 +613,22 @@ def onVioOutput(vioOutput):
612613
if visualizer is not None:
613614
visualizer.onVioOutput(vioOutput.getCameraPose(0), status=vioOutput.status)
614615

615-
def onMappingOutput(output):
616+
def on_mapping_output(output):
616617
try:
617-
processMappingOutput(output)
618+
process_mapping_output(output)
618619
except Exception as e:
619620
print(f"ERROR: {e}", flush=True)
620-
raise e
621+
raise
622+
623+
def is_already_rectified(input_dir):
624+
vioConfigYaml = f"{input_dir}/vio_config.yaml"
625+
if os.path.exists(vioConfigYaml):
626+
with open(vioConfigYaml) as file:
627+
for line in file:
628+
if "alreadyRectified" in line:
629+
_, value = line.split(":")
630+
return value.lower().strip() == "true"
631+
return False
621632

622633
def parse_input_dir(input_dir):
623634
cameras = None
@@ -661,9 +672,11 @@ def parse_input_dir(input_dir):
661672
tmp_dir = None
662673
if args.format in ['ply', 'pcd']:
663674
config["mapSavePath"] = args.output
675+
parameter_sets.append('point-cloud')
664676
elif args.format == 'obj':
665677
assert not args.mono
666678
config['recMeshSavePath'] = args.output
679+
config['recTexturize'] = args.texturize
667680
parameter_sets.append('meshing')
668681
else:
669682
# Clear output dir
@@ -717,10 +730,9 @@ def parse_input_dir(input_dir):
717730
if prefer_icp:
718731
parameter_sets.extend(['icp', 'realsense-icp'])
719732
if not args.fast: parameter_sets.append('offline-icp')
720-
config['stereoPointCloudStride'] = 15
721733
elif device_preset == 'oak-d':
722734
config['stereoPointCloudMinDepth'] = 0.5
723-
config['stereoPointCloudStride'] = 30
735+
config['alreadyRectified'] = is_already_rectified(args.input) # rectification required for stereo point cloud
724736
elif device_preset is not None and "orbbec" in device_preset:
725737
if prefer_icp:
726738
parameter_sets.extend(['icp'])
@@ -736,8 +748,8 @@ def parse_input_dir(input_dir):
736748
config['parameterSets'] = parameter_sets
737749
print(config)
738750

739-
replay = spectacularAI.Replay(args.input, mapperCallback = onMappingOutput, configuration = config, ignoreFolderConfiguration = True)
740-
replay.setOutputCallback(onVioOutput)
751+
replay = spectacularAI.Replay(args.input, mapperCallback = on_mapping_output, configuration = config, ignoreFolderConfiguration = True)
752+
replay.setOutputCallback(on_vio_output)
741753

742754
try:
743755
if visualizer is None:

0 commit comments

Comments
 (0)