Script post-traitement pour caméras Qoocam

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 :

  1. extraire les métadonnées du fichier .kvar (à minima les infos provenant du GPS, voire de l’IMU)
  2. dédoublonner les images (voir Dédoublonner les photos / dedup pictures)
  3. extraire les images depuis la vidéo (via opencv)
  4. ré-orienter les images (yaw/pitch/roll)
  5. associer les métadonnées aux images (timestamp, position, direction)
  6. envoyer vers Panoramax le résultat (panoramax_cli)

En gras, ce qui fonctionne déjà dans des scripts séparés.

2 Likes

Les étapes 1 à 5 sont maintenant gérées par un seul script :slight_smile:

1 Like

Y a un petit problème de calage sur rue de la Gare et rue Robert Petit.

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.
1 Like

Correction faite sur le décalage géo-temporel.

Et puis une nouveauté !!

(Un indice s’affiche au bas de votre écran…)


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
1 Like

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

Si tu cherches d’autres possibilités, tu peux regarder photo_filter :

1 Like

Il faut que l’on organise un repo avec les différents scripts utiles à partager et maintenir collaborativement.

2 Likes