I’m trying to process a large-ish (~1500 images) dataset to obtain a high-quality orthophoto. The images are all geo-referenced using an external RTK GPS. I am feeding those positions into ODM using a geo.txt
file and running with --force-gps
. Because the dataset is large, I am also splitting it into 400-image chunks.
The initial processing (pre-split) seems to work fine, and ODM informs me that it can find and use my provided georeferencing information:
[INFO] Running dataset stage │[email protected] submodels$ ls
[INFO] Loading dataset from: /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/images
[INFO] Loading 1584 images │[email protected] submodels$ cd submodel_0001/
[INFO] Found image geolocation file │[email protected] submodel_0001$ ls
[INFO] Parsing SRS header: EPSG:4326
[INFO] Updated 1584 image positions
However, when it starts processing the submodels, it suddenly decides that it can’t find GPS info:
[INFO] ==============
[INFO] Running dataset stage
[INFO] Loading dataset from: /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/images
[INFO] Loading 579 images
[INFO] Wrote images database: /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/images.json
[INFO] Found 579 usable images
[WARNING] GPS position not available for P1780488.JPG
[WARNING] GPS position not available for P1780838.JPG
[WARNING] GPS position not available for P1790201.JPG
[WARNING] GPS position not available for P1780040.JPG
[WARNING] GPS position not available for P1780059.JPG
[WARNING] GPS position not available for P1780390.JPG
[WARNING] GPS position not available for P1780379.JPG
...
And, this then leads it to fail to produce any orthophoto at all:
[INFO] running lasmerge -i /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0001/odm_georeferencing/odm_georeferenced_model.laz /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/odm_georeferencing/odm_georeferenced_model.laz /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0002/odm_georeferencing/odm_georeferenced_model.laz /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0000/odm_georeferencing/odm_georeferenced_model.laz -o "/scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/odm_georeferencing/odm_georeferenced_model.laz"
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0001/odm_georeferencing/odm_georeferenced_model.bounds.gpkg from submodel submodel_0001
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/odm_georeferencing/odm_georeferenced_model.bounds.gpkg from submodel submodel_0003
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0002/odm_georeferencing/odm_georeferenced_model.bounds.gpkg from submodel submodel_0002
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0000/odm_georeferencing/odm_georeferenced_model.bounds.gpkg from submodel submodel_0000
[INFO] Merging all crop bounds: []
[WARNING] No bounds found for any submodel.
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0001/odm_orthophoto/odm_orthophoto_feathered.tif from submodel submodel_0001
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0001/odm_orthophoto/odm_orthophoto_cut.tif from submodel submodel_0001
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/odm_orthophoto/odm_orthophoto_feathered.tif from submodel submodel_0003
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0003/odm_orthophoto/odm_orthophoto_cut.tif from submodel submodel_0003
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0002/odm_orthophoto/odm_orthophoto_feathered.tif from submodel submodel_0002
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0002/odm_orthophoto/odm_orthophoto_cut.tif from submodel submodel_0002
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0000/odm_orthophoto/odm_orthophoto_feathered.tif from submodel submodel_0000
[WARNING] Missing /scratch/djp44210/odm_jeevan_field/2021-11-01_m100_5502815/submodels/submodel_0000/odm_orthophoto/odm_orthophoto_cut.tif from submodel submodel_0000
[WARNING] No orthophoto/cutline pairs were found in any of the submodels. No orthophoto will be generated.
I noticed that when creating the submodels, it doesn’t actually seem to copy the geo.txt
file from the root directory to the submodel directory. I wonder, is fixing this as simple as copying that file?
Unfortunately, I’m not authorized to publicly share the dataset that I’m processing.
These are the options I'm using for ODM.
--project-path ${PROJECT_DIR} \
--max-concurrency 32 \
--orthophoto-resolution 0.23 \
--fast-orthophoto \
--skip-3dmodel \
--matcher-distance 30 \
--split 400 \
--split-overlap 10 \
--texturing-skip-local-seam-leveling \
--orthophoto-compression JPEG \
--crop 0.0 \
--copy-to ${WORK_DIR}/${PROJECT_NAME}/${DATASET_NAME} \
--force-gps \