diff --git a/bin/meshroom_photogrammetry b/bin/meshroom_photogrammetry index b7e07fe6..3cb12df1 100755 --- a/bin/meshroom_photogrammetry +++ b/bin/meshroom_photogrammetry @@ -1,42 +1,11 @@ #!/usr/bin/env python import argparse -import os import meshroom.core +from meshroom import multiview from meshroom.core import graph as pg -def photogrammetryPipeline(imageDirectory): - graph = pg.Graph('pipeline') - cameraInit = graph.addNewNode('CameraInit', - sensorDatabase=os.environ.get('ALICEVISION_SENSOR_DB', 'sensor_width_camera_database.txt')) - if imageDirectory: - cameraInit.imageDirectory.value = imageDirectory - featureExtraction = graph.addNewNode('FeatureExtraction', - input=cameraInit.outputSfm) - # TODO: imageMatching - featureMatching = graph.addNewNode('FeatureMatching', - input=cameraInit.outputSfm, - featuresDirectory=featureExtraction.output) - structureFromMotion = graph.addNewNode('StructureFromMotion', - input=cameraInit.outputSfm, - featuresDirectory=featureExtraction.output, - matchesDirectory=featureMatching.output) - prepareDenseScene = graph.addNewNode('PrepareDenseScene', - input=structureFromMotion.output) - camPairs = graph.addNewNode('CamPairs', - mvsConfig=prepareDenseScene.mvsConfig) - depthMap = graph.addNewNode('DepthMap', - mvsConfig=camPairs.mvsConfig) - depthMapFilter = graph.addNewNode('DepthMapFilter', - mvsConfig=depthMap.mvsConfig) - meshing = graph.addNewNode('Meshing', - mvsConfig=depthMapFilter.mvsConfig) - texturing = graph.addNewNode('Texturing', - mvsConfig=meshing.mvsConfig) - return graph - - parser = argparse.ArgumentParser(description='Launch the full photogrammetry pipeline.') parser.add_argument('--input', metavar='FOLDER', type=str, required=True, help='Input folder or json file.') @@ -57,7 +26,10 @@ if not args.output and not args.save: print('Nothing to do. You need to set --output or --save.') exit(1) -graph = photogrammetryPipeline(imageDirectory=args.input) +graph = multiview.photogrammetryPipeline() +if args.input: + cameraInit = graph.findNodeCandidates("CameraInit") + cameraInit.imageDirectory.value = args.input if args.save: graph.save(args.save) @@ -70,4 +42,3 @@ if args.output: toNodes = graph.findNodes(args.toNode) pg.execute(graph, toNodes=toNodes) - diff --git a/meshroom/multiview.py b/meshroom/multiview.py new file mode 100644 index 00000000..288b0562 --- /dev/null +++ b/meshroom/multiview.py @@ -0,0 +1,35 @@ +import os + +from .core.graph import Graph + + +def photogrammetryPipeline(): + # type: () -> Graph + graph = Graph('pipeline') + + cameraInit = graph.addNewNode('CameraInit', + sensorDatabase=os.environ.get('ALICEVISION_SENSOR_DB', 'sensor_width_camera_database.txt')) + + featureExtraction = graph.addNewNode('FeatureExtraction', + input=cameraInit.outputSfm) + # TODO: imageMatching + featureMatching = graph.addNewNode('FeatureMatching', + input=cameraInit.outputSfm, + featuresDirectory=featureExtraction.output) + structureFromMotion = graph.addNewNode('StructureFromMotion', + input=cameraInit.outputSfm, + featuresDirectory=featureExtraction.output, + matchesDirectory=featureMatching.output) + prepareDenseScene = graph.addNewNode('PrepareDenseScene', + input=structureFromMotion.output) + camPairs = graph.addNewNode('CamPairs', + mvsConfig=prepareDenseScene.mvsConfig) + depthMap = graph.addNewNode('DepthMap', + mvsConfig=camPairs.mvsConfig) + depthMapFilter = graph.addNewNode('DepthMapFilter', + mvsConfig=depthMap.mvsConfig) + meshing = graph.addNewNode('Meshing', + mvsConfig=depthMapFilter.mvsConfig) + texturing = graph.addNewNode('Texturing', + mvsConfig=meshing.mvsConfig) + return graph