From 493535a5766a0f1a9b850c28f6c7d4185e8431a1 Mon Sep 17 00:00:00 2001 From: Javi Carnero Date: Thu, 13 Jul 2023 18:44:58 +0200 Subject: [PATCH] Improved error handling at convert.py (#32) Print error and exists if colmap or imagemagic fails. This avoid continuing the execution with errors and failing weirldly afterwards. --- convert.py | 48 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/convert.py b/convert.py index 333f875..7894884 100644 --- a/convert.py +++ b/convert.py @@ -3,13 +3,14 @@ # GRAPHDECO research group, https://team.inria.fr/graphdeco # All rights reserved. # -# This software is free for non-commercial, research and evaluation use +# This software is free for non-commercial, research and evaluation use # under the terms of the LICENSE.md file. # # For inquiries contact george.drettakis@inria.fr # import os +import logging from argparse import ArgumentParser import shutil @@ -31,34 +32,50 @@ if not args.skip_matching: os.makedirs(args.source_path + "/distorted/sparse", exist_ok=True) ## Feature extraction - os.system(colmap_command + " feature_extractor "\ + feat_extracton_cmd = colmap_command + " feature_extractor "\ "--database_path " + args.source_path + "/distorted/database.db \ --image_path " + args.source_path + "/input \ --ImageReader.single_camera 1 \ --ImageReader.camera_model " + args.camera + " \ - --SiftExtraction.use_gpu " + str(use_gpu)) + --SiftExtraction.use_gpu " + str(use_gpu) + exit_code = os.system(feat_extracton_cmd) + if exit_code != 0: + logging.error(f"Feature extraction failed with code {exit_code}. Exiting.") + exit(exit_code) ## Feature matching - os.system(colmap_command + " exhaustive_matcher \ + feat_matching_cmd = colmap_command + " exhaustive_matcher \ --database_path " + args.source_path + "/distorted/database.db \ - --SiftMatching.use_gpu " + str(use_gpu)) + --SiftMatching.use_gpu " + str(use_gpu) + exit_code = os.system(feat_matching_cmd) + if exit_code != 0: + logging.error(f"Feature matching failed with code {exit_code}. Exiting.") + exit(exit_code) ### Bundle adjustment # The default Mapper tolerance is unnecessarily large, # decreasing it speeds up bundle adjustment steps. - os.system(colmap_command + " mapper \ + mapper_cmd = (colmap_command + " mapper \ --database_path " + args.source_path + "/distorted/database.db \ --image_path " + args.source_path + "/input \ --output_path " + args.source_path + "/distorted/sparse \ --Mapper.ba_global_function_tolerance=0.000001") + exit_code = os.system(mapper_cmd) + if exit_code != 0: + logging.error(f"Mapper failed with code {exit_code}. Exiting.") + exit(exit_code) ### Image undistortion ## We need to undistort our images into ideal pinhole intrinsics. -os.system(colmap_command + " image_undistorter \ +img_undist_cmd = (colmap_command + " image_undistorter \ --image_path " + args.source_path + "/input \ --input_path " + args.source_path + "/distorted/sparse/0 \ --output_path " + args.source_path + "\ --output_type COLMAP") +exit_code = os.system(img_undist_cmd) +if exit_code != 0: + logging.error(f"Mapper failed with code {exit_code}. Exiting.") + exit(exit_code) files = os.listdir(args.source_path + "/sparse") os.makedirs(args.source_path + "/sparse/0", exist_ok=True) @@ -85,14 +102,23 @@ if(args.resize): destination_file = os.path.join(args.source_path, "images_2", file) shutil.copy2(source_file, destination_file) - os.system(magick_command + " mogrify -resize 50% " + destination_file) + exit_code = os.system(magick_command + " mogrify -resize 50% " + destination_file) + if exit_code != 0: + logging.error(f"50% resize failed with code {exit_code}. Exiting.") + exit(exit_code) destination_file = os.path.join(args.source_path, "images_4", file) shutil.copy2(source_file, destination_file) - os.system(magick_command + " mogrify -resize 25% " + destination_file) + exit_code = os.system(magick_command + " mogrify -resize 25% " + destination_file) + if exit_code != 0: + logging.error(f"25% resize failed with code {exit_code}. Exiting.") + exit(exit_code) destination_file = os.path.join(args.source_path, "images_8", file) shutil.copy2(source_file, destination_file) - os.system(magick_command + " mogrify -resize 12.5% " + destination_file) + exit_code = os.system(magick_command + " mogrify -resize 12.5% " + destination_file) + if exit_code != 0: + logging.error(f"12.5% resize failed with code {exit_code}. Exiting.") + exit(exit_code) -print("Done.") \ No newline at end of file +print("Done.")