예제 #1
0
파일: odm_app.py 프로젝트: wzdk123/ODM
    def __init__(self, args):
        """
        Initializes the application and defines the ODM application pipeline stages
        """
        if args.debug:
            log.logger.show_debug = True
        
        dataset = ODMLoadDatasetStage('dataset', args, progress=5.0,
                                          verbose=args.verbose)
        split = ODMSplitStage('split', args, progress=75.0)
        merge = ODMMergeStage('merge', args, progress=100.0)
        opensfm = ODMOpenSfMStage('opensfm', args, progress=25.0)
        slam = ODMSlamStage('slam', args)
        openmvs = ODMOpenMVSStage('openmvs', args, progress=50.0)
        filterpoints = ODMFilterPoints('odm_filterpoints', args, progress=52.0)
        meshing = ODMeshingStage('odm_meshing', args, progress=60.0,
                                    max_vertex=args.mesh_size,
                                    oct_tree=args.mesh_octree_depth,
                                    samples=1.0,
                                    point_weight=4.0,
                                    max_concurrency=args.max_concurrency,
                                    verbose=args.verbose)
        texturing = ODMMvsTexStage('mvs_texturing', args, progress=70.0,
                                    data_term=args.texturing_data_term,
                                    outlier_rem_type=args.texturing_outlier_removal_type,
                                    skip_glob_seam_leveling=args.texturing_skip_global_seam_leveling,
                                    skip_loc_seam_leveling=args.texturing_skip_local_seam_leveling,
                                    tone_mapping=args.texturing_tone_mapping)
        georeferencing = ODMGeoreferencingStage('odm_georeferencing', args, progress=80.0,
                                                    gcp_file=args.gcp,
                                                    verbose=args.verbose)
        dem = ODMDEMStage('odm_dem', args, progress=90.0,
                            max_concurrency=args.max_concurrency,
                            verbose=args.verbose)
        orthophoto = ODMOrthoPhotoStage('odm_orthophoto', args, progress=98.0)
        report = ODMReport('odm_report', args, progress=100.0)

        # Normal pipeline
        self.first_stage = dataset

        dataset.connect(split) \
                .connect(merge) \
                .connect(opensfm)

        if args.use_opensfm_dense or args.fast_orthophoto:
            opensfm.connect(filterpoints)
        else:
            opensfm.connect(openmvs) \
                   .connect(filterpoints)
        
        filterpoints \
            .connect(meshing) \
            .connect(texturing) \
            .connect(georeferencing) \
            .connect(dem) \
            .connect(orthophoto) \
            .connect(report)
예제 #2
0
    def __init__(self, args):
        """
        Initializes the application and defines the ODM application pipeline stages
        """
        if args.debug:
            log.logger.show_debug = True

        json_log_paths = [os.path.join(args.project_path, "log.json")]
        if args.copy_to:
            json_log_paths.append(args.copy_to)

        log.logger.init_json_output(json_log_paths, args)

        dataset = ODMLoadDatasetStage('dataset',
                                      args,
                                      progress=5.0,
                                      verbose=args.verbose)
        split = ODMSplitStage('split', args, progress=75.0)
        merge = ODMMergeStage('merge', args, progress=100.0)
        opensfm = ODMOpenSfMStage('opensfm', args, progress=25.0)
        openmvs = ODMOpenMVSStage('openmvs', args, progress=50.0)
        filterpoints = ODMFilterPoints('odm_filterpoints', args, progress=52.0)
        meshing = ODMeshingStage('odm_meshing',
                                 args,
                                 progress=60.0,
                                 max_vertex=args.mesh_size,
                                 oct_tree=max(1, min(14,
                                                     args.mesh_octree_depth)),
                                 samples=1.0,
                                 point_weight=4.0,
                                 max_concurrency=args.max_concurrency,
                                 verbose=args.verbose)
        texturing = ODMMvsTexStage(
            'mvs_texturing',
            args,
            progress=70.0,
            data_term=args.texturing_data_term,
            outlier_rem_type=args.texturing_outlier_removal_type,
            skip_glob_seam_leveling=args.texturing_skip_global_seam_leveling,
            skip_loc_seam_leveling=args.texturing_skip_local_seam_leveling,
            keep_unseen_faces=args.texturing_keep_unseen_faces,
            tone_mapping=args.texturing_tone_mapping)
        georeferencing = ODMGeoreferencingStage('odm_georeferencing',
                                                args,
                                                progress=80.0,
                                                gcp_file=args.gcp,
                                                verbose=args.verbose)
        dem = ODMDEMStage('odm_dem',
                          args,
                          progress=90.0,
                          max_concurrency=args.max_concurrency,
                          verbose=args.verbose)
        orthophoto = ODMOrthoPhotoStage('odm_orthophoto', args, progress=98.0)
        report = ODMReport('odm_report', args, progress=99.0)
        postprocess = ODMPostProcess('odm_postprocess', args, progress=100.0)

        # Normal pipeline
        self.first_stage = dataset

        dataset.connect(split) \
                .connect(merge) \
                .connect(opensfm)

        if args.fast_orthophoto:
            opensfm.connect(filterpoints)
        else:
            opensfm.connect(openmvs) \
                   .connect(filterpoints)

        filterpoints \
            .connect(meshing) \
            .connect(texturing) \
            .connect(georeferencing) \
            .connect(dem) \
            .connect(orthophoto) \
            .connect(report) \
            .connect(postprocess)