From a80de54e922cbe606f3670c8a6c7d30eaa8d5b3c Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Sun, 3 Jun 2018 21:01:04 -0400 Subject: [PATCH] Fixed CSV export, added pc-csv flag --- opendm/config.py | 5 +++++ scripts/odm_georeferencing.py | 30 +++++++++++++++++++----------- scripts/run_opensfm.py | 7 ------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/opendm/config.py b/opendm/config.py index 52a1f5df..15d0e367 100644 --- a/opendm/config.py +++ b/opendm/config.py @@ -334,6 +334,11 @@ def config(): 'Default: ' '%(default)s') + parser.add_argument('--pc-csv', + action='store_true', + default=False, + help='Export the georeferenced point cloud in CSV format. Default: %(default)s') + parser.add_argument('--texturing-data-term', metavar='', default='gmi', diff --git a/scripts/odm_georeferencing.py b/scripts/odm_georeferencing.py index 0c7263bc..42f8b0a4 100644 --- a/scripts/odm_georeferencing.py +++ b/scripts/odm_georeferencing.py @@ -1,6 +1,7 @@ import ecto import csv import os +import struct from opendm import io from opendm import log @@ -143,21 +144,28 @@ class ODMGeoreferencingCell(ecto.Cell): reconstruction.georef = geo_ref # XYZ point cloud output - log.ODM_INFO("Creating geo-referenced CSV file (XYZ format)") - with open(tree.odm_georeferencing_xyz_file, "wb") as csvfile: - csvfile_writer = csv.writer(csvfile, delimiter=",") - reachedpoints = False - with open(odm_georeferencing_model_ply_geo) as f: - for lineNumber, line in enumerate(f): - if reachedpoints: - tokens = line.split(" ") + if args.pc_csv: + log.ODM_INFO("Creating geo-referenced CSV file (XYZ format)") + with open(tree.odm_georeferencing_xyz_file, "wb") as csvfile: + csvfile_writer = csv.writer(csvfile, delimiter=",") + with open(odm_georeferencing_model_ply_geo) as f: + endianess = '<' # little endian + while True: + line = f.readline() + if "binary_big_endian" in line: + endianess = '>' + if line.startswith("end_header"): + break + + while True: + chunk = f.read(27) # 3 doubles, 3 uints + if len(chunk) < 27: + break + tokens = struct.unpack(' 0: log.ODM_INFO("Calculating cropping area and generating bounds shapefile from point cloud") diff --git a/scripts/run_opensfm.py b/scripts/run_opensfm.py index af31d572..2f02a101 100644 --- a/scripts/run_opensfm.py +++ b/scripts/run_opensfm.py @@ -136,13 +136,6 @@ class ODMOpenSfMCell(ecto.Cell): log.ODM_WARNING('Found a valid OpenSfM reconstruction file in: %s' % tree.opensfm_reconstruction) - if not io.file_exists(tree.opensfm_reconstruction_meshed) or rerun_cell: - system.run('PYTHONPATH=%s %s/bin/opensfm mesh %s' % - (context.pyopencv_path, context.opensfm_path, tree.opensfm)) - else: - log.ODM_WARNING('Found a valid OpenSfM meshed reconstruction file in: %s' % - tree.opensfm_reconstruction_meshed) - if not args.use_pmvs: if not io.file_exists(tree.opensfm_reconstruction_nvm) or rerun_cell: system.run('PYTHONPATH=%s %s/bin/opensfm export_visualsfm %s' %