diff --git a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py index 5d1c61d469..c18759d292 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py +++ b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py @@ -1,6 +1,7 @@ __version__ = "3.0" import json +import os from meshroom.core import desc @@ -168,33 +169,31 @@ def update(cls, node): if not isinstance(node.nodeDesc, cls): raise ValueError("Node {} is not an instance of type {}".format(node, cls)) # TODO: use Node version for this test - if 'userNbBrackets' not in node.getAttributes().keys(): + if "userNbBrackets" not in node.getAttributes().keys(): # Old version of the node return if node.userNbBrackets.value != 0: node.nbBrackets.value = node.userNbBrackets.value return - # logging.info("[LDRToHDR] Update start: version:" + str(node.packageVersion)) cameraInitOutput = node.input.getLinkParam(recursive=True) if not cameraInitOutput: node.nbBrackets.value = 0 return - if not cameraInitOutput.node.hasAttribute('viewpoints'): - if cameraInitOutput.node.hasAttribute('input'): + if not cameraInitOutput.node.hasAttribute("viewpoints"): + if cameraInitOutput.node.hasAttribute("input"): cameraInitOutput = cameraInitOutput.node.input.getLinkParam(recursive=True) - if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute('viewpoints'): + if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute("viewpoints"): viewpoints = cameraInitOutput.node.viewpoints.value else: # No connected CameraInit node.nbBrackets.value = 0 return - # logging.info("[LDRToHDR] Update start: nb viewpoints:" + str(len(viewpoints))) inputs = [] for viewpoint in viewpoints: jsonMetadata = viewpoint.metadata.value if not jsonMetadata: - # no metadata, we cannot found the number of brackets + # no metadata, we cannot find the number of brackets node.nbBrackets.value = 0 return d = json.loads(jsonMetadata) @@ -211,13 +210,30 @@ def update(cls, node): exposureGroups = [] exposures = [] + prevPath = None # Stores the dirname of the previous parsed image + newGroup = False # True if a new exposure group needs to be created (useful when there are several datasets) for path, exp in inputs: - if exposures and exp != exposures[-1] and exp == exposures[0]: + # If the dirname of the previous image and the dirname of the current image do not match, this means that the + # dataset that is being parsed has changed. A new group needs to be created but will fail to be detected in the + # next "if" statement if the new dataset's exposure levels are different. Setting "newGroup" to True prevents this + # from happening. + if prevPath is not None and prevPath != os.path.dirname(path): + newGroup = True + + # A new group is created if one of these is true: + # - a change of dataset has been detected ("newGroup" has been flagged) + # - the exposure level of the current image is different from the previous image's, + # but corresponds to the first exposure level of the group + if exposures and (exp != exposures[-1] and exp == exposures[0]) or newGroup: exposureGroups.append(exposures) exposures = [exp] else: exposures.append(exp) + + prevPath = os.path.dirname(path) + newGroup = False exposureGroups.append(exposures) + exposures = None bracketSizes = set() if len(exposureGroups) == 1: @@ -230,10 +246,8 @@ def update(cls, node): else: for expGroup in exposureGroups: bracketSizes.add(len(expGroup)) + print(bracketSizes) if len(bracketSizes) == 1: node.nbBrackets.value = bracketSizes.pop() - # logging.info("[LDRToHDR] nb bracket size:" + str(node.nbBrackets.value)) else: node.nbBrackets.value = 0 - # logging.info("[LDRToHDR] Update end") - diff --git a/meshroom/nodes/aliceVision/LdrToHdrMerge.py b/meshroom/nodes/aliceVision/LdrToHdrMerge.py index b1c80ae558..1224240507 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrMerge.py +++ b/meshroom/nodes/aliceVision/LdrToHdrMerge.py @@ -1,6 +1,7 @@ __version__ = "4.1" import json +import os from meshroom.core import desc @@ -260,33 +261,31 @@ def update(cls, node): if not isinstance(node.nodeDesc, cls): raise ValueError("Node {} is not an instance of type {}".format(node, cls)) # TODO: use Node version for this test - if 'userNbBrackets' not in node.getAttributes().keys(): + if "userNbBrackets" not in node.getAttributes().keys(): # Old version of the node return if node.userNbBrackets.value != 0: node.nbBrackets.value = node.userNbBrackets.value return - # logging.info("[LDRToHDR] Update start: version:" + str(node.packageVersion)) cameraInitOutput = node.input.getLinkParam(recursive=True) if not cameraInitOutput: node.nbBrackets.value = 0 return - if not cameraInitOutput.node.hasAttribute('viewpoints'): - if cameraInitOutput.node.hasAttribute('input'): + if not cameraInitOutput.node.hasAttribute("viewpoints"): + if cameraInitOutput.node.hasAttribute("input"): cameraInitOutput = cameraInitOutput.node.input.getLinkParam(recursive=True) - if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute('viewpoints'): + if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute("viewpoints"): viewpoints = cameraInitOutput.node.viewpoints.value else: # No connected CameraInit node.nbBrackets.value = 0 return - # logging.info("[LDRToHDR] Update start: nb viewpoints:" + str(len(viewpoints))) inputs = [] for viewpoint in viewpoints: jsonMetadata = viewpoint.metadata.value if not jsonMetadata: - # no metadata, we cannot found the number of brackets + # no metadata, we cannot find the number of brackets node.nbBrackets.value = 0 return d = json.loads(jsonMetadata) @@ -303,13 +302,30 @@ def update(cls, node): exposureGroups = [] exposures = [] + prevPath = None # Stores the dirname of the previous parsed image + newGroup = False # True if a new exposure group needs to be created (useful when there are several datasets) for path, exp in inputs: - if exposures and exp != exposures[-1] and exp == exposures[0]: + # If the dirname of the previous image and the dirname of the current image do not match, this means that the + # dataset that is being parsed has changed. A new group needs to be created but will fail to be detected in the + # next "if" statement if the new dataset's exposure levels are different. Setting "newGroup" to True prevents this + # from happening. + if prevPath is not None and prevPath != os.path.dirname(path): + newGroup = True + + # A new group is created if one of these is true: + # - a change of dataset has been detected ("newGroup" has been flagged) + # - the exposure level of the current image is different from the previous image's, + # but corresponds to the first exposure level of the group + if exposures and (exp != exposures[-1] and exp == exposures[0]) or newGroup: exposureGroups.append(exposures) exposures = [exp] else: exposures.append(exp) + + prevPath = os.path.dirname(path) + newGroup = False exposureGroups.append(exposures) + exposures = None bracketSizes = set() if len(exposureGroups) == 1: @@ -324,8 +340,5 @@ def update(cls, node): bracketSizes.add(len(expGroup)) if len(bracketSizes) == 1: node.nbBrackets.value = bracketSizes.pop() - # logging.info("[LDRToHDR] nb bracket size:" + str(node.nbBrackets.value)) else: node.nbBrackets.value = 0 - # logging.info("[LDRToHDR] Update end") - diff --git a/meshroom/nodes/aliceVision/LdrToHdrSampling.py b/meshroom/nodes/aliceVision/LdrToHdrSampling.py index ae2708e5db..f5b83a499f 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrSampling.py +++ b/meshroom/nodes/aliceVision/LdrToHdrSampling.py @@ -1,6 +1,7 @@ __version__ = "4.0" import json +import os from meshroom.core import desc @@ -189,33 +190,31 @@ def update(cls, node): if not isinstance(node.nodeDesc, cls): raise ValueError("Node {} is not an instance of type {}".format(node, cls)) # TODO: use Node version for this test - if 'userNbBrackets' not in node.getAttributes().keys(): + if "userNbBrackets" not in node.getAttributes().keys(): # Old version of the node return if node.userNbBrackets.value != 0: node.nbBrackets.value = node.userNbBrackets.value return - # logging.info("[LDRToHDR] Update start: version:" + str(node.packageVersion)) cameraInitOutput = node.input.getLinkParam(recursive=True) if not cameraInitOutput: node.nbBrackets.value = 0 return - if not cameraInitOutput.node.hasAttribute('viewpoints'): - if cameraInitOutput.node.hasAttribute('input'): + if not cameraInitOutput.node.hasAttribute("viewpoints"): + if cameraInitOutput.node.hasAttribute("input"): cameraInitOutput = cameraInitOutput.node.input.getLinkParam(recursive=True) - if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute('viewpoints'): + if cameraInitOutput and cameraInitOutput.node and cameraInitOutput.node.hasAttribute("viewpoints"): viewpoints = cameraInitOutput.node.viewpoints.value else: # No connected CameraInit node.nbBrackets.value = 0 return - # logging.info("[LDRToHDR] Update start: nb viewpoints:" + str(len(viewpoints))) inputs = [] for viewpoint in viewpoints: jsonMetadata = viewpoint.metadata.value if not jsonMetadata: - # no metadata, we cannot found the number of brackets + # no metadata, we cannot find the number of brackets node.nbBrackets.value = 0 return d = json.loads(jsonMetadata) @@ -232,13 +231,30 @@ def update(cls, node): exposureGroups = [] exposures = [] + prevPath = None # Stores the dirname of the previous parsed image + newGroup = False # True if a new exposure group needs to be created (useful when there are several datasets) for path, exp in inputs: - if exposures and exp != exposures[-1] and exp == exposures[0]: + # If the dirname of the previous image and the dirname of the current image do not match, this means that the + # dataset that is being parsed has changed. A new group needs to be created but will fail to be detected in the + # next "if" statement if the new dataset's exposure levels are different. Setting "newGroup" to True prevents this + # from happening. + if prevPath is not None and prevPath != os.path.dirname(path): + newGroup = True + + # A new group is created if one of these is true: + # - a change of dataset has been detected ("newGroup" has been flagged) + # - the exposure level of the current image is different from the previous image's, + # but corresponds to the first exposure level of the group + if exposures and (exp != exposures[-1] and exp == exposures[0]) or newGroup: exposureGroups.append(exposures) exposures = [exp] else: exposures.append(exp) + + prevPath = os.path.dirname(path) + newGroup = False exposureGroups.append(exposures) + exposures = None bracketSizes = set() if len(exposureGroups) == 1: @@ -253,8 +269,5 @@ def update(cls, node): bracketSizes.add(len(expGroup)) if len(bracketSizes) == 1: node.nbBrackets.value = bracketSizes.pop() - # logging.info("[LDRToHDR] nb bracket size:" + str(node.nbBrackets.value)) else: node.nbBrackets.value = 0 - # logging.info("[LDRToHDR] Update end") -