OpenDroneMap-ODM/scripts/odm_app.py

101 wiersze
4.5 KiB
Python

import os
from opendm import context
from opendm import types
from opendm import io
from opendm import system
from opendm import log
from dataset import ODMLoadDatasetStage
from run_opensfm import ODMOpenSfMStage
from mve import ODMMveStage
from odm_slam import ODMSlamStage
from odm_meshing import ODMeshingStage
from mvstex import ODMMvsTexStage
from odm_georeferencing import ODMGeoreferencingStage
from odm_orthophoto import ODMOrthoPhotoStage
from odm_dem import ODMDEMStage
from odm_filterpoints import ODMFilterPoints
from splitmerge import ODMSplitStage, ODMMergeStage
class ODMApp:
def __init__(self, args):
"""
Initializes the application and defines the ODM application pipeline stages
"""
dataset = ODMLoadDatasetStage('dataset', args,
verbose=args.verbose,
proj=args.proj)
split = ODMSplitStage('split', args)
merge = ODMMergeStage('merge', args)
opensfm = ODMOpenSfMStage('opensfm', args)
slam = ODMSlamStage('slam', args)
mve = ODMMveStage('mve', args)
filterpoints = ODMFilterPoints('odm_filterpoints', args)
meshing = ODMeshingStage('odm_meshing', args,
max_vertex=args.mesh_size,
oct_tree=args.mesh_octree_depth,
samples=args.mesh_samples,
point_weight=args.mesh_point_weight,
max_concurrency=args.max_concurrency,
verbose=args.verbose)
texturing = ODMMvsTexStage('mvs_texturing', args,
data_term=args.texturing_data_term,
outlier_rem_type=args.texturing_outlier_removal_type,
skip_vis_test=args.texturing_skip_visibility_test,
skip_glob_seam_leveling=args.texturing_skip_global_seam_leveling,
skip_loc_seam_leveling=args.texturing_skip_local_seam_leveling,
skip_hole_fill=args.texturing_skip_hole_filling,
keep_unseen_faces=args.texturing_keep_unseen_faces,
tone_mapping=args.texturing_tone_mapping)
georeferencing = ODMGeoreferencingStage('odm_georeferencing', args,
gcp_file=args.gcp,
use_exif=args.use_exif,
verbose=args.verbose)
dem = ODMDEMStage('odm_dem', args,
max_concurrency=args.max_concurrency,
verbose=args.verbose)
orthophoto = ODMOrthoPhotoStage('odm_orthophoto', args,
resolution=args.orthophoto_resolution,
no_tiled=args.orthophoto_no_tiled,
compress=args.orthophoto_compression,
bigtiff=args.orthophoto_bigtiff,
build_overviews=args.build_overviews,
max_concurrency=args.max_concurrency,
verbose=args.verbose)
if not args.video:
# 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(mve) \
.connect(filterpoints)
filterpoints \
.connect(meshing) \
.connect(texturing) \
.connect(georeferencing) \
.connect(dem) \
.connect(orthophoto)
else:
# SLAM pipeline
# TODO: this is broken and needs work
log.ODM_WARNING("SLAM module is currently broken. We could use some help fixing this. If you know Python, get in touch at https://community.opendronemap.org.")
self.first_stage = slam
slam.connect(mve) \
.connect(meshing) \
.connect(texturing)
def execute(self):
self.first_stage.run()