78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
#!/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'])
|