Split-merge on data with no GPS

I’m having a little trouble getting split-merge to work on images without GPS data. I’m not sure if I’m just being dense, or what. I’ve provided a manual list of groups to use for this workflow, and ODM seems to find it, as evidenced by the line Copied /scratch/djp44210/odm_jeevan_field/2021-08-27_m100_4354281/image_groups.txt to /scratch/djp44210/odm_jeevan_field/2021-08-27_m100_4354281/opensfm/image_groups.txt in the output.

However, I still get the following error after feature extraction:

/code/SuperBuild/install/bin/opensfm/opensfm/actions/create_submodels.py:80: RuntimeWarning: invalid value encountered in true_divide
  centers /= centers_count
/usr/local/lib/python3.8/dist-packages/numpy/core/fromnumeric.py:3372: RuntimeWarning: Mean of empty slice.
  return _methods._mean(a, axis=axis, dtype=dtype,
/usr/local/lib/python3.8/dist-packages/numpy/core/_methods.py:170: RuntimeWarning: invalid value encountered in true_divide
  ret = ret.dtype.type(ret / rcount)
Traceback (most recent call last):
  File "/code/SuperBuild/install/bin/opensfm/bin/opensfm_main.py", line 15, in <module>
    commands.command_runner(
  File "/code/SuperBuild/install/bin/opensfm/opensfm/commands/command_runner.py", line 38, in command_runner
    command.run(data, args)
  File "/code/SuperBuild/install/bin/opensfm/opensfm/commands/command.py", line 12, in run
    self.run_impl(data, args)
  File "/code/SuperBuild/install/bin/opensfm/opensfm/commands/create_submodels.py", line 11, in run_impl
    create_submodels.run_dataset(dataset)
  File "/code/SuperBuild/install/bin/opensfm/opensfm/actions/create_submodels.py", line 27, in run_dataset
    _add_cluster_neighbors(meta_data, data.config["submodel_overlap"])
  File "/code/SuperBuild/install/bin/opensfm/opensfm/actions/create_submodels.py", line 108, in _add_cluster_neighbors
    clusters = tools.add_cluster_neighbors(positions, labels, centers, max_distance)
  File "/code/SuperBuild/install/bin/opensfm/opensfm/large/tools.py", line 42, in add_cluster_neighbors
    reference = geo.TopocentricConverter(reflla[0], reflla[1], 0)
IndexError: invalid index to scalar variable.

I am running the following command:

docker://opendronemap/odm \
  --project-path /project \
  --max-concurrency 32 \
  --orthophoto-resolution 0.21 \
  --fast-orthophoto \
  --skip-3dmodel \
  --matcher-distance 30 \
  --split 600 \
  --split-overlap 0 \
  --texturing-skip-local-seam-leveling \
  --orthophoto-compression JPEG \
  --crop 0.0 \
  --copy-to output/project/dataset \
  --rerun-from split \
  dataset

The complete output from ODM is provided. Attached are some example photos. I regret that I cannot provide all the photos because I am not authorized to share them publicly.

P1580170 P1580183

1 Like

Do you have the geolocation data for the images in a textfile? I’m curious if it’d process better with that alongside the image groups txt you’re passing it.

I also expect that this would solve the problem. However, it is, unfortunately, not forthcoming. We are operating with a manually-triggered DSLR mounted on an M100. In the future, we plan to remedy this, but for now, there is a lot of data captured without GPS that we would like to be able to process.

1 Like

Pull your log out of the M100 and correlate it with the time on the camera. It will be a lot better than not having the locations and allow you to do split merge.

2 Likes

Thanks, this seems like a good suggestion. I’m not sure how accurate the camera timestamping is, but I’ll give it a shot.

2 Likes