Archive for the ‘linux’ Category

Récepteur Sony GPS CS1-KASP : présentation et utilisation sous Linux

Jeudi, juillet 24th, 2008

Cela faisait quelque temps que çà me démangeait, et finalement, j’ai craqué : j’ai acquis le récepteur GPS Sony CS1-KASP…

Qu’est ce que c’est ?

Toutes les 15 secondes ce petit module gros comme 3 piles AA (et qui fonctionne d’ailleurs avec 1 pile AA) va récupérer 1 trame GPS, au format NMEA (qui contient l’heure de capture et la latitude/longitude).
Il coûte environ 90 euros aux USA, 150 en France ; j’ai eu la chance d’avoir pu me le faire rapporter (il a été commandé du coup sur B&H Photo Video) il y a 1 mois.
L’appareil ne possède pas d’affichage numérique, aussi on en peut que le mettre en route et observer qu’il est en exploration de satellites (clignotements verts rapprochés) en saisie (clignotements verts non rapprochés) en manque de batterie (clignotements rouges rapprochés) ou encore que sa mémoire est pleine (clignotement orange je crois…, mais çà ne m’est jamais arrivé encore !)

Ensuite, en le branchant sur votre ordinateur (en USB) vous pouvez récupérer des fichiers textes, au format NMEA donc, reprenant l’ensemble de votre parcours.(enfin, tous les points capturés à intervalle de 15 secondes pendant que l’appareil était en marche et avait de la réception GPS…)
La mémoire interne est de 31mo (çà suffit très largement pour stocker des trames au format texte ! et l’autonomie sur une pile est d’à peu près 10h (un peu moins avec les piles rechargeables)

A quoi çà sert ?

Et bien Sony met en avant la possibilité de confronter ces trames GPS à vos photos (à condition bien sûr que votre appareil soit à l’heure !!!) : vous avez des points horodatés, des photos horodatés : le couple idéal pour géolocaliser vos photos !
Mais on peut aller plus loin en convertissant les fichiers log en fichiers KML (format de traçage utilisé par Google Earth, permettant de situer votre parcours ainsi que vos photos sur la mappemonde de Google Earth)
Ou alors, on peut même retirer plein d’infos sur son parcours comme : temps de parcours, vitesse moyenne, min, max (lors d’un jogging ou d’une balade en vélo, etc…), bref tout ce que l’on peut imaginer à partir d’un point horodaté !

Qu’y a t il de fourni avec ?

des accessoires pour l’accrocher sur un vélo, un sac à dos…
un cd rom aussi, avec des logiciels propriétaires de Sony pour Windows, pour les avoir essayés une fois, ils fonctionnent plutôt bien (ils permettent de reconnaître le module branché en USB, de choisir les photos à lui associer et de modifier les tags EXIF des photos pour y incorporer longitude et latitude)

Fonctionne - il sous Linux ?

Oui, j’utilise Ubuntu 8.4 (Hardy Heron), et en branchant l’appareil en USB, Dolphin (explorateur de fichiers sous KDE) se lance tout seul et m’affiche le montage du module : on obtient une liste de fichiers logs; que l’on ouvre avec n’importe quel éditeur texte pour contempler (!) les trames NMEA; çà donne çà :

@Sonygps/ver1.0/wgs-84
$GPGGA,064509,4852.5872,N,00213.9426,E,1,04,02.8,00057.1,M,047.6,M,,*4E
$GPGSA,A,3,02,04,13,27,,,,,,,,,04.9,02.8,03.9*0E
$GPGSV,2,1,07,07,40,157,00,08,12,181,00,13,82,046,50,25,,,41*43
$GPGSV,2,2,07,04,61,243,52,02,41,298,52,27,38,166,45,,,,*42
$GPRMC,064509,A,4852.5872,N,00213.9426,E,000.0,000.0,230708,,,A*7A
$GPVTG,000.0,T,,M,000.0,N,000.0,K,A*0D
$GPGGA,064524,4852.5872,N,00213.9443,E,1,04,02.8,00045.2,M,047.6,M,,*42
$GPGSA,A,3,02,04,13,27,,,,,,,,,04.9,02.8,04.0*00
$GPGSV,3,1,11,02,41,298,53,04,61,243,52,07,40,157,00,08,12,181,00*7B
$GPGSV,3,2,11,10,08,289,00,13,82,046,51,16,08,053,00,20,14,108,00*7B
$GPGSV,3,3,11,27,38,166,42,29,00,347,00,25,,,41,,,,*79
$GPRMC,064524,A,4852.5872,N,00213.9443,E,000.0,000.0,230708,,,A*76
$GPVTG,000.0,T,,M,000.0,N,000.0,K,A*0D
$GPGGA,064539,4852.5845,N,00213.9444,E,1,05,02.4,00039.1,M,047.6,M,,*48
$GPGSA,A,3,02,04,13,25,27,,,,,,,,04.6,02.4,03.9*0A
$GPGSV,3,1,12,02,41,298,53,04,61,243,51,07,40,157,00,08,12,181,00*7B
$GPGSV,3,2,12,10,09,289,00,13,82,046,50,16,08,052,00,20,14,108,00*79
$GPGSV,3,3,12,25,55,130,35,27,38,166,36,29,00,347,00,26,,,00*4C
$GPRMC,064539,A,4852.5845,N,00213.9444,E,000.0,000.0,230708,,,A*79
$GPVTG,000.0,T,,M,000.0,N,000.0,K,A*0D

Je vois d’ici les mauvaises langues dire “ah oui mais ce format n’est pas le format le plus répandu, peu de logiciels (libres en l’occurrence) le comprenne”
C’est sans compter sur GPSBabel, logiciel libre multi plateformes qui permet de transformer ces trames NMEA en GPX par exemple, format ouvert beaucoup plus répandu, en XML cette fois ci…(ou une des dizaines d’autres formats de géolocalisation que comprend GPSBabel).
Pour l’installer sous Ubuntu (ou Debian) un simple :
%>sudo apt-get install gpsbabel
devrait suffir…
une fois la ligne de commande suivante saisie :

%>gpsbabel -i nmea -f WG20080723064509.log -o gpx -F test.gpx

Vous aurez converti le fichier provenant de votre GPS CS1 au format NMEA en fichier au format GPX, ce qui donne çà :

<?xml version="1.0" encoding="UTF-8"?>
<gpx
version="1.0"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2008-07-23T20:44:09Z</time>
<bounds minlat="48.876360000" minlon="2.232348333" maxlat="48.891765000" maxlon="2.239443333"/>
<trk>
<trkseg>
<trkpt lat="48.876453333" lon="2.232376667">
<ele>57.100000</ele>
<time>2008-07-23T06:45:09Z</time>
<course>0.000000</course>
<speed>0.000000</speed>
<fix>3d</fix>
<sat>4</sat>
<hdop>2.800000</hdop>
<vdop>3.900000</vdop>
<pdop>4.900000</pdop>
</trkpt>
<trkpt lat="48.876453333" lon="2.232405000">
<ele>45.200000</ele>
<time>2008-07-23T06:45:24Z</time>
<course>0.000000</course>
<speed>0.000000</speed>
<fix>3d</fix>
<sat>4</sat>
<hdop>2.800000</hdop>
<vdop>4.000000</vdop>
<pdop>4.900000</pdop>
</trkpt>
<trkpt lat="48.876408333" lon="2.232406667">
<ele>39.100000</ele>
<time>2008-07-23T06:45:39Z</time>
<course>0.000000</course>
<speed>0.000000</speed>
<fix>3d</fix>
<sat>5</sat>
<hdop>2.400000</hdop>
<vdop>3.900000</vdop>
<pdop>4.600000</pdop>
</trkpt>
</trkseg>
</trk>
</gpx>

Quel est l’intérêt de convertir en GPX ? Comment utiliser le GPS CS1KASP sous Linux ?

et bien tout simplement de pouvoir associer les coordonnées de ce fichier à votre collection de photos sous Digikam (gestionnaire de photos sous KDE).
Dans Digikam, sélectionnez vos photos, puis Image -> Géolocalisation ->Corrélation

Renseignez votre fichier au format GPX (et si besoin est, selon le fuseau horaire de votre appareil photo, modifier les paramètres de la corrélation de plusieurs heures avant ou après)

Vos photos sont désormais géo tagguées !
Alors pour en voir le résultat, pourquoi ne pas exporter le tout en KML pour vois s’afficher vos photos sur Google Earth ?

Ouvrez votre fichier KML avec GoogleEarth, et appréciez le résultat !

Ainsi, nul besoin d’utiliser Windows pour associer les coordonnées obtenues par le GPS CS1 à vos photos !

Conclusion

Cela fait seulement 1 mois que je l’ai acheté, aussi j’ai quand même remarqué, au niveau des points faibles, une réception parfois difficile; et une autonomie un peu plus faible avec les piles rechargeables…
Par contre, son montage sous Linux s’est révélé sans accro (ceci dit j’ai lu que sous Mac OSX c’était autre chose…) et les logiciels GPSBabel et Digikam sont très bien adaptés pour exploiter ses trames !
Aujourd’hui j’écris un logiciel en Ruby pour pouvoir retirer des informations statistiques sur ces trames, le projet n’est pas encore avancé, mais vous pouvez quand même jeter un coup d’oeil aux sources de GPXTools.
En tout cas, rien que pour l’utilisation principale (géotagguer ses photos) je conseille l’achat de cet appareil (sans concurrent pour l’instant d’ailleurs) rien que pour avoir le plaisir dans quelques années de pouvoir retrouver facilement sur une carte l’exacte position (à 10 mètres près, GPS oblige) de vos prises de photos !

Liens :
GpxBabel
Digikam
GPXTools

Diffusez vos vidéos HD en H264 sur le web !

Jeudi, mars 20th, 2008

Depuis la version 9 (update 3) de flash, le plugin propriétaire présent sur 98% des navigateurs internet, il est possible de lire des fichiers vidéos non plus seulement au format maison .flv (un dérivé de h263) mais aussi au standard H264, codec vidéo très performant !
Je vous propose de vous même encoder vos vidéos au format H264, à l’aide d’outils libres, ffmpeg en l’occurrence, et d’ensuite les diffuser sur internet via un lecteur de vidéo au format flash, qu’il vous suffira d’insérer dans vos pages web !
(à vous de voir après si vous préférez laisser la diffusion de vos vidéos à une régie publicitaire comme youtube et consorts !)
Je me sers de cette procédure pour diffuser des vidéos issues de mon camescope Sony HDR-HC7E en haute définition (1440 PAR 1.33 x 1080 entrelacé) dans une résolution correcte : 960×540p
Dans tout ce tutorial, le ‘%’ correspond à l’invite de commande de mon shell.

Installation de FFMPEG du dépôt subversion sur Ubuntu Gutsy 7.10 : (aussi testé sur Ubuntu Feisty 7.04)

Dans un premier temps :
%sudo apt-get build-dep ffmpeg
Selon le man de “apt-get”, “Avec la commande build-dep, apt-get installe ou supprime des paquets dans le but de satisfaire les dépendances de construction d’un paquet source.”
Ensuite, installons les librairies multipmédias nécessaires et aussi Subversion, car nous allons avoir besoin de récupérer la toute dernière version de ffmpeg :
%sudo apt-get install liblame-dev libfaad2-dev libfaac-dev libxvidcore4-dev liba52-0.7.4 liba52-0.7.4-dev libx264-dev libdts-dev checkinstall build-essential subversion
On récupèrele code source de ffmpeg par svn :
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
Il est temps de compiler ffmpeg, pour cela, rendons nous dans le répertoire du ffmpeg récemment récupéré :
%cd ffmpeg
Au cas où vous avez déjà compilé : (sinon çà fait pas de mal)
%make distclean
on configure :
%./configure --enable-gpl --enable-pp --enable-libvorbis --enable-libtheora --enable-liba52 --enable-libdc1394 --enable-libgsm --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-libxvid --enable-pthreads --enable-libx264
et on compile :
make
Ça prend un peu de temps, mais au bout, vous obtiendrez dans votre répertoire un ffmpeg compilé avec le support de h264 (entre autres encodeurs).
Vous pourriez l’installer avec sudo checkinstall et sudo make install, mais je préfère le garder à part de /usr/bin au cas où un jour je veuille utiliser le ffmpeg de ma distrib)
Tant que nous sommes à la compilation, compilons qt-faststart (j’explique peu après à quoi sert qt-faststart : déplacer les entêtes, les metadata, au début du fichier video):
Compiler qt-faststart.c

gcc -O3 -g -Wdeclaration-after-statement -Wall -Wno-switch -I -I$REP_SVN_FFMPEG/ffmpeg -I$REP_SVN_FFMPEG/ffmpeg/libavutil -I$REP_SVN_FFMPEG/ffmpeg/libavcodec -I$REP_SVN_FFMPEG/ffmpeg/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE $REP_SVN_FFMPEG/ffmpeg/tools/qt-faststart.c -o qt-faststart

en remplaçant $REP_SVN_FFMPEG par le chemin complet du répertoire du ffmpeg récupéré par svn.
Et voilà, fini pour l’installation ! place à l’utilisation !

Encodage du fichier video en H264

En remplaçant $REP_SVN_FFMPEG par le chemin complet du répertoire du ffmpeg récupéré par svn,

$REP_SVN_FFMPEG/ffmpeg/ffmpeg -i ma_video.m2t -vcodec libx264 -b 800k -ab 128k -s 960×540 -deinterlace ma_video.mov

cà peut être (très, 5fps) long …

Déplacement de l’entête MOOV ATOM au début du fichier

Malheureusement, si vous laissez la vidéo obtenue telle quelle, avant de pouvoir la visionner, vous serez obligé de la télécharger en entier; car les métadata du fichier, MOOV ATOM, sont placées à la fin du fichier, et non au début.
C’est alors que qt-faststart rentre en scène :

$REP_SVN_FFMPEG/ffmpeg/tools/qt-faststart ma_video.mov ma_video_fast.mov

Pour diffuser votre vidéo sur le web, vous pouvez utiliser la dernière version de FlowPlayer, et consulter mon article à son sujet ! (j’essaierai de le mettre plus à jour prochainement !)

Bonne diffusion !

Références :
How to encode in H264 for web broadcasting
La mailing list du site officiel de FFMPEG
La communauté de FlowPLayer à propos de H264

Solution de sauvegarde locale et distante avec rsync

Samedi, février 16th, 2008

Qui n’a jamais perdu des fichiers lors d’un crash de disque dur ? ou de la machine tout entière ?
Dans cet article je vous expliquer quels sont les moyens que j’ai mis en œuvre pour sauvegarder les données qui se situent sur mon serveur de fichiers (qui contient mes documents personnels, ma musique, mes photos, etc..) dans mon appartement.
Rsync est un logiciel qui construit des sauvegardes incrémentales, c’est à dire qu’il transfert entre chaque sauvegarde que le delta observé entre les 2.
Les machines concernées sont sous Ubuntu Server 7.10 mais l’article reste valide pour toute Ubuntu ou Debian.

Sauvegarde locale

La sauvegarde locale consiste à sauvegarder certains répertoires d’un disque vers un autre disque, dans la même machine (mon serveur de fichiers en l’occurrence) de manière périodique (toutes les semaines).
En l’occurrence sur la partition /dev/hda1 j’ai les répertoires /home /var /etc à sauvegarder; pour cela j’ai la partition /dev/sda2 (sur un disque différent donc) qui est montée sur le pointe de montage /backup
Ainsi mon script cron (sauvegarde.sh, executable bien sûr) à lancer toutes les semaines est le suivant :

#!/bin/sh
#############################
# SAUVEGARDES LOCALES #
#############################
#sauvegarde du repertoire etc
rsync -avz –delete /etc /backup/
#sauvegarde du repertoire var
rsync -avz –delete /var /backup/
#sauvegarde du repertoire home
rsync -avz –delete /home /backup/

L’option “-avz” signifie que la sauvegarde (le transfert) des fichiers sera récursif; les fichiers seront tranférés en mode “archive” qui garantit que les les liens symboliques, les attributs,les permissions, les droits, etc… seront préservés lors du transfert; de plus une compression sera utilisée lors du tranfert (qui n’affectera pas vos fichiers)
l’option “–delete” signifie elle que lorsque l’on supprimera un fichier sur /etc par exemple, il devra être supprimé aussi de /backup/etc/ lors de la sauvegarde. (si vous ne mettez pas cette option, votre /backup risque de se remplir très rapidement !!!)

Mise en place du “job” cron

Pour appeler le script de sauvegarde sauvegarde.sh, il faut l’indiquer dans une table cron; pour cela je vous renvoie au tutoriel cron d’ubuntu-fr.org
En particulier, le script de sauvegarde doit être lancé par un utilisateur ayant accès à l’ensemble du système de fichiers.
Plutôt que d’utiliser root, nous allons créer un nouvel utilisateur , “sauvegarde” qui fera partie du groupe root, et autres groupes utilisateurs nécessaires pour qu’il puisse sauvegarder l’ensemble des répertoires spécifiés.
Son “home directory” sera /backup
% sudo useradd -d /backup -g root -G anthony sauvegarde
donnez lui l’appartenance de ce répertoire:
% sudo chown -R sauvegarde:root /backup
Ainsi, le script sauvegarde.sh doit être accessible et lancé par notre nouvel utilisateur sauvegarde; pour cela, créez une nouvelle crontab pour l’utilisateur sauvegarde :

% sudo crontab -u sauvegarde -e

Votre éditeur (vi ou emacs) se lance, insérez la ligne suivante :
@weekly /chemin_ou_situe/sauvegarde.sh #sauvegarde

çà y est !
votre sauvegarde locale est créée, vous être à l’abri du crash du disque contenant /home /etc et /var !!
Mais si votre machine est victime d’une surtension,et que tous les disques sont endommagés, vous perdrez tout !!!

Sauvegarde distante

Pour se prémunir d’un dégât, d’un vol, d’un incendie, il faut sauvegarder vos données vers une machine distante.
Si vous possédez un serveur dédié (ou si un ami ou autre personne de confiance vous donne accès à son serveur) vous pouvez alors mettre en place une solution de sauvegarde distante.
Pour cela, compléter le fichier sauvegarde.sh en y rajoutant ces lignes :

#############################
# SAUVEGARDES DISTANTES #
#############################
serveur=”mon.serveur.dedie.fr”
#sauvegarde du repertoire home
rsync -avz –delete /backup/home $serveur:/backup/
#sauvegarde du repertoire etc
rsync -avz –delete /backup/etc $serveur:/backup/
#…

Comme vous pouvez le constater, avec rsync, une sauvegarde locale ou distante est traitée de la même manière, la syntaxe est identique, au $serveur: près.
Bien entendu pour que tout ceci fonctionne, vous devez, sur la machine distante, créer un utilisateur sauvegarde , avec pour “home directory” /backup (répertoire à créer sur la machine distante).
% sudo useradd -d /backup sauvegarde
donnez lui l’appartenance de ce répertoire:
% sudo chown -R sauvegarde:sauvegarde /backup
donnez à votre utilisateur sauvegarde un mot de passe (fort de préférence) :
% sudo passwd sauvegarde
Aussi, pour permettre à votre machine locale de se connecter à la machine distante, sans intervention de votre part (sans demander de mot de passe donc) vous devez créer un couple de clés DSA.
Sur la machine locale, logguez vous en utilisateur sauvegarde :
% sudo su sauvegarde
et créez votre couple de clés DSA :

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/backup/.ssh/id_dsa):
Created directory ‘/backup/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /backup/.ssh/id_dsa.
Your public key has been saved in /backup/.ssh/id_dsa.pub.
The key fingerprint is:
XXXXXXXXXXXXX sauvegarde@machine

Acceptez l’emplacement par défaut pour la création des clefs, et appuyez sur entrée lorsque l’on vous demande une “passphrase” (comme çà, nul besoin de saisir de mot de passe pour utiliser la clef).
Il n’y a plus qu’à partager la clef publique générée avec la machine distante :
toujours loggué en utilisateur sauvegarde sur la machine locale :
ssh-copy-id -i ~/.ssh/id_dsa.pub sauvegarde@machine_distante
C’est fini, votre utilisateur sauvegarde, sur la machine locale, pouvant se logguer sur la machine distante, votre script cron, sauvegarde.sh, sera lancé toutes les semaines sans problème afin de sauvegarder localement et à distance vos données importantes.
Vos commentaires sont les bienvenus !

Références :
le site officiel de Rsync
Formation Debian : accès par ssh