[nodes] KeyframeSelection: Add smart keyframe selection method

Group the keyframe selection parameters together depending on the method
(regular or smart) they belong to.

Parameters for a method are only shown if that method is the currently
selected one.
This commit is contained in:
Candice Bentéjac 2023-01-24 15:16:42 +00:00
parent e09554c410
commit 30ea556c26

View file

@ -72,20 +72,28 @@ You can extract frames at regular interval by configuring only the min/maxFrameS
value="${ALICEVISION_SENSOR_DB}", value="${ALICEVISION_SENSOR_DB}",
uid=[0], uid=[0],
), ),
desc.GroupAttribute(
name="selectionMethod",
label="Keyframe Selection Method",
description="Selection the regular or smart method for the keyframe selection.\n"
"- With the regular method, keyframes are selected regularly over the sequence with respect to the set parameters.\n"
"- With the smart method, keyframes are selected based on their sharpness and optical flow scores.",
group=None, # skip group from command line
groupDesc=[
desc.BoolParam(
name='useSmartSelection',
label='Use Smart Keyframe Selection',
description="Use the smart keyframe selection.",
value=True,
uid=[0]
),
desc.GroupAttribute( desc.GroupAttribute(
name="regularSelection", name="regularSelection",
label="Regular Keyframe Selection", label="Regular Keyframe Selection",
description="Parameters for the regular keyframe selection.\nKeyframes are selected regularly over the sequence with respect to the set parameters.", description="Parameters for the regular keyframe selection.\nKeyframes are selected regularly over the sequence with respect to the set parameters.",
group=None, # skip group from command line group=None, # skip group from command line
enabled=lambda node: node.selectionMethod.useSmartSelection.value is False,
groupDesc=[ groupDesc=[
desc.BoolParam(
name="useRegularSelection",
label="Use Regular Selection",
description="Enable and use the regular keyframe selection.",
value=True,
uid=[0],
enabled=False, # only method for now, it must always be enabled
),
desc.IntParam( desc.IntParam(
name="minFrameStep", name="minFrameStep",
label="Min Frame Step", label="Min Frame Step",
@ -93,7 +101,7 @@ You can extract frames at regular interval by configuring only the min/maxFrameS
value=12, value=12,
range=(1, 1000, 1), range=(1, 1000, 1),
uid=[0], uid=[0],
enabled=lambda node: node.regularSelection.useRegularSelection.value enabled=lambda node: node.regularSelection.enabled
), ),
desc.IntParam( desc.IntParam(
name="maxFrameStep", name="maxFrameStep",
@ -102,7 +110,7 @@ You can extract frames at regular interval by configuring only the min/maxFrameS
value=0, value=0,
range=(0, 1000, 1), range=(0, 1000, 1),
uid=[0], uid=[0],
enabled=lambda node: node.regularSelection.useRegularSelection.value enabled=lambda node: node.regularSelection.enabled
), ),
desc.IntParam( desc.IntParam(
name="maxNbOutFrames", name="maxNbOutFrames",
@ -113,10 +121,78 @@ You can extract frames at regular interval by configuring only the min/maxFrameS
value=0, value=0,
range=(0, 10000, 1), range=(0, 10000, 1),
uid=[0], uid=[0],
enabled=lambda node: node.regularSelection.useRegularSelection.value enabled=lambda node: node.regularSelection.enabled
), ),
], ],
), ),
desc.GroupAttribute(
name="smartSelection",
label="Smart Keyframe Selection",
description="Parameters for the smart keyframe selection.\nKeyframes are selected based on their sharpness and optical flow scores.",
group=None, # skip group from command line
enabled=lambda node: node.selectionMethod.useSmartSelection.value,
groupDesc=[
desc.FloatParam(
name="pxDisplacement",
label="Pixel Displacement",
description="The percentage of pixels in the frame that need to have moved since the last keyframe to be considered for the selection",
value=3.0,
range=(0.0, 100.0, 1.0),
uid=[0],
enabled=lambda node: node.smartSelection.enabled
),
desc.IntParam(
name="minNbOutFrames",
label="Min Nb Output Frames",
description="Minimum number of frames selected to be keyframes.",
value=10,
range=(1, 100, 1),
uid=[0],
enabled=lambda node: node.smartSelection.enabled
),
desc.IntParam(
name="maxNbOutFrames",
label="Max Nb Output Frames",
description="Maximum number of frames selected to be keyframes.",
value=2000,
range=(1, 10000, 1),
uid=[0],
enabled=lambda node: node.smartSelection.enabled
),
desc.IntParam(
name="rescaledWidth",
label="Rescaled Frame's Width",
description="Width, in pixels, of the frame after a rescale. Aspect ratio will be preserved. No rescale will be performed if equal to 0.",
value=720,
range=(0, 4000, 1),
uid=[0],
enabled=lambda node: node.smartSelection.enabled,
advanced=True
),
desc.IntParam(
name="sharpnessWindowSize",
label="Sharpness Window Size",
description="The size, in pixels, of the sliding window used to evaluate a frame's sharpness.",
value=200,
range=(1, 10000, 1),
uid=[0],
enabled=lambda node: node.smartSelection.enabled,
advanced=True
),
desc.IntParam(
name="flowCellSize",
label="Optical Flow Cell Size",
description="The size, in pixels, of the cells within a frame in which the optical flow scores is evaluated.",
value=90,
range=(10, 2000, 1),
uid=[0],
enabled=lambda node: node.smartSelection.enabled,
advanced=True
),
]
)
]
),
desc.ChoiceParam( desc.ChoiceParam(
name="verboseLevel", name="verboseLevel",
label="Verbose Level", label="Verbose Level",