Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions meshroom/nodes/aliceVision/SfMChecking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
__version__ = "1.0"

from meshroom.core import desc
from meshroom.core.utils import VERBOSE_LEVEL


class SfMChecking(desc.Node):

category = "Utils"
documentation = """
Check an input SfM for validity.
Throw an error if the SfM does not satisfy constraints.
"""

inputs = [
desc.File(
name="input",
label="SfMData",
description="Input SfMData file.",
value="",
),
desc.FloatParam(
name="poseCompletion",
label="Completion Percentage",
description="Minimal percent of the views reconstructed.",
value=80.0,
range=(0.0, 100.0, 1.0),
),
desc.ChoiceParam(
name="verboseLevel",
label="Verbose Level",
description="Verbosity level (fatal, error, warning, info, debug, trace).",
values=VERBOSE_LEVEL,
value="info",
)
]

outputs = [
desc.File(
name="output",
label="SfM File",
description="Path to the output SfM file.",
value=desc.Node.internalFolder + "sfmData.abc",
)
]

def processChunk(self, chunk):
from pyalicevision import sfmData as avsfmdata
from pyalicevision import sfmDataIO as avsfmdataio

chunk.logManager.start(chunk.node.verboseLevel.value)
chunk.logger.info("Open input file")

data = avsfmdata.SfMData()
ret = avsfmdataio.load(data, chunk.node.input.value, avsfmdataio.ALL)
if not ret:
chunk.logger.error("Cannot open input")
chunk.logManager.end()
raise RuntimeError()

total = len(data.getViews())
valid = len(data.getValidViews())
ratio = (100.0 * float(valid)) / float(total)

chunk.logger.info(f"Total views: {total}")
chunk.logger.info(f"Reconstructed views: {valid}")
chunk.logger.info(f"Percentage of reconstructed views: {ratio}")

if ratio < chunk.node.poseCompletion.value:
chunk.logger.error("Percentage of reconstructed views is insufficient.")
chunk.logger.error(f"Expected {chunk.node.poseCompletion.value}, got {ratio}.")
chunk.logManager.end()
raise RuntimeError()

avsfmdataio.save(data, chunk.node.output.value, avsfmdataio.ALL)

chunk.logManager.end()
Loading