Geotagging sous Linux...

Publié le 04 septembre 2010 par Sid

J

e viens de faire l'acquisition d'un tracker GPS que je destine, au moins dans un premier temps, au géocodage de mes photos. Après des recherches que je n'oserais qualifier d'approfondies, mon choix s'est porté sur le Qstarz BT-Q1300S.

Pas forcément pour faire du jogging, même si j'en aurais besoin, mais tout simplement parce qu'il est simple, fin, léger et, surtout, complètement supporté sous Linux. Car aussi riche que puisse être la dotation logicielle fournie par le constructeur, je traite mes photos sous Linux, pas sous Windows ni MacOS. Mon geotagging se fera donc sous ce même OS, et je me propose de vous compiler ici ce que j'ai trouvé et testé.

Le BT-Q1300S est basé sur le chipset Mediatek MT3329. Il se connecte et se recharge sur USB, supporte le BlueTooth, la norme NMEA 0183 et peut loguer jusqu'à 5 points par seconde avec 11h d'autonomie. Il permet également de sauvegarder des emplacements particuliers[1], ce qui peut se révéler intéressant à l'usage.

Les chipset GPS Mediatek, MTK pour les intimes, sont supportés via le driver CDC ACM[2]. Le MT3329 ne fait pas exception à la règle, immédiatement sur un noyau récent sinon modulo un léger patch. Ce qui veut dire qu'on communique avec lui via une interface série, comme avec un modem tout ce qu'il y a de plus classique.

On allume le tracker, on le branche en USB, et hop :

usb 5-1: new full speed USB device using uhci_hcd and
     address 2
cdc_acm 5-1:1.1: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB 
      modems and ISDN adapters

On a maintenant un /dev/ttyACM0 pour causer dedans et récupérer les informations qui vont bien. Un peu de Googling nous amène rapidement à MTKBabel, un outil en ligne de commande destiné à piloter la fonction de tracking des chipsets MTK : lecture des données, effacement de la mémoire et configuration principalement. On probe le device, et ça répond tout de suite :

~$ mtkbabel -s 115200 -p /dev/ttyACM0
MTK Test OK
MTK Firmware: Version: 1, Release: AXN_1.30-B_1.3_C01, Model 
    ID: 0003
Log format: (0002003F) UTC,VALID,LATITUDE,LONGITUDE,HEIGHT,
    SPEED,RCR
Size in bytes of each log record: 34 + (0 * sats_in_view)
Logging TIME interval:       5.00 s
Logging DISTANCE interval:   0.00 m
Logging SPEED limit:         0.00 km/h
Recording method on memory full: (1) OVERLAP
Log status: (000100000000) AUTOLOG_OFF,OVERLAP_WHEN_FULL,
    ENABLE_LOG
Next write address: 219130 (0x000357FA)
Number of records: 6357
Memory health status (failed sectors mask): FFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Ensuite, on peut télécharger les données :

~$ mtkbabel -s 115200 -p /dev/ttyACM0 -f tracks

Ceci va me créer un fichier tracks.bin contenant les informations de la mémoire. Ceci étant, comme c'est un format propriétaire, ce n'est pas super intéressant. Aussi on préfèrera utiliser l'export GPX[3] :

~$ mtkbabel -s 115200 -p /dev/ttyACM0 -f tracks -t -w -c

Ces trois derniers switches permettent de créer en sus respectivement un fichier contenant la trace GPS (tracks_trk.gpx), un fichier contenant les waypoints (tracks_wpt.gpx) et un fichier contenant ces deux types d'informations (tracks.gpx).

Si les fichiers GPX sont directement utilisables pour le geotagging, sachez tout de même que vous pouvez les manipuler avec GPSBabel, en particulier les convertir dans pleins d'autres formats pour divers usages que vous pourriez vouloir en faire. En ce qui me concerne, ça me permettrait de convertir les waypoints en base de POI pour mon GPS Garmin. Plus intéressant, GPSBabel permet de manipuler les informations contenues dans un fichier GPX : suppression des doublons ou des points aberrants, ajouts de points par interpolation, modification de l'altitude, etc. Ça peut servir...

Passons au geotagging proprement dit, à savoir l'attribution à un cliché des coordonnées GPS de l'endroit duquel on l'a pris. Pour y parvenir, on effectue une corrélation temporelle entre la trace GPS et la date de prise de vue contenue dans les metadonnées EXIF des photos. Pour le dire de façon moins ampoulée, on prends la date à laquelle a été prise la photo et on regarde dans la trace GPS où on était à ce moment là, en faisant une approximation quand ça tombe entre deux points. Simple. Le logiciel que j'ai trouvé le plus efficace pour faire ça est gpscorrelate. Ça prend un fichier GPX et des images en entrée, et ça tagge. Point. J'ai encore un peu de mal avec la gestion de la différence de date au niveau des secondes, mais bon. On m'avait aussi conseillé Geotag, mais je n'en vois pas trop l'intérêt si ce n'est le support des formats RAW.

Enfin, si vous êtes un fanatique indécrottable du clikodrome, je ne peux que vous recommander le projet BT747 qui propose un outil graphique en Java permettant de tout faire : gestion du device, téléchargement des traces, export dans différents formats, affichage sur carte, geotagging, etc. Bref, une GUI fort sympathique pour gérer son tracker.

Côté visualisation des photos, on notera que Geeqie supporte l'affichage de la position sur carte en fonction du géocode, auquel cas il peut afficher une carte positionnant l'image, et qu'il existe un plugin pour EOG qui fait la même chose, en un peu mieux je trouve.

Les adaptes de Debian regretteront que que bt747, comme Geotag, ne soit pas packagé. Par contre, c'est le cas de tous les autres logiciels mentionnés : MTKBabel, GPSBabel et sa GUI, gpscorrelate et sa GUI, Geegie compilé avec support GPS et le plugin pour EOG.

Maintenant que le geotagging fonctionne, je peux passer à la suite. À savoir éviter au maximum de faire des boulettes d'une part et le configurer en tant que source pour GPSd d'autre part. Ce qui me permettra de l'utiliser avec... Kismet... Exemple complètement fortuit, évidemment ;)

Notes

[1] Waypoints

[2] Abstract Control Model

[3] GPS eXchange Format.