mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-07-12 14:27:22 +02:00
[multiview] add Graph Modification and convert inputFolder into a list of input files
* Always set a list of input files * Use GraphModification to do only one update
This commit is contained in:
parent
1472baa477
commit
39f6ef3d64
1 changed files with 54 additions and 38 deletions
|
@ -1,46 +1,62 @@
|
||||||
import os
|
import os
|
||||||
|
import fnmatch
|
||||||
|
import re
|
||||||
|
|
||||||
from .core.graph import Graph
|
from .core.graph import Graph, GraphModification
|
||||||
|
|
||||||
|
|
||||||
def photogrammetryPipeline(output, inputFolder='', inputImages=[], inputViewpoints=[]):
|
def findFiles(folder, patterns):
|
||||||
|
rules = [re.compile(fnmatch.translate(pattern), re.IGNORECASE) for pattern in patterns]
|
||||||
|
outFiles = []
|
||||||
|
for name in os.listdir(folder):
|
||||||
|
for rule in rules:
|
||||||
|
if rule.match(name):
|
||||||
|
filepath = os.path.join(folder, name)
|
||||||
|
outFiles.append(filepath)
|
||||||
|
break
|
||||||
|
return outFiles
|
||||||
|
|
||||||
|
|
||||||
|
def photogrammetryPipeline(output='', inputFolder='', inputImages=[], inputViewpoints=[]):
|
||||||
# type: () -> Graph
|
# type: () -> Graph
|
||||||
graph = Graph('pipeline')
|
graph = Graph('pipeline')
|
||||||
cameraInit = graph.addNewNode('CameraInit')
|
with GraphModification(graph):
|
||||||
if inputFolder:
|
cameraInit = graph.addNewNode('CameraInit')
|
||||||
cameraInit.imageDirectory.value = inputFolder
|
if inputFolder:
|
||||||
if inputImages:
|
images = findFiles(inputFolder, ['*.jpg', '*.png'])
|
||||||
cameraInit.viewpoints.value = [{'image': image, 'focal': -1} for image in inputImages]
|
cameraInit.viewpoints.extend([{'image': image} for image in images])
|
||||||
if inputViewpoints:
|
if inputImages:
|
||||||
cameraInit.viewpoints.extend(inputViewpoints)
|
cameraInit.viewpoints.extend([{'image': image} for image in inputImages])
|
||||||
featureExtraction = graph.addNewNode('FeatureExtraction',
|
if inputViewpoints:
|
||||||
input=cameraInit.outputSfm)
|
cameraInit.viewpoints.extend(inputViewpoints)
|
||||||
imageMatching = graph.addNewNode('ImageMatching',
|
featureExtraction = graph.addNewNode('FeatureExtraction',
|
||||||
input=featureExtraction.input,
|
input=cameraInit.outputSfm)
|
||||||
featuresDirectory=featureExtraction.output,
|
imageMatching = graph.addNewNode('ImageMatching',
|
||||||
)
|
input=featureExtraction.input,
|
||||||
featureMatching = graph.addNewNode('FeatureMatching',
|
featuresDirectory=featureExtraction.output,
|
||||||
input=imageMatching.input,
|
)
|
||||||
featuresDirectory=imageMatching.featuresDirectory,
|
featureMatching = graph.addNewNode('FeatureMatching',
|
||||||
imagePairsList=imageMatching.output)
|
input=imageMatching.input,
|
||||||
structureFromMotion = graph.addNewNode('StructureFromMotion',
|
featuresDirectory=imageMatching.featuresDirectory,
|
||||||
input=featureMatching.input,
|
imagePairsList=imageMatching.output)
|
||||||
featuresDirectory=featureMatching.featuresDirectory,
|
structureFromMotion = graph.addNewNode('StructureFromMotion',
|
||||||
matchesDirectory=featureMatching.output)
|
input=featureMatching.input,
|
||||||
prepareDenseScene = graph.addNewNode('PrepareDenseScene',
|
featuresDirectory=featureMatching.featuresDirectory,
|
||||||
input=structureFromMotion.output)
|
matchesDirectory=featureMatching.output)
|
||||||
cameraConnection = graph.addNewNode('CameraConnection',
|
prepareDenseScene = graph.addNewNode('PrepareDenseScene',
|
||||||
ini=prepareDenseScene.ini)
|
input=structureFromMotion.output)
|
||||||
depthMap = graph.addNewNode('DepthMap',
|
cameraConnection = graph.addNewNode('CameraConnection',
|
||||||
ini=cameraConnection.ini)
|
ini=prepareDenseScene.ini)
|
||||||
depthMapFilter = graph.addNewNode('DepthMapFilter',
|
depthMap = graph.addNewNode('DepthMap',
|
||||||
ini=depthMap.ini)
|
ini=cameraConnection.ini)
|
||||||
meshing = graph.addNewNode('Meshing',
|
depthMapFilter = graph.addNewNode('DepthMapFilter',
|
||||||
ini=depthMapFilter.ini)
|
ini=depthMap.ini)
|
||||||
texturing = graph.addNewNode('Texturing',
|
meshing = graph.addNewNode('Meshing',
|
||||||
ini=meshing.ini)
|
ini=depthMapFilter.ini)
|
||||||
publish = graph.addNewNode('Publish',
|
texturing = graph.addNewNode('Texturing',
|
||||||
inputFiles=[texturing.outputMesh, texturing.outputMaterial, texturing.outputTextures],
|
ini=meshing.ini)
|
||||||
output=output)
|
publish = graph.addNewNode('Publish',
|
||||||
|
inputFiles=[texturing.outputMesh, texturing.outputMaterial, texturing.outputTextures],
|
||||||
|
output=output)
|
||||||
return graph
|
return graph
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue