Comment mettre en ligne les images d'une vidéo (scripts) ?


Il arrive que ce ne soient pas des photos qui ont été prises mais une vidéo. La méthode pour mettre en ligne des images est dès lors un peu plus complexe puisqu'il convient d'abord d'extraire des images depuis la vidéo avant de les mettre en ligne sur Mapillary.

De la même manière que pour mettre en ligne un dossier de photos, il existe un script "upload_video_with_prepocessing.py" qui permet d'exécuter les différentes étapes du prétraitement à la mise en ligne des images prises à partir d'une vidéo cette fois.

Le script "upload_video_with_prepocessing.py" en résumé


Installation

On commence par installer FFmpeg qui sera utilisé par les scripts.

Fonctionnement du script

Il nous faut 2 fichiers pour mettre en ligne une vidéo sur Mapillary :
  • 1. un fichier contenant la vidéo
  • 2. un fichier contenant la trace GPS (format ".gpx" ou ".nmea")

Si j'ai une trace GPS "mavideo.gpx" et un fichier vidéo "mavideo.mp4" stockés dans un dossier "C:/Mapillary", et que je veux mettre en ligne une image par seconde :
upload_video_with_preprocessing.py "C:/Mapillary/mavideo.mp4" --gps_trace "C:/Mapillary/mavideo.gpx" --sample_interval 1


Et voici le résultat avec des images extraites d'une vidéo 360°:



Cas d'un décalage entre le début de la vidéo et le début du fichier GPS

Si la vidéo et la trace GPS sont prises séparément par 2 appareils distincts par exemple, la vidéo par une caméra et la trace GPS par une application smartphone, il se peut que l'on observe un décalage temporel entre la trace GPS et la vidéo. Dans ce cas, il convient alors de déterminer précisément la date et l'heure du début de la vidéo, et d'en déduire le décalage en secondes, entre le début de la trace GPS et le début de la vidéo, afin de la passer en paramètre dans le script.

Afin de déterminer ce décalage, on peut suivre partiellement le tutoriel disponible sur le blog de Mapillary. La partie "Visualize your route on a map" explique comment déterminer ce décalage à partir d'un dossier de photos et le fichier GPS. Il faut trouver dans les images des points de repère repérable dans le fichier GPS (des intersections par exemple). Ceci permet de déduire la date et l'heure (au format GMT) de la vidéo et ainsi de déterminer le décalage entre le début du GPS et le début de la vidéo.

Une fois qu'on a plus qu'une seule vidéo, voici les scripts à lancer si on a un décalage (--time_offset) de 15 secondes entre le début de la trace GPS et le début de la vidéo et qu'on veut 1 image par seconde (--sample_interval) :
upload_video_with_preprocessing.py "C:/Mapillary/mavideo.mp4" --gps_trace "C:/Mapillary/mavideo.gpx" --time_offset 15 --sample_interval 1


Le script "upload_video_with_prepocessing.py" dans le détail


Le script "upload_video_with_prepocessing.py" appelle successivement 2 scripts :
  • 1. "geotag_video.py"
  • 2. "upload_with_preprocessing.py"

Script "geotag_video.py"

"geotag_video.py" permet d'extraire d'une vidéo une image toutes les x secondes (intervalle à définir dans les paramètres),
et attribue à chaque image une localisation et un temps à partir de la trace GPS.

Utilisé via "upload_video_with_prepocessing.py", ce script prend ainsi 5 arguments principaux :
  • le chemin d'accès au fichier vidéo
  • --gps_trace : le chemin d'accès au fichier GPS
  • --sample_interval : l'intervalle entre les images découpées en secondes (par défaut = 1)
  • --time_offset : le décalage entre le fichier GPS et la vidéo (par défaut = 0)
  • --image_path indique l'endroit où stocker les images ainsi créées (par défaut = "video_samples")

Par défaut, une image est donc extraite toutes les secondes de la vidéo et l'on considère que la trace GPS est parfaitement calée sur la vidéo. Les images ainsi créées sont stockées dans un dossier nommé "video_samples". Pour information, afin de procéder à cette extraction d'images à partir d'une vidéo, le script va utiliser une commande FFmpeg.

Script "upload_with_preprocessing.py"

Nous avons décrit son fonctionnement en détail dans un article précédent. Il faut simplement savoir que par défaut, "upload_video_with_prepocessing.py" passe les options suivantes à "upload_with_preprocessing.py" :
  • --remove_duplicates pour supprimer les doublons
  • --interpolate_directions pour déterminer l'orientation de la caméra
  • --duplicate_distance à 0.5m maximum entre les images pour déterminer les doublons
  • --duplicate_angle à 360° maximum entre les images pour déterminer les doublons