Le but de ce script est de regrouper l’ensemble des étapes de post-traitement des vidéo timelapse enregistrées (et convertie) par une caméra Qoocam.
La caméra enregistre un fichier MP4 associé à un fichier “.kvar” contenant les métadonnées tout au long de l’enregistrement (GPS, IMU, etc).
Avec les firmware récents, la caméra peut convertir les vidéos brutes avec les vues en “fisheye” des deux objectifs en une vidéo en projection équirectangulaire. Cette conversion peut aussi être faite sur ordinateur (Windows ou MacOS uniquement).
Le script doit effectuer les tâches suivantes :
extraire les métadonnées du fichier .kvar (à minima les infos provenant du GPS, voire de l’IMU)
Oui, je vois… un peu d’offset sur le temps qui a un impact sur la position géo.
La caméra a une référence temporelle (uptime ?) qui sert à tout synchroniser:
chaque image a sa référence temporelle
chaque mesure du GPS aussi (une par seconde)
chaque mesure de l’IMU aussi (et il y en a plusieurs par seconde)
Je me base dessus pour interpoler la position GPS… et il y a peut être un bug.
Il y a 2s environ d’écart à ce que je vois.
Pour info, les images sont prises sur le côté, et je fait “rouler” le panoramique pour remettre l’avant au milieu. La modification est sans perte, on a donc une seule décompression de l’image vidéo, puis une seule compression JPEG. Les images étant chargée par opencv comme des tableaux de pixels, j’intervertis juste l’ordre des colonnes avant d’enregistrer l’image JPEG… et c’est plus rapide que ce que j’avais utilisé avant (manipulation de blocs JPEG avec jpegtran).
Je ne génère les images qu’après avoir déterminé si c’est un doublon ou pas, ce qui fait gagner du temps.
Je constate aussi quelques “sauts” dans les positions GPS… je vais voir si il est possible d’exploirer l’IMU pour détecter les incohérences et éliminer ces mauvais fix. Il faut que je comprenne les valeurs fournies par l’IMU sur les 3 gyroscopes X/Y/Z et les 3 accéléromètres X/Y/Z. On doit même pouvoir calculer en position fixe si la caméra est montée de travers et de combien, et avec les accélérations en ligne droite le décalage par rapport à l’axe de déplacement du véhicule.
Pour le temps de traiment, voici ce que ça donne sur un timelapse de 5000 images:
24 minutes pour extraire les images, les dédoubler, les recaler et les enregistrer
1 minute pour appliquer les tags EXIF
26’25" au total et il reste 4576 images à envoyer.
Voici les options et paramètres qu’on peut passer au script:
usage: qoocam2panoramax [-h] [--gpx GPX] [--kvar KVAR] [--fps FPS]
[--input INPUT] [--output OUTPUT]
[--offset OFFSET] [--heading HEADING]
[--distance DISTANCE]
[--make MAKE] [--model MODEL]
[--nadir NADIR]
Post-processing for Qoocam JPG extracted from timelapse video
options:
-h, --help show this help message and exit
--gpx GPX GPX file containing timestamps and locations
--kvar KVAR .kvar file containing video GPS and IMU data
--fps FPS Frame per second in the MP4 timelapse video
--input INPUT Directory containing pictures to process
--output OUTPUT Directory to store processed pictures (default = same as input)
--offset OFFSET Timestamp offset in seconds (default=2)
--heading HEADING Camera heading compared to GPS track (default=0)
--distance DISTANCE Minimum distance between pictures (default=5)
--make MAKE Camera "Make" EXIF tag (default="Kandao")
--model MODEL Camera "Model" EXIF tag (default="Qoocam 3 Ultra")
--nadir NADIR Image to add at narid on final picture
Salut cquest,
Merci beaucoup pour le partage de tes recherches.
Merci également pour ton script pour le dédoublonnage des images que j’ai trouvé ici.
Est-il prévu de le mettre à jour pour nous continuer la suite du partage de tes expérimentations ?
Pour le moment je vois uniquement les options suivantes
usage: dedup_seq [-h] [--distance DISTANCE] [--action {hide,delete}] [--api-url API_URL] [--token TOKEN] [--uuid UUID]
[--input INPUT] [--output OUTPUT]
Deduplicates sequences of geolocated pictures
options:
-h, --help show this help message and exit
--distance DISTANCE Minimal distance in meters between 2 pictures
--action {hide,delete}
Action to apply
--api-url API_URL Set API to query, default from ~/.config/geovisio/config.toml
--token TOKEN Set TOKEN to use for API auth, default from ~/.config/geovisio/config.toml
--uuid UUID List of sequence UUIDs to analyze (comma separated)
--input INPUT Directory containing pictures to analyse
--output OUTPUT Directory to store hardlinked pictures to keep
written by cquest, shared under WTFPL