mapillary / mapillary_tools

Command line tools for processing and uploading Mapillary imagery
BSD 2-Clause "Simplified" License
267 stars 138 forks source link

upload trips over GoPro Hero 9 spaces in sub_sec field #388

Closed breunigs closed 2 years ago

breunigs commented 3 years ago

Basic information

Steps to reproduce behavior

I uploaded an attached image that fails to extract time taken because of the space in the subseconds field. I'm using

mapillary_tools process_and_upload --import_path --user_name breunigs --advanced --interpolate_direction

G0256237

Expected behavior

It parses the subseconds just fine.

Actual behavior

It fails with Warning, required geotag_process failed for image bla.JPG, skipping the image. More generic error messages are repeated later.

Additional information

I hacked in a sub_sec.strip() https://github.com/mapillary/mapillary_tools/blob/d0544d0475fbe9fb44edbadf7479debd0a409ac3/mapillary_tools/exif_read.py#L202 and this seems to fix the issue… well, I only take pictures once every second, so even if this is not a proper fix, I might not see it.

I can provide more images if you want to test more. Images around the same area+time as the provided example one are being uploaded right now, if that's more convenient for you.

ptpt commented 3 years ago

Thanks for reporting the issue and providing the test data!

Stefal commented 3 years ago

Warning ! It's a bug from Gopro, and this "hack" could generate some other problems as the subsecond is wrong! I've reported this problem to Gopro here: https://community.gopro.com/t5/Cameras/subsecond-timestamp-bug/m-p/1057505

ptpt commented 3 years ago

Thanks @Stefal for the information. What problem do you think it will cause? I will reopen it and investigate it later.

Stefal commented 3 years ago

If the real subsec value is an equivalent of 5ms, it will be stored in the Gopro image as . 50 and converted to .50. It is a 495ms offset. I see two solutions:

None of these solution is good.

I have my own script to fix this, it checks the length of the subsectimeoriginal value and insert some 0 if needed.

So you can insert some code in the mapillary-tools to check this:

But that's a lot of work for only one cam, with a bug which should be fix soon... I hope...

btw: @breunigs, feel free to add some pressure on Gopro, and explain that this bug is a problem for you too.