Test dashcam 4K

Je suis en train de tester ce que peut sortir une dashcam 4K.

C’est un modèle un peu particulier qui fait dashcam et sert aussi de rétroviseur passif (miroir) ou actif (caméra arrière grand angle, pas mal pour les angles morts).

On la trouve pour à peine plus de 100€ en cherchant un peu, avec le GPS et la caméra arrière (1080p).

Voici leur vidéo de promo…

Les premières captures faites semblent correctes, malgré un temps très gris et pluvieux.
Elle enregistre avant et arrière en même temps dans des fichiers MP4 séparés et découpés en tranches de 5mn.

3 « J'aime »

Voici un exemple d’enregistrement:

Caméra avant (4K):
https://peertube.amicale.net/w/rqSsrJkjePHj2hH2PL4w8f

Caméra arrière (FullHD):

Je n’ai pas encore trouvé comment extraire les données GPS du fichier MP4 qui est le seul fichier enregistré. Il y a les coordonnées dans le coin de l’image, mais avec seulement 5 décimales, donc métriques et une mise à jour par seconde.

Un utilitaire est proposé pour affiché le tracé GPS sur une carte et les coordonnées affichées par cet outil ont 6 décimales, donc les données sont bien quelque part dans le fichier.

exiftool permet d’extraire des données GPS depuis des vidéos, mais cela n’a rien donné. J’ai aussi trouvé un tuto youtube expliquant comment extraire des données NMEA inclues dans le flux MP4… mais rien trouvé de tel dans les fichiers.

Et quelques exemple d’images extraites de la vidéo en plein définition:

J’ai regardé le flux vidéo qui est à 30 images/s, avec 1 image clé toutes les 15. Ces images sont extraites d’images clé pour avoir un minimum d’artefact de compression et donc il y en a 2 par seconde.

1 « J'aime »

J’ai creusé la piste ffmpeg pour extraire les images clé et les enregistrer en JPEG.

La formule magique est la suivante:

ffmpeg -skip_frame nokey -i LEFICHIER.MP4 -f image2 -threads 1 -vsync 0 -qscale:v 2 out/out-%04d.jpg

-skip_frame nokey : indique que l’on ne veut garder que les images clé
-qscale:v 2 : limite la compression JPEG pour garder de la qualité
-threads 1 : semble indispensable pour que les numéros attribués aux images soient bien séquentiels

Sur une vidéo de 5 minutes d’un volume de 1.2Go, on passe à 600 images qui occupent 458Mo et le traitement est fait en 90s (en gros 1/6 de la durée de la vidéo).

Ce qui manque ? Le géoréférencement dans les images et le timestamp non conservé.

Voici un exemple d’image extraite:

Lien vers le fichier pleine résolution: https://osm.cquest.org/LibresVues/exemple-extrait-thieye4.jpg

Un pas de plus… la récupération des positions !

Les étapes sont:

  • extraction du coin de l’image avec les infos (imagemagick)
  • un coup d’OCR (tesseract)
  • ajout de la position et du timestamp dans le JPEG avec exiftool

Voilà à quoi ressemble ce qui est passé à tesseract:
crop

Au final dans JOSM ça ressemble à ça:

Les métadonnées restent minimales, rien sur l’angle de champ, le temps d’exposition, etc…

1 « J'aime »

Haha je ne pensais pas que tu aurais osé faire ça :grimacing:
Tu peux donner le lien de la vidéo qui explique comment extraire le flux NMEA d’un fichier MP4 ? Je suis curieux de savoir si c’est un stream classique (du même type qu’une piste audio ou un sous-titre par exemple).

Les trous dans la séquence d’images, ce sont des problèmes d’Ocr ou autre chose ?

Oui, OCR qui ne retrouve pas ses petits.

Question archi-bête, est-ce qu’essayer de mettre un tout petit cache dans le coin inférieur gauche ne noircirait pas la zone avec les coordonnées et n’aiderait pas l’ocr ?
Si la prise de vue est en hiver, le risque de ne pas être capable de reconnaitre les caractères est très élevé, non ?
Sinon la dashcam n’a pas des paramètres réglables sur l’incrustation ? Par exemple texte blanc avec contours noir… ou fond noir derrière.

Oui, ce serait une solution de mettre un morceau de noir dans le coin du pare-brise

Pour à peine plus de 100€, la dashcam n’offre pas de réglages fins :wink:

J’ai peaufiné le script d’extraction d’images géoréférencée depuis les vidéos de ma dashcam.

  • meilleure extraction des textes incrustés pour récupération par OCR du timestampet et de la position
  • traitement des images en demie seconde (et interpolation de la position)
  • suppression des images successives à la même position
  • recadrage pour éliminer le bas de l’image (là où on a le timestamp et la position incrustée, mais aussi le tableau ou le capot du véhicule)
  • renommage selon le timestamp
  • ajout de metadonnées sur l’appareil (make, model, focallength)
  • mise à jour de la date de modification du fichier pour reprendre celle de la prise de vue

reste à faire:

  • le calcul de direction de prise de vue (ImgDirection)

C’est un script bash qui utilise:

  • ffmpeg (conversion vidéo en série d’images)
  • imagemagick (calcul de la prévisualisation + extraction du texte incrusté)
  • tesseract (conversion en texte)
  • exiftool (mise à jour données EXIF)
  • jpegtran (recadrage)
  • bc (calculs numériques)

On peut lancer le script avec GNU parallel, pour traiter plusieurs vidéos en même temps, ce qui peut donner ça:

Le script est ici pour le moment: This script converts dashcam videos into geotagged still images · GitHub

Les images en sorties ressemblent à ça:

Et voici les données EXIF:

ExifToolVersion                 : 12.40
FileName                        : 2023-03-06T14:13:35.000.jpg
Directory                       : /ssd-zfs/panoramax/photos/2023/dashcam/front_emr_20230306_141235M
FileSize                        : 1775 KiB
FileModifyDate                  : 2023:03:06 14:13:35+01:00
FileAccessDate                  : 2023:03:13 11:03:02+01:00
FileInodeChangeDate             : 2023:03:13 10:58:35+01:00
FilePermissions                 : -rw-rw-r--
FileType                        : JPEG
FileTypeExtension               : jpg
MIMEType                        : image/jpeg
ExifByteOrder                   : Big-endian (Motorola, MM)
Make                            : ThiEYE
XResolution                     : 72
YResolution                     : 72
ResolutionUnit                  : inches
YCbCrPositioning                : Centered
ExifVersion                     : 0232
DateTimeOriginal                : 2023:03:06 14:13:35
ComponentsConfiguration         : Y, Cb, Cr, -
SubSecTimeOriginal              : 000
FlashpixVersion                 : 0100
ColorSpace                      : Uncalibrated
GPSVersionID                    : 2.3.0.0
GPSLatitude                     : 0 deg 0' 0.00"
GPSLongitude                    : 0 deg 0' 0.00"
Compression                     : JPEG (old-style)
ThumbnailOffset                 : 416
ThumbnailLength                 : 17800
Comment                         : Lavc58.134.100
ImageWidth                      : 3840
ImageHeight                     : 2040
EncodingProcess                 : Progressive DCT, Huffman coding
BitsPerSample                   : 8
ColorComponents                 : 3
YCbCrSubSampling                : YCbCr4:2:0 (2 2)
ImageSize                       : 3840x2040
Megapixels                      : 7.8
SubSecDateTimeOriginal          : 2023:03:06 14:13:35.000
ThumbnailImage                  : (Binary data 17800 bytes, use -b option to extract)
GPSPosition                     : 0 deg 0' 0.00", 0 deg 0' 0.00"
1 « J'aime »