mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-05-17 19:16:26 +02:00
145 lines
5.1 KiB
Python
145 lines
5.1 KiB
Python
__version__ = "3.0"
|
|
|
|
from meshroom.core import desc
|
|
from meshroom.core.utils import VERBOSE_LEVEL
|
|
|
|
|
|
class Split360InputNodeSize(desc.DynamicNodeSize):
|
|
'''
|
|
The Split360Images will increase the amount of views in the SfMData.
|
|
This class converts the number of input views into the number of split output views.
|
|
'''
|
|
def computeSize(self, node):
|
|
s = super(Split360InputNodeSize, self).computeSize(node)
|
|
factor = 0
|
|
mode = node.attribute('splitMode')
|
|
if mode.value == 'equirectangular':
|
|
factor = node.attribute('equirectangularGroup.equirectangularNbSplits').value
|
|
elif mode.value == 'dualfisheye':
|
|
factor = 2
|
|
return s * factor
|
|
|
|
|
|
class Split360Images(desc.AVCommandLineNode):
|
|
commandLine = 'aliceVision_split360Images {allParams}'
|
|
size = Split360InputNodeSize('input')
|
|
|
|
category = 'Utils'
|
|
documentation = "This node is used to extract multiple images from equirectangular or dualfisheye images."
|
|
|
|
inputs = [
|
|
desc.File(
|
|
name="input",
|
|
label="Input",
|
|
description="Single image, image folder or SfMData file.",
|
|
value="",
|
|
),
|
|
desc.ChoiceParam(
|
|
name="splitMode",
|
|
label="Split Mode",
|
|
description="Split mode (equirectangular, dualfisheye).",
|
|
value="equirectangular",
|
|
values=["equirectangular", "dualfisheye"],
|
|
exclusive=True,
|
|
),
|
|
desc.GroupAttribute(
|
|
name="dualFisheyeGroup",
|
|
label="Dual Fisheye",
|
|
description="Dual Fisheye.",
|
|
group=None,
|
|
enabled=lambda node: node.splitMode.value == "dualfisheye",
|
|
groupDesc=[
|
|
desc.ChoiceParam(
|
|
name="dualFisheyeOffsetPresetX",
|
|
label="X Offset Preset",
|
|
description="Dual-Fisheye X offset preset.",
|
|
value="center",
|
|
values=["center", "left", "right"],
|
|
exclusive=True,
|
|
),
|
|
desc.ChoiceParam(
|
|
name="dualFisheyeOffsetPresetY",
|
|
label="Y Offset Preset",
|
|
description="Dual-Fisheye Y offset preset.",
|
|
value="center",
|
|
values=["center", "top", "bottom"],
|
|
exclusive=True,
|
|
),
|
|
desc.ChoiceParam(
|
|
name="dualFisheyeCameraModel",
|
|
label="Camera Model",
|
|
description="Dual-Fisheye camera model.",
|
|
value="fisheye4",
|
|
values=["fisheye4", "equidistant_r3"],
|
|
exclusive=True,
|
|
),
|
|
],
|
|
),
|
|
desc.GroupAttribute(
|
|
name="equirectangularGroup",
|
|
label="Equirectangular",
|
|
description="Equirectangular",
|
|
group=None,
|
|
enabled=lambda node: node.splitMode.value == "equirectangular",
|
|
groupDesc=[
|
|
desc.IntParam(
|
|
name="equirectangularNbSplits",
|
|
label="Nb Splits",
|
|
description="Equirectangular number of splits.",
|
|
value=2,
|
|
range=(1, 100, 1),
|
|
),
|
|
desc.IntParam(
|
|
name="equirectangularSplitResolution",
|
|
label="Split Resolution",
|
|
description="Equirectangular split resolution.",
|
|
value=1200,
|
|
range=(100, 10000, 1),
|
|
),
|
|
desc.BoolParam(
|
|
name="equirectangularPreviewMode",
|
|
label="Preview Mode",
|
|
description="Export a SVG file that simulates the split.",
|
|
value=False,
|
|
),
|
|
desc.FloatParam(
|
|
name="fov",
|
|
label="Field Of View",
|
|
description="Field of View to extract (in degrees).",
|
|
value=110.0,
|
|
range=(0.0, 180.0, 1.0),
|
|
),
|
|
],
|
|
),
|
|
desc.ChoiceParam(
|
|
name="extension",
|
|
label="Output File Extension",
|
|
description="Output image file extension.",
|
|
value="",
|
|
values=["", "exr", "jpg", "tiff", "png"],
|
|
exclusive=True,
|
|
),
|
|
desc.ChoiceParam(
|
|
name="verboseLevel",
|
|
label="Verbose Level",
|
|
description="Verbosity level (fatal, error, warning, info, debug, trace).",
|
|
values=VERBOSE_LEVEL,
|
|
value="info",
|
|
exclusive=True,
|
|
),
|
|
]
|
|
|
|
outputs = [
|
|
desc.File(
|
|
name="output",
|
|
label="Folder",
|
|
description="Output folder for extracted frames.",
|
|
value=desc.Node.internalFolder,
|
|
),
|
|
desc.File(
|
|
name="outSfMData",
|
|
label="SfMData File",
|
|
description="Output SfMData file.",
|
|
value=desc.Node.internalFolder + "rig.sfm",
|
|
),
|
|
]
|