Georef fail on ODM ('list' object has no attribute 'georef')


#1

I’ve been testing WebODM with great success lately (via a docker container). On the same cloud server, I elected to install ODM natively and seemed to have got it up and running. I’ve tried to run a project with 183 geo-reffed images from a DJI Phantom 4 flight, but the process failed at the “geo-reffing” step. When the process failed, I received the following error:

Saving georeference system file to ‘/root/Projects/TestSite002/odm_georeferencing/odm_georeferencing_model_geo.txt’…
… georeference system saved.
Traceback (most recent call last):
File “run.py”, line 47, in
plasm.execute(niter=1)
File “/root/OpenDroneMap/scripts/odm_georeferencing.py”, line 136, in process
geo_ref = reconstruction.georef
AttributeError: ‘list’ object has no attribute ‘georef’

I would appreciate any guidance on how to prevent this failure.

FYI - here is a dropbox folder that contains the full console output of the process & a txt file containing my python run command with parameters:

thx

-Brian


#2

Thanks for sharing your dataset. We’ll look into it and get back to you, I’ve never seen this error before and might be a bug due to recent changes.


#3

Thanks for the response Piero. I did a few more tests and it appears like the issue is related to my election to use PMVS to create the point cloud (I find that PMVS produces better point clouds and is my preferred method.)

If I run the same process but do NOT elect to use PMVS, the process runs to completion. However, if I switch to PMVS I can successfully reproduce the error at Georeferencing.

What’s odd, is that I can successfully process the same set of photos consistently using WebODM and selecting PMVS for point cloud creation. The issue is only occurring when I run command line ODM. My preference for running ODM is that I can also set the number of cores (precessors) to use with PMVS which isn’t a setting option in WebODM (which then leaves PMVS to run on a single processor, which is not ideal for processing times).

I’m updating the dropbox folder to include benchmark.txt files between a std run and a PMVS run:

The process is clearly running into an issue at Georeferencing (presumably with something to do with the PMVS generated point cloud)… here’s a code snippet from the .py script where the error originates:
if doPointCloudGeo:
# update images metadata
geo_ref = reconstruction.georef
geo_ref.parse_transformation_matrix(tree.opensfm_transformation)

                # convert ply model to LAS reference system
                geo_ref.convert_to_las(odm_georeferencing_model_ply_geo,
                                       tree.odm_georeferencing_model_las,
                                       tree.odm_georeferencing_las_json)

                reconstruction.georef = geo_ref

Areal model river valley - how to use WebODM
#4

Thanks for the additional insights! Seems like a problem with PMVS like you say.

Note that while using WebODM the pmvs-num-cores setting is always set to use all available cores (that’s why it’s not shown): https://github.com/OpenDroneMap/node-OpenDroneMap/blob/master/libs/Task.js#L357

Could you open an issue on Github at https://github.com/OpenDroneMap/OpenDroneMap/issues for this? You don’t have to rewrite the entire description, just add a link to this thread.


#5

Hello
I also received this error and confirm that the ortho mosaic worked when I did not click PMVS as an option. Thank you for this!
This is the output from a 100 image task which returned the error when I did include PMVS as an option and a link to the imagery:
Onedrive link
Imagery: https://1drv.ms/u/s!AsDrAVdsoyVVuyW8vQnyp3qVxz1q
Full task output: https://1drv.ms/t/s!AsDrAVdsoyVVuyZq6XxY1N5Q7jQQ

Task TGPP411 Im100 CPUred25gb Partial Error Output:
Running local seam leveling:

Building objmodel:
Saving model…
Whole texturing procedure took: 43.246s
[INFO] Running ODM Texturing Cell - Finished
[INFO] Running ODM Georeferencing Cell
[INFO] Running georeferencing with OpenSfM transformation matrix
[DEBUG] running /code/build/bin/odm_georef -bundleFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/opensfm/bundle_r000.out -inputTransformFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/opensfm/geocoords_transformation.txt -inputFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_texturing/odm_textured_model.obj -outputFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_texturing/odm_textured_model_geo.obj -inputPointCloudFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/pmvs/recon0/models/option-0000.ply -outputPointCloudFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_georeferencing/odm_georeferenced_model.ply -logFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_georeferencing/odm_georeferencing_log.txt -outputTransformFile /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_georeferencing/odm_georeferencing_transform.txt -georefFileOutputPath /var/www/data/03eee89f-87b1-4921-88b5-19342bbe0112/odm_georeferencing/odm_georeferencing_model_geo.txt

File “/code/run.py”, line 47, in
plasm.execute(niter=1)
File “/code/scripts/odm_georeferencing.py”, line 136, in process
geo_ref = reconstruction.georef
AttributeError: ‘list’ object has no attribute ‘georef’