[bin][photogrammetry] initialize CameraInit node using 'buildIntrinsics'

* build the complete image files list in meshroom_photogrammetry from input arguments
* initialize CameraInit with input sfm data (views/intrinsics) if any
* call buildIntrinsics with the resolved input images list
This commit is contained in:
Yann Lanthony 2019-01-29 15:06:58 +01:00
parent c6a3f0d587
commit 44371211d5
2 changed files with 25 additions and 21 deletions

View file

@ -6,14 +6,14 @@ import meshroom
meshroom.setupEnvironment()
import meshroom.core.graph
from meshroom.nodes.aliceVision.CameraInit import readSfMData
from meshroom import multiview
parser = argparse.ArgumentParser(description='Launch the full photogrammetry pipeline.')
parser.add_argument('--input', metavar='FOLDER', type=str,
parser.add_argument('--input', metavar='FOLDER_OR_SFM', type=str,
default='',
help='Input folder or json file.')
help='Input folder with images or SfM file (.sfm, .json).')
parser.add_argument('--inputImages', metavar='IMAGES', type=str, nargs='*',
default=[],
help='Input images.')
parser.add_argument('--output', metavar='FOLDER', type=str, required=True,
help='Output folder.')
@ -45,17 +45,28 @@ if not args.input and not args.inputImages:
print('Nothing to compute. You need to set --input or --inputImages.')
exit(1)
if args.input and os.path.isfile(args.input):
views, intrinsics = readSfMData(args.input)
# print(views)
# print(intrinsics)
graph = multiview.photogrammetry(inputViewpoints=views, inputIntrinsics=intrinsics, inputImages=args.inputImages, output=args.output)
else:
graph = multiview.photogrammetry(inputFolder=args.input, inputImages=args.inputImages, output=args.output)
views, intrinsics = [], []
# Build image files list from inputImages arguments
images = [f for f in args.inputImages if multiview.isImageFile(f)]
if os.path.isdir(args.input):
# args.input is a folder: extend images list with images in that folder
images += multiview.findImageFiles(args.input)
elif os.path.isfile(args.input) and os.path.splitext(args.input)[-1] in ('.json', '.sfm'):
# args.input is a sfmData file: setup pre-calibrated views and intrinsics
from meshroom.nodes.aliceVision.CameraInit import readSfMData
views, intrinsics = readSfMData(args.input)
graph = multiview.photogrammetry(inputViewpoints=views, inputIntrinsics=intrinsics, output=args.output)
graph.findNode('DepthMap_1').downscale.value = args.scale
cameraInit = graph.findNode('CameraInit')
views, intrinsics = cameraInit.nodeDesc.buildIntrinsics(cameraInit, images)
cameraInit.viewpoints.value = views
cameraInit.intrinsics.value = intrinsics
if args.save:
graph.save(args.save)
print('File successfully saved:', args.save)

View file

@ -27,12 +27,11 @@ def findImageFiles(folder):
return [os.path.join(folder, filename) for filename in os.listdir(folder) if isImageFile(filename)]
def photogrammetry(inputFolder='', inputImages=(), inputViewpoints=(), inputIntrinsics=(), output=''):
def photogrammetry(inputImages=list(), inputViewpoints=list(), inputIntrinsics=list(), output=''):
"""
Create a new Graph with a complete photogrammetry pipeline.
Args:
inputFolder (str, optional): folder containing image files
inputImages (list of str, optional): list of image file paths
inputViewpoints (list of Viewpoint, optional): list of Viewpoints
output (str, optional): the path to export reconstructed model to
@ -44,15 +43,9 @@ def photogrammetry(inputFolder='', inputImages=(), inputViewpoints=(), inputIntr
with GraphModification(graph):
sfmNodes, mvsNodes = photogrammetryPipeline(graph)
cameraInit = sfmNodes[0]
if inputFolder:
images = findImageFiles(inputFolder)
cameraInit.viewpoints.extend([{'path': image} for image in images])
if inputImages:
cameraInit.viewpoints.extend([{'path': image} for image in inputImages])
if inputViewpoints:
cameraInit.viewpoints.extend(inputViewpoints)
if inputIntrinsics:
cameraInit.intrinsics.extend(inputIntrinsics)
cameraInit.viewpoints.extend([{'path': image} for image in inputImages])
cameraInit.viewpoints.extend(inputViewpoints)
cameraInit.intrinsics.extend(inputIntrinsics)
if output:
texturing = mvsNodes[-1]