DJI Phantom 4 Multispectral matching failed in engine version 2.4.1

I’m having trouble using ODM v 2.4.1 to process multispectral images from the DJI Phantom 4. I’m using nodeODM on docker, windows 10. Here’s the end part of output message:

[WARNING] Cannot find DJI_1351.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
[WARNING] Cannot find DJI_1221.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
[WARNING] Cannot find DJI_0791.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
[WARNING] Cannot find DJI_1311.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
[WARNING] Cannot find DJI_0611.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
[WARNING] Cannot find DJI_1371.TIF.tif in image map for /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm
Traceback (most recent call last):
File “/code/run.py”, line 69, in
app.execute()
File “/code/stages/odm_app.py”, line 83, in execute
self.first_stage.run()
File “/code/opendm/types.py”, line 360, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 360, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 360, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 341, in run
self.process(self.args, outputs)
File “/code/stages/run_opensfm.py”, line 182, in process
nvm.replace_nvm_images(tree.opensfm_reconstruction_nvm, img_map, nvm_file)
File “/code/opendm/nvm.py”, line 35, in replace_nvm_images
raise Exception(“Cannot write %s, not all band images have been matched” % dst_nvm_file)
Exception: Cannot write /var/www/data/d7bf333b-c4e9-4521-a005-7addd86d6db0/opensfm/undistorted/reconstruction_blue.nvm, not all band images have been matched

I also attached my data and log:
Phantom 4 Multispectral matching failed

The problem seems to be that ODM’s having issues grouping together the bands from the set of photos. It normally uses capture time by default (when you take a shot, if multiple sensors are used, they will all share the same capture time, at least in theory). When that doesn’t work, ODM falls back to filename conventions (e.g. DJI_XXXX_1DJI_XXXX_2, but here that filename pattern is missing, so everything falls apart).

[WARNING] Unreliable capture time detected (duplicate), will use filenames instead

It looks like DJI now includes a Capture UUID tag to store this information.

It needs to be parsed and used for this particular sensor.

Capture UUID                    : 1ff19ce2222a11eaba2b920448d49304

The joys of ever-evolving not-so-standards. :stuck_out_tongue:

What’s not to love? Especially when it is only semi-documented :stuck_out_tongue:

Try with these changes (wait until docker images have rebuilt, then update and reprocess, the new version should read 2.4.3): Add support for drone-dji:CaptureUUID tags by pierotofy · Pull Request #1231 · OpenDroneMap/ODM · GitHub

I haven’t tested the reconstruction, but I have a feeling it will work a lot better.

So, the temporary solution is rename the file according to the pattern, right? Any suggestions for batch renaming?

If you’re on Windows 10, you might try the PowerToys Renamer.

I prefer ReNamer by den4b, myself.

If you download the latest version of the software renaming shouldn’t be needed and it should just work.

Ok, thank you all