Skip to content

List geotagging warnings in the process report - #945

Merged
caglarpir merged 3 commits into
mapillary:mainfrom
caglarpir:report-process-warnings
Oct 30, 2026
Merged

caglarpir merged 3 commits into
mapillary:mainfrom
caglarpir:report-process-warnings

Conversation

@caglarpir

Copy link
Copy Markdown
Contributor

Stacked on #944; review the last commit.

The process report (--process_report_path) gains a warnings list: one entry for each warning that geotagging gave a file it still geotagged. An application that runs process can show them to the user in its own words, keyed by type and filled in from vars:

{
  "schema_version": 1,
  "discovered_file_count": 1,
  "processed_file_count": 1,
  "skipped_file_count": 0,
  "skipped_files": [],
  "warnings": [
    {
      "filename": "/captures/clip.mp4",
      "type": "MapillaryGPXAlignmentWarning",
      "message": "The GPX track in /captures/track.gpx lasts 1.6 minutes and the video /captures/clip.mp4 5.76 seconds, so the track is assumed to start with the video. Please align the video start time with the GPX track: trim the GPX to the video, or sample the video with video_process and --video_start_time. If the video is a timelapse, its GPX track is expected to last longer, and is uploaded whole",
      "vars": {
        "video_duration": 5.759,
        "gpx_duration": 93.624,
        "gpx_start_time": "2025_03_14_07_00_00_000",
        "gpx_end_time": "2025_03_14_07_01_33_624",
        "gpx_longer": true
      }
    }
  ]
}

type is the class name of the warning and vars its attributes, as for the errors in the description file. The first warning listed is MapillaryGPXAlignmentWarning (previous PR): durations in seconds, times as capture times, and gpx_longer true when the track lasts longer than the video, so it may be that of a timelapse.

The video metadata carries its warnings back from the geotagging worker processes. The report is still written before processing starts, and again once geotagging has run, so a file that later fails validation keeps its warning next to its error. A report without warnings has "warnings": []. The schema version stays 1: the key is new, and readers that ignore unknown keys are unaffected.

Only process (and process_and_upload) lists warnings. video_process reports on the sampled images, and the warnings of sampling are only logged.

Tests: unit and integration suites, with and without ExifTool.

@meta-cla meta-cla Bot added the cla signed label Oct 29, 2026
…apillary#940)

This reverts the merge of mapillary#940 (3fcf6ca), back to main as it was
after mapillary#939.

mapillary#940 placed a GPX track along a video without GPS timestamps by the
video's creation time. It was decided, after mapillary#940 was opened, that the
creation time, which comes from the camera's clock, is never to be used
to place a track: only a video's own GPS timestamps and its duration
are. mapillary#944 handles videos without GPS timestamps that way instead,
warning when the video and the track differ in length, and is stacked
on mapillary#939, so it applies once mapillary#940 is reverted.
A video without a GPS clock of its own gives no trustworthy time to place a
GPX track by: its creation time and file times come from the camera's clock.
The track, whose times come from GPS, is then assumed to start with the video,
in process and in video_process alike.

When the track lasts more than a minute longer or shorter than the video,
geotagging warns that the video start time needs aligning with the track,
with what to do about it. A longer track warns only if it also lasts more
than 1.5 times as long as the video, and the warning mentions timelapses,
whose tracks last longer by design. Nothing is refused any more: sampling
used to refuse a track that ran on past twice the video, and now places it
from its start as process does. With --interpolation_offset_time the offset
places the video along the track, and nothing is warned of.

The warning is a MapillaryGPXAlignmentWarning, kept by the extractor with
the durations and times of the track and the video, for a later change to
pass on to the process report.

Interval sampling stamps the samples of such a video from the start of the
GPX track that geotags them, rather than from its creation time, which it
now only falls back to for a video with neither a GPS clock nor a track.
The process report (--process_report_path) gains a "warnings" list: one entry
for each warning that geotagging gave a file it still geotagged, with the
file name, the class name of the warning as its type, its message, and its
attributes as vars, as errors are written to the description file. An
application that runs process can show these warnings to the user in its
own words, keyed by type and filled in from vars.

The first such warning is MapillaryGPXAlignmentWarning: a GPX track assumed
to start with a video without a GPS clock lasts longer or shorter than the
video. Its vars are video_duration and gpx_duration in seconds,
gpx_start_time and gpx_end_time as capture times, and gpx_longer, which is
true when the track may be that of a timelapse.

The video metadata carries its warnings back from the geotagging worker
processes. The report is still written before processing starts, and again
once geotagging has run. A report without warnings has an empty list, and
the schema version stays 1: the key is new, and readers that ignore unknown
keys are unaffected.
@caglarpir
caglarpir force-pushed the report-process-warnings branch from 2cf2c4d to b0a2507 Compare October 30, 2026 09:28
@caglarpir
caglarpir merged commit bdf8bac into mapillary:main Oct 30, 2026
30 of 31 checks passed
caglarpir added a commit to caglarpir/mapillary_tools that referenced this pull request Oct 30, 2026
- A track assumed to start with a video without GPS is never refused
  for its length, in process or in sampling, and the creation time is
  never used to place it: a MapillaryGPXAlignmentWarning says when the
  track and the video differ in length (mapillary#944). Only
  --interpolation_use_gpx_start_time still refuses a long track.
- A file that a GPX or NMEA track missed fails with the miss when no
  later source geotags it (mapillary#938).
- The process report lists the geotagging warnings (mapillary#945).
- upload caches the checksums of the files, and shows progress while
  computing them (mapillary#942, mapillary#943).
caglarpir added a commit to caglarpir/mapillary_tools that referenced this pull request Oct 30, 2026
A GPX is assumed to start with a video without GPS, in process and in
every kind of sampling, with a warning when the two differ in length,
and is never placed by the creation time: only
--interpolation_use_gpx_start_time still refuses a long track, in
video_process. The process report lists the geotagging warnings.
caglarpir added a commit to caglarpir/mapillary_tools that referenced this pull request Nov 2, 2026
process writes the report before processing starts, and again with the
warnings once geotagging has run (mapillary#945).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant