Running WebODM on Windows 10 with Docker, using Microsoft Edge and Firefox.
Continuing the discussion about processing MicaSense imagery here and here. Especially pierotofy’s comment.
Attempted workflow:
Raw imagery > MicaSense imageprocessing > band stack tif > WebODM > orthomosaic
Output test images from MicaSense imageprocessing are here.
Using the Default
processing mode yields the error:
[INFO] Initializing ODM - Wed Mar 31 18:04:05 2021
[INFO] ==============
[INFO] build_overviews: False
[INFO] camera_lens: auto
[INFO] cameras: {}
[INFO] crop: 3
[INFO] debug: False
[INFO] dem_decimation: 1
[INFO] dem_euclidean_map: False
[INFO] dem_gapfill_steps: 3
[INFO] dem_resolution: 5
[INFO] depthmap_resolution: 640
[INFO] dsm: True
[INFO] dtm: False
[INFO] end_with: odm_report
[INFO] fast_orthophoto: False
[INFO] feature_quality: high
[INFO] feature_type: sift
[INFO] force_gps: False
[INFO] gcp: None
[INFO] geo: None
[INFO] gps_accuracy: 10
[INFO] ignore_gsd: False
[INFO] matcher_distance: 0
[INFO] matcher_neighbors: 8
[INFO] matcher_type: flann
[INFO] max_concurrency: 32
[INFO] merge: all
[INFO] mesh_octree_depth: 11
[INFO] mesh_size: 200000
[INFO] min_num_features: 8000
[INFO] name: 5d2eac27-1d89-43b9-9f08-ca38cbc1dde6
[INFO] optimize_disk_space: False
[INFO] orthophoto_compression: DEFLATE
[INFO] orthophoto_cutline: False
[INFO] orthophoto_no_tiled: False
[INFO] orthophoto_png: False
[INFO] orthophoto_resolution: 5
[INFO] pc_classify: False
[INFO] pc_csv: False
[INFO] pc_ept: False
[INFO] pc_filter: 2.5
[INFO] pc_las: False
[INFO] pc_quality: medium
[INFO] pc_rectify: False
[INFO] pc_sample: 0
[INFO] pc_tile: False
[INFO] primary_band: auto
[INFO] project_path: /var/www/data
[INFO] radiometric_calibration: none
[INFO] rerun: None
[INFO] rerun_all: False
[INFO] rerun_from: None
[INFO] resize_to: 2048
[INFO] skip_3dmodel: False
[INFO] skip_band_alignment: False
[INFO] skip_report: False
[INFO] sm_cluster: None
[INFO] smrf_scalar: 1.25
[INFO] smrf_slope: 0.15
[INFO] smrf_threshold: 0.5
[INFO] smrf_window: 18.0
[INFO] split: 999999
[INFO] split_image_groups: None
[INFO] split_overlap: 150
[INFO] texturing_data_term: gmi
[INFO] texturing_outlier_removal_type: gauss_clamping
[INFO] texturing_skip_global_seam_leveling: False
[INFO] texturing_skip_local_seam_leveling: False
[INFO] texturing_tone_mapping: none
[INFO] tiles: False
[INFO] time: False
[INFO] use_3dmesh: False
[INFO] use_exif: False
[INFO] use_fixed_camera_params: False
[INFO] use_hybrid_bundle_adjustment: False
[INFO] verbose: False
[INFO] ==============
[INFO] Running dataset stage
[INFO] Loading dataset from: /var/www/data/5d2eac27-1d89-43b9-9f08-ca38cbc1dde6/images
[INFO] Loading 123 images
[WARNING] Cannot read /var/www/data/5d2eac27-1d89-43b9-9f08-ca38cbc1dde6/images/PH4Rh4OMhUC0J8to3r0J.tif with PIL, fallback to cv2: cannot identify image file '/var/www/data/5d2eac27-1d89-43b9-9f08-ca38cbc1dde6/images/PH4Rh4OMhUC0J8to3r0J.tif'
imread_('/var/www/data/5d2eac27-1d89-43b9-9f08-ca38cbc1dde6/images/PH4Rh4OMhUC0J8to3r0J.tif'): can't read header: OpenCV(4.5.0) /code/SuperBuild/src/opencv/modules/imgcodecs/src/grfmt_tiff.cpp:148: error: (-215:Assertion failed) channels <= 4 in function 'normalizeChannelsNumber'
Traceback (most recent call last):
File "/code/opendm/get_image_size.py", line 13, in get_image_size
with Image.open(file_path) as img:
File "/usr/local/lib/python3.8/dist-packages/PIL/Image.py", line 2943, in open
raise UnidentifiedImageError(
PIL.UnidentifiedImageError: cannot identify image file '/var/www/data/5d2eac27-1d89-43b9-9f08-ca38cbc1dde6/images/PH4Rh4OMhUC0J8to3r0J.tif'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/code/run.py", line 68, in <module>
app.execute()
File "/code/stages/odm_app.py", line 81, in execute
self.first_stage.run()
File "/code/opendm/types.py", line 319, in run
self.process(self.args, outputs)
File "/code/stages/dataset.py", line 109, in process
p = types.ODM_Photo(f)
File "/code/opendm/photo.py", line 80, in __init__
self.parse_exif_values(path_file)
File "/code/opendm/photo.py", line 260, in parse_exif_values
self.width, self.height = get_image_size.get_image_size(_path_file)
File "/code/opendm/get_image_size.py", line 19, in get_image_size
width = img.shape[1]
AttributeError: 'NoneType' object has no attribute 'shape'
It looks like ODM is having a difficult time opening the band stack tifs output from MicaSense imageprocessing. The same occurs when I skip-band-alignment
.
Here’s some relevant MicaSense code where the tifs are written (with GDAL):
driver = GetDriverByName('GTiff')
out_raster = driver.Create(outfile_name, cols, rows, bands, GDT_UInt16,
options=['INTERLEAVE=BAND', 'COMPRESS=DEFLATE', f'PHOTOMETRIC={photometric}'])
Any guesses?