mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-05-30 17:36:33 +02:00
154 lines
5.8 KiB
Python
154 lines
5.8 KiB
Python
__version__ = "2.0"
|
|
|
|
from meshroom.core import desc
|
|
from meshroom.core.utils import VERBOSE_LEVEL
|
|
|
|
|
|
class PanoramaInit(desc.AVCommandLineNode):
|
|
commandLine = 'aliceVision_panoramaInit {allParams}'
|
|
size = desc.DynamicNodeSize('input')
|
|
|
|
category = 'Panorama HDR'
|
|
documentation = '''
|
|
This node allows to setup the Panorama:
|
|
|
|
1/ Enables the initialization the cameras from known position in an XML file (provided by
|
|
["Roundshot VR Drive"](https://www.roundshot.com/xml_1/internet/fr/application/d394/d395/f396.cfm) ).
|
|
|
|
2/ Enables to setup Full Fisheye Optics (to use an Equirectangular camera model).
|
|
|
|
3/ To automatically detects the Fisheye Circle (radius + center) in input images or manually adjust it.
|
|
|
|
'''
|
|
|
|
inputs = [
|
|
desc.File(
|
|
name="input",
|
|
label="SfMData",
|
|
description="Input SfMData file.",
|
|
value="",
|
|
),
|
|
desc.ChoiceParam(
|
|
name="initializeCameras",
|
|
label="Initialize Cameras",
|
|
description="Initialize cameras.",
|
|
value="No",
|
|
values=["No", "File", "Horizontal", "Horizontal+Zenith", "Zenith+Horizontal", "Spherical"],
|
|
exclusive=True,
|
|
),
|
|
desc.File(
|
|
name="config",
|
|
label="XML Config",
|
|
description="XML data file.",
|
|
value="",
|
|
enabled=lambda node: node.initializeCameras.value == "File",
|
|
),
|
|
desc.BoolParam(
|
|
name="yawCW",
|
|
label="Yaw CW",
|
|
description="If selected, the yaw rotation will be clockwise. Otherwise, it will be counter-clockwise.",
|
|
value=True,
|
|
enabled=lambda node: ("Horizontal" in node.initializeCameras.value) or (node.initializeCameras.value == "Spherical"),
|
|
),
|
|
desc.BoolParam(
|
|
name="buildContactSheet",
|
|
label="Build Contact Sheet",
|
|
description="Build the contact sheet for the panorama if an XML data file is provided.\n"
|
|
"The contact sheet consists in a preview of the panorama using the input images.",
|
|
value=True,
|
|
enabled=lambda node: node.config.enabled and node.config.value != "",
|
|
),
|
|
desc.ListAttribute(
|
|
elementDesc=desc.IntParam(
|
|
name="nbViews",
|
|
label="Number of Views",
|
|
description="Number of views for a line.",
|
|
value=-1,
|
|
range=(-1, 20, 1),
|
|
),
|
|
name="nbViewsPerLine",
|
|
label="Spherical: Nb Views Per Line",
|
|
description="Number of views per line in Spherical acquisition.\n"
|
|
"Assumes angles from [-90,+90deg] for pitch and [-180,+180deg] for yaw.\n"
|
|
"Use -1 to estimate the number of images automatically.",
|
|
joinChar=",",
|
|
enabled=lambda node: node.initializeCameras.value == "Spherical",
|
|
),
|
|
desc.BoolParam(
|
|
name="useFisheye",
|
|
label="Full Fisheye",
|
|
description="Set this option to declare a full fisheye panorama setup.",
|
|
value=False,
|
|
),
|
|
desc.BoolParam(
|
|
name="estimateFisheyeCircle",
|
|
label="Estimate Fisheye Circle",
|
|
description="Automatically estimate the fisheye circle center and radius instead of using user values.",
|
|
value=True,
|
|
enabled=lambda node: node.useFisheye.value,
|
|
),
|
|
desc.GroupAttribute(
|
|
name="fisheyeCenterOffset",
|
|
label="Fisheye Center",
|
|
description="Center of the fisheye circle (XY offset to the center in pixels).",
|
|
groupDesc=[
|
|
desc.FloatParam(
|
|
name="fisheyeCenterOffset_x",
|
|
label="x",
|
|
description="X offset in pixels.",
|
|
value=0.0,
|
|
range=(-1000.0, 10000.0, 1.0),
|
|
),
|
|
desc.FloatParam(
|
|
name="fisheyeCenterOffset_y",
|
|
label="y",
|
|
description="Y offset in pixels.",
|
|
value=0.0,
|
|
range=(-1000.0, 10000.0, 1.0),
|
|
),
|
|
],
|
|
group=None, # skip group from command line
|
|
enabled=lambda node: node.useFisheye.value and not node.estimateFisheyeCircle.value,
|
|
),
|
|
desc.FloatParam(
|
|
name="fisheyeRadius",
|
|
label="Fisheye Radius",
|
|
description="Fisheye visibillity circle radius (in % of image's shortest side).",
|
|
value=96.0,
|
|
range=(0.0, 150.0, 0.01),
|
|
enabled=lambda node: node.useFisheye.value and not node.estimateFisheyeCircle.value,
|
|
),
|
|
desc.ChoiceParam(
|
|
name="inputAngle",
|
|
label="Input Angle Offset",
|
|
description="Add a rotation to the input XML given poses (CCW).",
|
|
value="None",
|
|
values=["None", "rotate90", "rotate180", "rotate270"],
|
|
exclusive=True,
|
|
),
|
|
desc.BoolParam(
|
|
name="debugFisheyeCircleEstimation",
|
|
label="Debug Fisheye Circle Detection",
|
|
description="Debug fisheye circle detection.",
|
|
value=False,
|
|
enabled=lambda node: node.useFisheye.value,
|
|
advanced=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="outSfMData",
|
|
label="SfMData File",
|
|
description="Path to the output SfMData file.",
|
|
value=desc.Node.internalFolder + "sfmData.sfm",
|
|
),
|
|
]
|