You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.9 KiB
77 lines
2.9 KiB
#!/usr/bin/python3 |
|
# -*- encoding: utf-8 -*- |
|
""" |
|
This script is for comparing the poses stored in an OpenMVS project to the poses optimized by OpenMVG |
|
|
|
usage: run 'MvgOptimizeSfM.py' in a sub-folder to the OpenMVS project folder containing |
|
'scene.mvs' and images stored in 'images' folder; structure ex: |
|
|
|
-OpenMVS_project |
|
-images |
|
-scene.mvs |
|
-mvg |
|
-run script here |
|
""" |
|
|
|
import os |
|
import sys |
|
import subprocess |
|
|
|
if sys.platform.startswith('win'): |
|
PATH_DELIM = ';' |
|
else: |
|
PATH_DELIM = ':' |
|
|
|
# add this script's directory to PATH |
|
os.environ['PATH'] += PATH_DELIM + os.path.dirname(os.path.abspath(__file__)) |
|
|
|
# add current directory to PATH |
|
os.environ['PATH'] += PATH_DELIM + os.getcwd() |
|
|
|
|
|
def whereis(afile): |
|
""" |
|
return directory in which afile is, None if not found. Look in PATH |
|
""" |
|
if sys.platform.startswith('win'): |
|
cmd = "where" |
|
else: |
|
cmd = "which" |
|
try: |
|
ret = subprocess.run([cmd, afile], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True) |
|
return os.path.split(ret.stdout.decode())[0] |
|
except subprocess.CalledProcessError: |
|
return None |
|
|
|
|
|
def launch(cmdline): |
|
# Launch the current step |
|
print('Cmd: ' + ' '.join(cmdline)) |
|
try: |
|
pStep = subprocess.Popen(cmdline) |
|
pStep.wait() |
|
if pStep.returncode != 0: |
|
return |
|
except KeyboardInterrupt: |
|
sys.exit('\r\nProcess canceled by user, all files remains') |
|
|
|
|
|
# Try to find openMVG and openMVS binaries in PATH |
|
OPENMVG_BIN = whereis("openMVG_main_SfMInit_ImageListing") |
|
OPENMVS_BIN = whereis("ReconstructMesh") |
|
|
|
# Ask user for openMVG and openMVS directories if not found |
|
if not OPENMVG_BIN: |
|
OPENMVG_BIN = input("openMVG binary folder?\n") |
|
if not OPENMVS_BIN: |
|
OPENMVS_BIN = input("openMVS binary folder?\n") |
|
|
|
launch([os.path.join(OPENMVS_BIN, 'InterfaceCOLMAP'), '../scene.mvs', '-o', '../gt_dense_cameras.camera']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_SfMInit_ImageListingFromKnownPoses'), '-i', '../images', '-g', '../gt_dense_cameras', '-t', '1', '-o', '.']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_ComputeFeatures'), '-i', 'sfm_data.json', '-o', '.']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_ComputeMatches'), '-i', 'sfm_data.json', '-o', '.', '-m', '1']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_ComputeStructureFromKnownPoses'), '-i', 'sfm_data.json', '-m', '.', '-o', 'sfm_data_struct.bin', '-b']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_ComputeSfM_DataColor'), '-i', 'sfm_data_struct.bin', '-o', 'scene.ply']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_openMVG2openMVS'), '-i', 'sfm_data_struct.bin', '-o', 'scene.mvs', '-d', 'images']) |
|
launch([os.path.join(OPENMVS_BIN, 'InterfaceCOLMAP'), 'scene.mvs', '-o', 'cameras.camera']) |
|
launch([os.path.join(OPENMVG_BIN, 'openMVG_main_evalQuality'), '-i', '..', '-c', 'sfm_data_struct.bin', '-o', 'compare'])
|
|
|