mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-28 09:47:20 +02:00
[tests] Update test_multiviewPipeline
with test nodes and template
`test_multiviewPipeline` relied on the photogrammetry template and its nodes, which are not a part of Meshroom anymore. The test is rewritten to check the same items (serialization, graph equality, etc.) but using dedicated test nodes (which already existed) and template, which is added with this commit. The path of the template is added to `MESHROOM_PIPELINE_TEMPLATES_PATH` when loading the test module.
This commit is contained in:
parent
f5b79f6d39
commit
752b63054d
4 changed files with 127 additions and 126 deletions
|
@ -1,5 +1,9 @@
|
|||
import os
|
||||
|
||||
from meshroom.core import loadAllNodes
|
||||
from meshroom.core import loadAllNodes, initPipelines
|
||||
|
||||
loadAllNodes(os.path.join(os.path.dirname(__file__), "nodes"))
|
||||
if os.getenv("MESHROOM_PIPELINE_TEMPLATES_PATH", False):
|
||||
os.environ["MESHROOM_PIPELINE_TEMPLATES_PATH"] += os.pathsep + os.path.dirname(os.path.realpath(__file__))
|
||||
else:
|
||||
os.environ["MESHROOM_PIPELINE_TEMPLATES_PATH"] = os.path.dirname(os.path.realpath(__file__))
|
||||
|
|
43
tests/appendTextAndFiles.mg
Normal file
43
tests/appendTextAndFiles.mg
Normal file
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"header": {
|
||||
"releaseVersion": "2025.1.0-develop",
|
||||
"fileVersion": "2.0",
|
||||
"nodesVersions": {},
|
||||
"template": true
|
||||
},
|
||||
"graph": {
|
||||
"AppendFiles_1": {
|
||||
"nodeType": "AppendFiles",
|
||||
"position": [
|
||||
189,
|
||||
8
|
||||
],
|
||||
"inputs": {
|
||||
"input": "{AppendText_1.output}",
|
||||
"input2": "{AppendText_2.output}",
|
||||
"input3": "{AppendText_1.input}",
|
||||
"input4": "{AppendText_2.input}"
|
||||
}
|
||||
},
|
||||
"AppendText_1": {
|
||||
"nodeType": "AppendText",
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"inputs": {
|
||||
"inputText": "Input text from AppendText_1"
|
||||
}
|
||||
},
|
||||
"AppendText_2": {
|
||||
"nodeType": "AppendText",
|
||||
"position": [
|
||||
0,
|
||||
160
|
||||
],
|
||||
"inputs": {
|
||||
"inputText": "Input text from AppendText_2"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,125 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# coding:utf-8
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
import meshroom.multiview
|
||||
from meshroom.core.graph import loadGraph
|
||||
from meshroom.core.node import Node
|
||||
|
||||
|
||||
def test_multiviewPipeline():
|
||||
meshroom.core.initNodes()
|
||||
meshroom.core.initPipelines()
|
||||
|
||||
graph1InputImages = ['/non/existing/fileA']
|
||||
graph1 = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph1.name = "graph1"
|
||||
graph1CameraInit = graph1.node("CameraInit_1")
|
||||
graph1CameraInit.viewpoints.extend([{'path': image} for image in graph1InputImages])
|
||||
|
||||
graph2InputImages = [] # common to graph2 and graph2b
|
||||
graph2 = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph2.name = "graph2"
|
||||
graph2CameraInit = graph2.node("CameraInit_1")
|
||||
graph2CameraInit.viewpoints.extend([{'path': image} for image in graph2InputImages])
|
||||
graph2b = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph2bCameraInit = graph2b.node("CameraInit_1")
|
||||
graph2bCameraInit.viewpoints.extend([{'path': image} for image in graph2InputImages])
|
||||
|
||||
graph3InputImages = ['/non/existing/file1', '/non/existing/file2']
|
||||
graph3 = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph3.name = "graph3"
|
||||
graph3CameraInit = graph3.node("CameraInit_1")
|
||||
graph3CameraInit.viewpoints.extend([{'path': image} for image in graph3InputImages])
|
||||
|
||||
graph4InputViewpoints = [
|
||||
{'path': '/non/existing/file1', 'intrinsicId': 50},
|
||||
{'path': '/non/existing/file2', 'intrinsicId': 55}
|
||||
] # common to graph4 and graph4b
|
||||
graph4 = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph4.name = "graph4"
|
||||
graph4CameraInit = graph4.node("CameraInit_1")
|
||||
graph4CameraInit.viewpoints.extend(graph4InputViewpoints)
|
||||
graph4b = loadGraph(meshroom.core.pipelineTemplates["photogrammetry"])
|
||||
graph4b.name = "graph4b"
|
||||
graph4bCameraInit = graph4b.node("CameraInit_1")
|
||||
graph4bCameraInit.viewpoints.extend(graph4InputViewpoints)
|
||||
|
||||
assert graph1.findNode('CameraInit').viewpoints.at(0).path.value == '/non/existing/fileA'
|
||||
assert len(graph2.findNode('CameraInit').viewpoints) == 0
|
||||
assert graph3.findNode('CameraInit').viewpoints.at(0).path.value == '/non/existing/file1'
|
||||
assert graph4.findNode('CameraInit').viewpoints.at(0).path.value == '/non/existing/file1'
|
||||
|
||||
assert len(graph1.findNode('CameraInit').viewpoints) == 1
|
||||
assert len(graph2.findNode('CameraInit').viewpoints) == 0
|
||||
assert len(graph3.findNode('CameraInit').viewpoints) == 2
|
||||
assert len(graph4.findNode('CameraInit').viewpoints) == 2
|
||||
|
||||
viewpoints = graph3.findNode('CameraInit').viewpoints
|
||||
assert viewpoints.at(0).path.value == '/non/existing/file1'
|
||||
|
||||
assert viewpoints.at(0).path.value == '/non/existing/file1'
|
||||
assert viewpoints.at(0).intrinsicId.value == -1
|
||||
assert viewpoints.at(1).path.value == '/non/existing/file2'
|
||||
assert viewpoints.at(1).intrinsicId.value == -1
|
||||
|
||||
assert not viewpoints.at(0).path.isDefault
|
||||
assert viewpoints.at(0).intrinsicId.isDefault
|
||||
assert viewpoints.getPrimitiveValue(exportDefault=False) == [
|
||||
{"path": '/non/existing/file1'},
|
||||
{"path": '/non/existing/file2'},
|
||||
]
|
||||
|
||||
for graph in (graph4, graph4b):
|
||||
viewpoints = graph.findNode('CameraInit').viewpoints
|
||||
assert viewpoints.at(0).path.value == '/non/existing/file1'
|
||||
assert viewpoints.at(0).intrinsicId.value == 50
|
||||
assert viewpoints.at(1).path.value == '/non/existing/file2'
|
||||
assert viewpoints.at(1).intrinsicId.value == 55
|
||||
|
||||
# Ensure that all output UIDs are different as the input is different:
|
||||
# graph1 != graph2 != graph3 != graph4
|
||||
for otherGraph in (graph2, graph3, graph4):
|
||||
for node in graph1.nodes:
|
||||
otherNode = otherGraph.node(node.name)
|
||||
for key, attr in node.attributes.items():
|
||||
if attr.isOutput and attr.enabled:
|
||||
otherAttr = otherNode.attribute(key)
|
||||
assert attr.uid() != otherAttr.uid()
|
||||
|
||||
# graph2 == graph2b
|
||||
nodes, edges = graph2.dfsOnFinish()
|
||||
for node in nodes:
|
||||
otherNode = graph2b.node(node.name)
|
||||
for key, attr in node.attributes.items():
|
||||
otherAttr = otherNode.attribute(key)
|
||||
if attr.isOutput and attr.enabled:
|
||||
assert attr.uid() == otherAttr.uid()
|
||||
else:
|
||||
assert attr.uid() == otherAttr.uid()
|
||||
|
||||
# graph4 == graph4b
|
||||
nodes, edges = graph4.dfsOnFinish()
|
||||
for node in nodes:
|
||||
otherNode = graph4b.node(node.name)
|
||||
for key, attr in node.attributes.items():
|
||||
otherAttr = otherNode.attribute(key)
|
||||
if attr.isOutput and attr.enabled:
|
||||
assert attr.uid() == otherAttr.uid()
|
||||
else:
|
||||
assert attr.uid() == otherAttr.uid()
|
||||
|
||||
# test serialization/deserialization
|
||||
for graph in [graph1, graph2, graph3, graph4]:
|
||||
filename = tempfile.mktemp()
|
||||
graph.save(filename)
|
||||
loadedGraph = loadGraph(filename)
|
||||
os.remove(filename)
|
||||
# check that all nodes have been properly de-serialized
|
||||
# - same node set
|
||||
assert sorted([n.name for n in loadedGraph.nodes]) == sorted([n.name for n in graph.nodes])
|
||||
# - no compatibility issues
|
||||
assert all(isinstance(n, Node) for n in loadedGraph.nodes)
|
||||
# - same UIDs for every node
|
||||
assert sorted([n._uid for n in loadedGraph.nodes]) == sorted([n._uid for n in graph.nodes])
|
79
tests/test_pipeline.py
Normal file
79
tests/test_pipeline.py
Normal file
|
@ -0,0 +1,79 @@
|
|||
#!/usr/bin/env python
|
||||
# coding:utf-8
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
import meshroom.multiview
|
||||
from meshroom.core.graph import loadGraph
|
||||
from meshroom.core.node import Node
|
||||
|
||||
|
||||
def test_pipeline():
|
||||
meshroom.core.initNodes()
|
||||
meshroom.core.initPipelines()
|
||||
|
||||
graph1InputFiles = ["/non/existing/file1", "/non/existing/file2"]
|
||||
graph1 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
||||
graph1.name = "graph1"
|
||||
graph1AppendText1 = graph1.node("AppendText_1")
|
||||
graph1AppendText1.input.value = graph1InputFiles[0]
|
||||
graph1AppendText2 = graph1.node("AppendText_2")
|
||||
graph1AppendText2.input.value = graph1InputFiles[1]
|
||||
|
||||
assert graph1.findNode("AppendFiles").input.value == graph1AppendText1.output.value
|
||||
assert graph1.findNode("AppendFiles").input2.value == graph1AppendText2.output.value
|
||||
assert graph1.findNode("AppendFiles").input3.value == graph1InputFiles[0]
|
||||
assert graph1.findNode("AppendFiles").input4.value == graph1InputFiles[1]
|
||||
|
||||
assert not graph1AppendText1.input.isDefault
|
||||
assert graph1AppendText2.input.getPrimitiveValue() == graph1InputFiles[1]
|
||||
|
||||
graph2InputFiles = ["/non/existing/file", ""]
|
||||
graph2 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
||||
graph2.name = "graph2"
|
||||
graph2AppendText1 = graph2.node("AppendText_1")
|
||||
graph2AppendText1.input.value = graph2InputFiles[0]
|
||||
graph2AppendText2 = graph2.node("AppendText_2")
|
||||
graph2AppendText2.input.value = graph2InputFiles[1]
|
||||
|
||||
# Ensure that all output UIDs are different as the input is different:
|
||||
# graph1 != graph2
|
||||
for node in graph1.nodes:
|
||||
otherNode = graph2.node(node.name)
|
||||
for key, attr in node.attributes.items():
|
||||
if attr.isOutput and attr.enabled:
|
||||
otherAttr = otherNode.attribute(key)
|
||||
assert attr.uid() != otherAttr.uid()
|
||||
|
||||
# Test serialization/deserialization on both graphs
|
||||
for graph in [graph1, graph2]:
|
||||
filename = tempfile.mktemp()
|
||||
graph.save(filename)
|
||||
loadedGraph = loadGraph(filename)
|
||||
os.remove(filename)
|
||||
# Check that all nodes have been properly de-serialized
|
||||
# - Same node set
|
||||
assert sorted([n.name for n in loadedGraph.nodes]) == sorted([n.name for n in graph.nodes])
|
||||
# - No compatibility issues
|
||||
assert all(isinstance(n, Node) for n in loadedGraph.nodes)
|
||||
# - Same UIDs for every node
|
||||
assert sorted([n._uid for n in loadedGraph.nodes]) == sorted([n._uid for n in graph.nodes])
|
||||
|
||||
# Graph 2b, set with identical parameters as graph 2
|
||||
graph2b = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
||||
graph2b.name = "graph2b"
|
||||
graph2bAppendText1 = graph2b.node("AppendText_1")
|
||||
graph2bAppendText1.input.value = graph2InputFiles[0]
|
||||
graph2bAppendText2 = graph2b.node("AppendText_2")
|
||||
graph2bAppendText2.input.value = graph2InputFiles[1]
|
||||
|
||||
# Ensure that graph2 == graph2b
|
||||
nodes, edges = graph2.dfsOnFinish()
|
||||
for node in nodes:
|
||||
otherNode = graph2b.node(node.name)
|
||||
for key, attr in node.attributes.items():
|
||||
otherAttr = otherNode.attribute(key)
|
||||
if attr.isOutput and attr.enabled:
|
||||
assert attr.uid() == otherAttr.uid()
|
||||
else:
|
||||
assert attr.uid() == otherAttr.uid()
|
Loading…
Add table
Reference in a new issue