Meshroom/meshroom/nodes/aliceVision/SfMTransfer.py
Candice Bentéjac 189cb6be5b [nodes] Use raw strings for parameters that contain regular expressions
Regular expressions in regular strings generate deprecation warnings
with Python 3 ("invalid escape sequence \x"). To fix these warnings,
the regex must be contained within a raw string. For nodes that have
parameters whose description and/or value contain regex, the strings
are transformed into raw strings. In the case of descriptions, which are
generally written across several lines, regular strings are concatenated
with regular strings to preserve line returns (with "\n", which becomes
uneffective in raw strings).
2022-12-05 17:16:22 +01:00

109 lines
4 KiB
Python

__version__ = "2.0"
from meshroom.core import desc
import os.path
class SfMTransfer(desc.CommandLineNode):
commandLine = 'aliceVision_utils_sfmTransfer {allParams}'
size = desc.DynamicNodeSize('input')
category = 'Utils'
documentation = '''
This node allows to transfer poses and/or intrinsics form one SfM scene onto another one.
'''
inputs = [
desc.File(
name='input',
label='Input',
description='''SfMData file .''',
value='',
uid=[0],
),
desc.File(
name='reference',
label='Reference',
description='''Path to the scene used as the reference to retrieve resolved poses and intrinsics.''',
value='',
uid=[0],
),
desc.ChoiceParam(
name='method',
label='Matching Method',
description="Matching Method:\n"
" * from_viewid: Align cameras with same view Id\n"
" * from_filepath: Align cameras with a filepath matching, using 'fileMatchingPattern'\n"
" * from_metadata: Align cameras with matching metadata, using 'metadataMatchingList'\n"
" * from_intrinsicid: Copy intrinsics parameters\n",
value='from_viewid',
values=['from_viewid', 'from_filepath', 'from_metadata', 'from_intrinsicid'],
exclusive=True,
uid=[0],
),
desc.StringParam(
name='fileMatchingPattern',
label='File Matching Pattern',
description='Matching regular expression for the "from_cameras_filepath" method. '
'You should capture specific parts of the filepath with parenthesis to define matching elements.\n'
'Some examples of patterns:\n'
r' - Match the filename without extension (default value): ".*\/(.*?)\.\w{3}"' + '\n' +
r' - Match the filename suffix after "_": ".*\/.*(_.*?\.\w{3})"' + '\n' +
r' - Match the filename prefix before "_": ".*\/(.*?)_.*\.\w{3}"',
value=r'.*\/(.*?)\.\w{3}',
uid=[0],
),
desc.ListAttribute(
elementDesc=desc.File(
name="metadataMatching",
label="Metadata",
description="",
value="",
uid=[0],
),
name="metadataMatchingList",
label="Metadata Matching List",
description='List of metadata that should match to create the correspondences. If the list is empty, the default value will be used: ["Make", "Model", "Exif:BodySerialNumber", "Exif:LensSerialNumber"].',
),
desc.BoolParam(
name='transferPoses',
label='Poses',
description='Transfer poses.',
value=True,
uid=[0]
),
desc.BoolParam(
name='transferIntrinsics',
label='Intrinsics',
description='Transfer cameras intrinsics.',
value=True,
uid=[0]
),
desc.ChoiceParam(
name='verboseLevel',
label='Verbose Level',
description='''verbosity level (fatal, error, warning, info, debug, trace).''',
value='info',
values=['fatal', 'error', 'warning', 'info', 'debug', 'trace'],
exclusive=True,
uid=[],
),
]
outputs = [
desc.File(
name='output',
label='SfMData File',
description='SfMData file.',
value=lambda attr: desc.Node.internalFolder + (os.path.splitext(os.path.basename(attr.node.input.value))[0] or 'sfmData') + '.abc',
uid=[],
),
desc.File(
name='outputViewsAndPoses',
label='Poses',
description='''Path to the output sfmdata file with cameras (views and poses).''',
value=desc.Node.internalFolder + 'cameras.sfm',
uid=[],
),
]