__version__ = "1.0" import os from meshroom.core import desc class CameraLocalization(desc.CommandLineNode): commandLine = 'aliceVision_cameraLocalization {allParams}' inputs = [ desc.File( name='sfmdata', label='SfM Data', description='''The sfm_data.json kind of file generated by AliceVision.''', value='', uid=[0], ), desc.File( name='mediafile', label='Media File', description='''The folder path or the filename for the media to track''', value='', uid=[0], ), desc.File( name='visualDebug', label='Visual Debug Folder', description='''If a folder is provided it enables visual debug and saves all the debugging info in that folder''', value='', uid=[0], ), desc.File( name='descriptorPath', label='Descriptor Path', description='''Folder containing the descriptors for all the images (ie the *.desc.)''', value='', uid=[0], ), desc.ChoiceParam( name='matchDescTypes', label='Match Desc Types', description='''Describer types to use for the matching.''', value=['sift'], values=['sift', 'sift_float', 'sift_upright', 'dspsift', 'akaze', 'akaze_liop', 'akaze_mldb', 'cctag3', 'cctag4', 'sift_ocv', 'akaze_ocv'], exclusive=False, uid=[0], joinChar=',', ), desc.ChoiceParam( name='preset', label='Preset', description='''Preset for the feature extractor when localizing a new image (low, medium, normal, high, ultra)''', value='normal', values=['low', 'medium', 'normal', 'high', 'ultra'], exclusive=True, uid=[0], ), desc.ChoiceParam( name='resectionEstimator', label='Resection Estimator', description='''The type of *sac framework to use for resection (acransac, loransac)''', value='acransac', values=['acransac', 'loransac'], exclusive=True, uid=[0], ), desc.ChoiceParam( name='matchingEstimator', label='Matching Estimator', description='''The type of *sac framework to use for matching (acransac, loransac)''', value='acransac', values=['acransac', 'loransac'], exclusive=True, uid=[0], ), desc.File( name='calibration', label='Calibration', description='''Calibration file''', value='', uid=[0], ), desc.BoolParam( name='refineIntrinsics', label='Refine Intrinsics', description='''Enable/Disable camera intrinsics refinement for each localized image''', value=False, uid=[0], ), desc.FloatParam( name='reprojectionError', label='Reprojection Error', description='''Maximum reprojection error (in pixels) allowed for resectioning. If set to 0 it lets the ACRansac select an optimal value.''', value=4.0, range=(0.1, 50.0, 0.1), uid=[0], ), desc.IntParam( name='nbImageMatch', label='Nb Image Match', description='''[voctree] Number of images to retrieve in database''', value=4, range=(1, 1000, 1), uid=[0], ), desc.IntParam( name='maxResults', label='Max Results', description='''[voctree] For algorithm AllResults, it stops the image matching when this number of matched images is reached. If 0 it is ignored.''', value=10, range=(1, 100, 1), uid=[0], ), desc.IntParam( name='commonviews', label='Commonviews', description='''[voctree] Number of minimum images in which a point must be seen to be used in cluster tracking''', value=3, range=(2, 50, 1), uid=[0], ), desc.File( name='voctree', label='Voctree', description='''[voctree] Filename for the vocabulary tree''', value=os.environ.get('ALICEVISION_VOCTREE', ''), uid=[0], ), desc.File( name='voctreeWeights', label='Voctree Weights', description='''[voctree] Filename for the vocabulary tree weights''', value='', uid=[0], ), desc.ChoiceParam( name='algorithm', label='Algorithm', description='''[voctree] Algorithm type: FirstBest, AllResults''', value='AllResults', values=['FirstBest', 'AllResults'], exclusive=True, uid=[0], ), desc.FloatParam( name='matchingError', label='Matching Error', description='''[voctree] Maximum matching error (in pixels) allowed for image matching with geometric verification. If set to 0 it lets the ACRansac select an optimal value.''', value=4.0, range=(0.0, 50.0, 1.0), uid=[0], ), desc.IntParam( name='nbFrameBufferMatching', label='Nb Frame Buffer Matching', description='''[voctree] Number of previous frame of the sequence to use for matching (0 = Disable)''', value=10, range=(0, 100, 1), uid=[0], ), desc.BoolParam( name='robustMatching', label='Robust Matching', description='''[voctree] Enable/Disable the robust matching between query and database images, all putative matches will be considered.''', value=True, uid=[0], ), desc.IntParam( name='nNearestKeyFrames', label='N Nearest Key Frames', description='''[cctag] Number of images to retrieve in the database Parameters specific for final (optional) bundle adjustment optimization of the sequence:''', value=5, range=(1, 100, 1), uid=[0], ), desc.StringParam( name='globalBundle', label='Global Bundle', description='''[bundle adjustment] If --refineIntrinsics is not set, this option allows to run a final global bundle adjustment to refine the scene.''', value='', uid=[0], ), desc.BoolParam( name='noDistortion', label='No Distortion', description='''[bundle adjustment] It does not take into account distortion during the BA, it consider the distortion coefficients all equal to 0''', value=False, uid=[0], ), desc.BoolParam( name='noBArefineIntrinsics', label='No BA Refine Intrinsics', description='''[bundle adjustment] It does not refine intrinsics during BA''', value=False, uid=[0], ), desc.IntParam( name='minPointVisibility', label='Min Point Visibility', description='''[bundle adjustment] Minimum number of observation that a point must have in order to be considered for bundle adjustment''', value=2, range=(2, 50, 1), uid=[0], ), ] outputs = [ desc.File( name='outputAlembic', label='Output Alembic', description='''Filename for the SfMData export file (where camera poses will be stored)''', value=desc.Node.internalFolder + 'trackedCameras.abc', uid=[], ), desc.File( name='outputJSON', label='Output JSON', description='''Filename for the localization results as .json''', value=desc.Node.internalFolder + 'trackedCameras.json', uid=[], ), ]