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

1 Like

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
2 Likes

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:

2 Likes

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

2 Likes

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.

3 Likes

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.

2 Likes

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

2 Likes

Ok, thank you all

2 Likes