Gopro : décalage longitudinal et comment recaler avec JOSM

Sur les Gopro Max, il semble que la position GPS soit prise après la prise de photo et surtout après le stitching de la photo et sa compression JPEG, ce qui globalement semble prendre environ 1.5s et est cohérent avec la limite de 1 photo toutes les 2s.

Bien sûr, ceci ne se remarque qu’en déplacement rapide, donc pas sur les photos prises à pied ou à vélo, mais en voiture c’est assez notable, comme sur ces exemples:

Sur la première photo, on voit que la position sur l’image aérienne se situe plus tard sur la trajectoire, le carrefour étant encore visible au loin alors que la position GPS nous met dessus.

Pareil sur la seconde, on vient tout juste de passer ce carrefour, mais la position est nettement après.

On peut donc recaler les photos, ce qui peut se faire de plusieurs façon:

  • avec JOSM
  • avec exiftool en ligne de commande
  • avec un script dédié (voir plus bas)
  • avec un traitement automatique à la réception côté serveur Panoramax… à implémenter :wink:

JOSM

Je le fait actuellement avec JOSM en attendant de gérer cela de façon plus automatique soit par un script avant versement soit par un traitement côté API panoramax :

  • charger les images dans JOSM (glisser/déposer le dossier)
  • clic droit sur la couche “Images géolocalisées” pour extraire et enregistrer sur disque la trace GPX à partir des images
  • clic droit à nouveau mais pour choisir “corréler au format GPX”
  • un dialogue s’ouvre, clic sur le bouton “Ouvrir une autre trace GPX” et charger la trace qu’on vient d’enregistrer
  • mettre 1.5 dans le champ “décalage” (on peut ajuster si besoin, mais c’est en général la bonne valeur)
  • cocher la case “Images avec géolocalisation dans les métadonnées EXIF”

Voici ce que ça donne:

On peut en profiter pour ajouter l’orientation de la photo en se basant sur la trajectoire:

  • cocher la cache “Définir la direction de l’image…”
  • modifier le décalage de cet angle si comme moi vous prenez les photos sur le côté pour éviter les moucherons sur l’objectif avant (donc 90° ou -90°).

Il ne reste plus qu’à enregistrer ces nouvelles coordonnées et orientations dans le fichiers JPEG: avec un nouveau clic droit sur “Images géolocalisées” et le"Ecrire les coordonnées dans l’entête de l’image"

Vos images sont en principe repositionnées 1.5s “plus tôt” et à une meilleure position longitudinale sur la trajectoire.

Exiftool

Comme avec JOSM, il faut d’abord générer une trace GPX à partir des photos, puis appliquer le recalage.

Cela donne quelque chose comme (non testé) :

exiftool -fileOrder gpsdatetime -p gpx.fmt 100GOPRO > 100.gpx
exiftool -geotag 100.gpx -geosync=-1.5 100GOPRO

Script en ligne de commande

Toutes ces manipulations peuvent se faire par un script en ligne de commande, ce que j’ai fait par exemple pour la Qoocam, mais que je compte ajouter le support des photos prises par Gopro Max… pour profiter aussi de la ré-orientation (quand on vise les côtés) et l’ajout de logo en bas d’image… et tout ça sans perte de qualité (aucune décompression/recompression).

3 Likes

bonjour

merci pour ce sujet ! Cela va intéresser @SIG_Anglet aussi.
Il est à noter que ce décalage s’observe aussi en vélo, même s’il est surement moindre. Ou alors c’est parcequ’on va trop vite en vélo :smile:

A noter aussi que forcément, si la vitesse varie, le décalage n’est pas toujours le même, c’est ce que j’ai pu observer.

J’utilise actuellement JOSM avec l’export du GPX que j’utilise comme calque de support. Je n’avais pas réussi à appliquer un décalage systématique comme tu l’indiques, mais je vais donc re-tester la prochaine fois avec ces indications.

Cela me parait pas mal de le faire dans JOSM par rapport à une ligne de commande car on peut voir le résultat visuellement et l’adapter en conséquence.

C’est un décalage temporel qui a l’air fixe (vérifié avec différentes Gopro Max et dans différentes collectes), et bien sûr il provoque un décalage spatial qui varie en fonction de la vitesse.

Ce qu’on voit c’est le décalage spatial variable, mais la cause est fixe, donc quand on connaît la valeur à appliquer systématiquement en décalage temporel, on a plus vraiment besoin d’avoir la visualisation car il n’y a pas à proprement parler d’adaptation à faire.

Je pense que tu as fait jusqu’ici des recalages spatiaux, donc fastidieux (un à un) et variables en fonction de la vitesse d’où ce besoin “d’adapter”.

Il faut que je refasse une prise de vue en roulant plus vite, pour estimer encore plus précisément ce décalage temporel… Jeudi si il fait beau je devrais avoir l’occasion (110km/h).

:exploding_head:

Il faut vraiment que je teste ça.

Bizarre sur un test de Qoocam j’ai un décalage différent. Cette photo là : All Panoramax street level imagery
Elle est prise depuis le pont du bassin de Saint-Christophe. Mais sur le fond de carte, elle est positionnée avant le pont. Le décallage semble être donc dans l’autre sens par rapport au décalage de la Gopro (???)

J’ai profité jeudi d’un circuit dépose/repose de kits de prise de vue dans le 77 et 91 pour mieux évaluer ce décalage sur une portion de route limitée à 110 km/h.

Voici ce que ça donne à 96 km/h (26 m/s) avec un recalage de la Gopro Max de 1.25s sur un photo coup de bol car parfaitement alignée avec le portique :

1.25s à 96 km/h ça fait 33,3m de différence…

Le contrôle sur les autres photos est cohérent, ça fluctue légèrement mais ça doit être l’imprécision normale du GPS.

Pour info, la Gopro était fixée sur le toit de ma voiture, avec les ventouses magnétiques triples de Smallrig, orientée sur les côtés pour minimiser la prise au vent et rien n’a bougé !

Il ne me reste plus qu’à intégrer ça dans mon script de traitement pré-versement pour dédoublonner, ré-orienter, ajouter le logo.

Merci pour le partage de l’info @Patchanka
Et merci à toi @cquest pour avoir pris le temps de regarder ce problème. Ta solution sera super utile !
A vélo, j’ai pu observer à certains moments des décalages de 7m. Je devais rouler à 25km/h je pense.

25 km/h = 7m/s… à 1,25s ça fait 8,7m d’écart ce qui est assez cohérent.

Oui, très clairement, le positionnement est mesuré à la fin de l’enregistrement de la photo. Si, en plus, tu enregistres en parallèle une trace RTK et que tu veux repositionner tes photos au centimètre, tu vas alors constater que l’heure de prise de vue est enregistrée à la seconde près. Il y a même deux champs différents dans les exifs, une heure classique et une heure GPS. Ces deux horodatages ne sont pas nécessairement synchronisés et présentent chacun des irrégularités au sein d’une série à cause de l’arrondi à la seconde. Voir ce retour de terrain.

Actuellement, j’envisage de faire un bout de programme qui prendrait l’heure GPS, réaliserait une interpolation linéaire au sein d’une séquence et enregistrerait dans les exifs l’heure classique avec les millisecondes en plus. S’il y a des bonnes volontés pour un coup de main, je suis preneur. :sweat_smile:

Dans les patchs Josm que je dois tenter de faire merger, j’en ai un qui permettra au moment d’un corrélation, de choisir l’heure Gps de la photo plutôt que DateTimeOriginal.

1 Like

Quand tu veux matcher avec une trace externe, c’est sûr que l’absence des subseconds est un problème.

Pour le recalage que je fais en partant des positions des photos, ça ne pose pas de problème, l’heure n’est pas exacte, mais ça ne gêne pas pour l’interpolation entre deux positions.