OpenStreetMap logo OpenStreetMap

Mapillary Bilder aus Gopro Max 360° Video extrahieren

Posted by cyton on 2 June 2023 in German (Deutsch). Last updated on 20 June 2023.

Die GoPro Max kann im Intervall von zwei Sekunden ein Bild machen, im Modus “360° Zeitraffer”. Diese Bilder werden einzeln, fertig gestitcht, mit GPS Koordinaten und GPS Zeitstempel auf der SD-Karte gespeichert. Das ist schön, wenn man diese zu KartaView oder Mapillary hochladen mag, oder in JOSM einlesen zum Mappen zu Hause.

Mich stört daran, dass das minimale Intervall 2sec. ist, und nicht wie auf anderen GoPros (wie der Hero 8 Black) alle 0,5sec.

Aber die GoPro Max kann ja auch Video aufnehmen in 360°!

Das hat dann auch Ton, aber, soweit ich weiß, keine GPS-Spur.

Aber das Video enthält zwei Video-Spuren, die z.B. VLC einzeln abspielen kann, also nicht direkt ein fertiges 360° Video!

Vorgehen

Eine Lösung für das nachträgliche Stitchen der Videos ist die Software von GoPro selber: https://gopro.com/de/de/info/gopro-player Die gibt es aber nicht für Linux, und muss manuell per GUI bedient werden.

Diese kann aber aus den *.360 Dateien von der SD-Karte *.mov Dateien Stitchen, welche als normale 360° Videos abspielbar sind.

Jedoch braucht es noch eine Georeferenzierung für das Video, also muss ich separat eine GPS-Spur aufnehmen. Das geht mit OsmAnd (in Zukunft dann bei solchen Aktionen mit kontinuierlicher Auflösung und nicht nur alle 1 sec. ein Punkt) auf dem Handy.

Mit den mapillary_tools kann man aus einem Video alle x-beliebige Sekunden Frames samplen, also einzelne Bilder extrahieren.

z.B. so: mapillary_tools video_process GS025642.mov --geotag_source "gpx" --geotag_source_path gpx-path.gpx --video_sample_distance -1 --video_sample_interval 0.1 --skip_process_errors --interpolation_use_gpx_start_time

Danach habe ich einen Ordner mit den extrahierten Frames und eine mapillary_sampled_video_frames/mapillary_image_description.json Datei mit den Zeitstempeln und der Geolokalisierung pro extrahiertem Frame.

Diese ist aber versetzt, da Video und gpx-Track nicht exakt gleichzeitig gestartet wurden.

Ich habe mir ein Python-Script geschrieben, welches die Daten aus der JSON-Datei in die EXIF-Daten der einzelnen Bilder schreibt, damit ich diese nachträglich manuell in JOSM versetzen kann.

Nun kann man die Bilder und die gpx-Spur in JOSM öffnen und die Korrelation korrigieren, also an die korrekte Position auf der Spur verschieben.

Dazu braucht es das JOSM-Plugin Photo Geotagging, um die neuen Koordinaten auch wieder in den Bilddateien speichern zu können.

Jetzt kann man noch Bilder am Anfang oder Ende löschen, oder zwischendurch welche herausnehmen, die zu nah aneinander sind.

Das ganze dann hochladen zu Mapillary und fertig: https://www.mapillary.com/app/?pKey=776980050706298&focus=photo

Probleme

Ein Problem ist die Qualität der Bilder, die ist schlechter als bei einzeln aufgenommenen Bildern.

Auch ist die Auflösung geringer, da die Video-Streams eine geringere vertikale Auflösung haben (warum auch immer), also ist das gestitchte Video auch kleiner.

  • Video / Bilder: 5376 x 2688 Pixel = 14.45 megapixels
  • Einzelne Bilder: 5760 x 2880 Pixel = 16.59 megapixels
    • Beide mit Seitenverhältnis 2:1

Außerdem möchte ich Bilder die nah aneinander liegen automatisiert erkennen, das macht zwar das Mapillary Tool auch, aber sehr schlecht, und markiert sehr viele (vor allem nacheinander, und anderswo keine) als fehlerhaft, bzw. als zu nah beieinander.

Das habe ich auch schon bei den fertige 2sec. Bildern gemacht, wenn ich an Ampeln warte, etc. werden viele Bilder an derselben Stelle gemacht, die sind überflüssig.

Das Extrahieren der Frames passiert zu JPEG; https://github.com/mapillary/mapillary_tools/blob/a3964b6918fbbcd97c08a0db1677f4e61cbbcdb6/mapillary_tools/ffmpeg.py#L20 FRAME_EXT = ".jpg" Ich weiß nicht, ob das bei PNG bessere Qualität liefern würde, oder ob eine bessere Komprimierung für die JPEG einstellbar ist, seitens FFMPEG ja, aber das ist nicht angegeben im Mapillary code: https://github.com/mapillary/mapillary_tools/blob/a3964b6918fbbcd97c08a0db1677f4e61cbbcdb6/mapillary_tools/ffmpeg.py#L269

194 & 269: # -q:v=1 is the best quality but larger image sizes

Warum, weiß ich nicht.

Über Kommentare und Verbesserungsvorschläge bin ich dankbar.

Location: 13465, Frohnau, Reinickendorf, Berlin, Deutschland

Discussion

Comment from gnesss on 11 June 2023 at 18:48

Does the video also do “horizon levelling” for you? The 2 second photo time lapse does not! Very annoying.

Comment from cyton on 11 June 2023 at 19:34

I did enable that setting (if it exists) in the gopro software while stitching, though I don’t remember if it did a good job. Maybe there is also an option to enable it while taking the video, I think there has to be some metadata to do that.

But from some quality comparisons after the fact I would only do this kind of dense imagery taking if there is a reason for it, and if other better quality 2s images already exist.

Log in to leave a comment