Le week-end du 26-27 septembre 2015 se déroulait la 3ième édition de l'Opération Libre, cette fois-ci à Chéméré, en Loire-Atlantique.
Je n'y étais pas principalement en tant que contributeur à OpenStreetMap, mais plutôt pour la prise de photos géolocalisées pour Mapillary.
Préparatifs :
Le programme préparé par l'équipe Nantaise d'OpenStreetMap était assez souple pour s'adapter aux circonstances ; la difficulté principale étant de savoir si les habitants de Chéméré allaient répondre présents à cet évènement un peu particulier. Parce que oui, une armée de geek qui débarque en ville, au mieux ça intrigue, au pire, ça fait peur. Peut-être que les informaticiens barbus font penser à des sortes de Vikings débarquant à dos de ligne de commande, qui sait. :-)
Pour ma part, j'avais prévu de former ceux qui le souhaitaient à la prise de photos géolocalisées.
Ayant participé à une des réunions de préparation, je devais apporter un peu de matériel pour d'autres associations, et j'en ai prévu un peu plus, au cas ou. Entre écrans, scanner, ordinateurs, switches et câbles réseaux, antennes wifi, support Mapillary, outillages divers, vélo, bagages, voilà le résultat...

En action :
Depuis quelques semaines, j'avais troqué mon smartphone pour une petite "action cam", une Xiaomi Yi, qui a l'avantage d'être presque aussi qualitative que les plus connues du genre, les GoPro, mais beaucoup, beaucoup moins cher. Oui, une Yi vaut seulement environ 60€. Le rapport qualité/prix est redoutable.
En revanche, elle n'est pas parfaite :
- La Yi est prévue pour une utilisation en mode "selfie" ce qui entraine une mise au point assez proche (pas d'autofocus sur les "action cam"). Un démontage + réglage + remontage, est nécessaire pour retrouver de la netteté sur les objets lointains.
- Le mode "timelapse" qui permet de prendre des photos à intervalles réguliers a sur les réglages 0.5 et 1 seconde, son exposition bloquée au réglage de la première photo capturée, ce qui entraine des sur ou sous-exposition selon les endroits où on se déplace. Pour contourner ce problème, j'utilise un petit script qui se lance automatique au démarrage de la caméra. C'est un fichier autoexec.ash qui se trouve sur la racine de la carte microSD. En résumé, il équivaut à un humain qui prendrait manuellement une photo toutes les secondes :
1
2
3
4
5
6
7
8
|
sleep 10 #MAIN LOOP while true do t app key shutter sleep 1 done |
En vue de l'Opération Libre j'ai souhaité pouvoir étendre le champ visuel en associant une 2nd caméra à la première. Elle est arrivée seulement quelques jours avant l'Opération Libre, ce qui m'a obligé à improviser sur place. J'espérais pouvoir les positionner en 'V', comme ceci :


le "truc" en bois sert à réduire les petites vibrations et est inspiré de ceci .
Puis coller les 2 images pour créer des petits panoramiques, comme celui-ci :

Le premier problème est que pour le moment, il n'y a pas de moyen de synchroniser la prise de vue sur les 2 caméras, chose indispensable lorsqu'on prend des photos en se déplaçant à vélo. Une idée était de ne pas prendre de photos, mais de filmer, extraire des images des 2 films aux mêmes moments, et de les fusionner. Je n'ai pas pu consacrer suffisamment de temps pour résoudre tous les détails techniques d'une automatisation de ce processus, et un essai manuel réalisé après le week-end à Chéméré m'a définitivement détourné de cette possibilité. En effet, je pensais compenser la moindre qualité d'une vidéo, par l'augmentation du nombre d'images par secondes ; après tout, une vidéo comprend au moins 25 images par secondes, ce qui laisse du choix. Mais voilà, la qualité n'est clairement pas suffisante, on ne peut même pas lire le numéro de la maison sur la gauche, alors que c'est le cas sur une photo :



Dans l'urgence de l'Opération Libre, j'ai opté pour 2 prises de vue simultanées, mais non liées, sans création de panoramiques. La première caméra était logiquement pointée vers l'avant, et la seconde, à 90° vers la gauche :

2 passages dans une rue, et j'avais les 4 angles. Parfait ! Mais il manque encore quelque chose : La Yi n'intégrant pas de récepteur GPS, les photos ne sont pas localisées et pas orientées. Pour ce faire, mon smartphone enregistrait une trace gpx, à l'aide d'OsmTracker . On ajoute dans le sac à dos, des batteries pour alimenter les caméras, une bouteille d'eau, on enfile une chasuble fluo pour être bien visible des chasseurs, et c'est parti !
Étapes techniques :
De retour au Relai de Chéméré, le QG de l'Opl, il faut traiter toutes les photos. Voici les étapes, qui utilisent en partie les scripts proposés sur le Github de Mapillary :
- Récupérer les photos et la trace gpx sur l'ordinateur. Les photos de chaque caméra seront placées dans des dossiers séparés, comme caméra_avant et caméra_gauche.
- Renommer les photos avec Advanced Renamer pour ajouter la date et l'heure. Par exemple YDJX01042.jpg devient 2015-09-27_12-35-42_Xiaomi_Yi_YDJX01042.jpg. C'est plus clair.

- Pour les 2 groupes de photos, utiliser la fonction de corrélation photo/gpx intégrée dans le logiciel Josm (un des outils utilisés pour éditer OpenStreetMap), et enregistrer les coordonnées dans les images (clique droit sur le calque image).
Maintenant, les photos ont des coordonnées, on sait où elles ont été prises. Il reste une information à ajouter : La direction, qui permet de savoir si la photo a été prise vers le Nord, le Sud, etc... C'est une information en degrés par rapport au Nord :
- Exécution du script "interpolate_direction.py" qui va prendre une photo localisée, et regarder où est la suivante pour calculer vers où pointe la première. C'est une méthode qui fonctionne très bien tant qu'il n'y a pas de changement brutal de direction. On l'utilise tel quel pour la caméra avant, mais on ajoute le paramètre -90 pour celle de la caméra qui pointe à gauche.
1
python interpolate_direction.py t:\Mapillary\OPLChéméré\caméra_avant\
1python interpolate_direction.py t:\Mapillary\OPLChéméré\caméra_gauche\ -90

- On affiche de nouveau les photos dans Josm, et à l'aide du plugin PhotoAdjust, on recale celles qui le nécessite, et on corrige les directions s'il y a besoin (maintenir la touche Ctrl), ce qui est souvent nécessaire en cas de virage serré.
- Exécution du script "add_mapillary_tag_from_exif.py" sur les dossiers comprenant les photos caméra_avant et caméra_gauche. Cette étape n'est pas indispensable, mais elle permet d'inscrire dans les tags exif des photos qu'elles font partie d'une même séquence, ce qui évite des problèmes lorsque l'envoi vers les serveurs Mapillary est fait en plusieurs fois.
1
python add_mapillary_tag_from_exif.py t:\Mapillary\OPLChéméré\caméra_avant\
1python add_mapillary_tag_from_exif.py t:\Mapillary\OPLChéméré\caméra_gauche\
Attention, avant de lancer ce script, il faut indiquer des valeurs propres à son compte utilisateur Mapillary. On peut trouver les "HASH" sur sa page d'upload manuel. Pour ma part, je place tout ça dans un fichier de commande Windows que j'exécute avant le script. Je le nomme "set_env.cmd" et il comprend ce type de valeurs, que l'on doit adapter à son compte :12345set MAPILLARY_EMAIL=adresse_mail_de_mon_compte_mapillary
set MAPILLARY_USERNAME=mon_nom_d'utilisateur_mapillary
set MAPILLARY_PASSWORD=mon_mot_de_passe_mapillary
set MAPILLARY_PERMISSION_HASH=une_chaine_de_caractère_très_très_longue_et_complètement_illisible
set MAPILLARY_SIGNATURE_HASH=une_chaine_de_caractère_moins_longue_mais_toujours_illisible
- On termine avec le script "upload.py" qui envoie toutes les images :
1
python upload.py t:\Mapillary\OPLChéméré\caméra_avant\
1python upload.py t:\Mapillary\OPLChéméré\caméra_gauche\

Le résultat est utilisable directement dans Josm à l'aide du plugin Mapillary, ou visible sur leur site, avec par exemple le parc, ou les façades des commerces :
Durant le week-end, j'ai aussi appris à quelques personnes à utiliser OpenCamera, ainsi que l'appli photo de Google pour réaliser des Photosphères, qui sont des photos à 360°. En voici un exemple.
Conclusion
Je regrette que les interactions avec les habitants de Chéméré aient été si limitées, mais il est vrai que le message porté par les "Opérations Libre" est assez difficile à saisir pour les non initiés. En revanche, c'était un vrai plaisir de travailler dans cette sorte de ruche temporaire regroupant autant d'associations diverses et, pendant les restitutions, j'étais toujours impressionné de voir à quel point l'ensemble des projets s'interconnectaient entre eux pour s'améliorer à chaque étape, et donner un résultat gagnant-gagnant pour tous.
Pour finir, un grand merci à toute l'équipe municipale de Chéméré, l'accueil était parfait, et en parallèle de tout ce travail assez intense, franchement, on a bien rigolé !
Divers :
Le Storify de l'Opération Libre
Retour en vidéo sur l'Opération Libre
1 De Davide Usai -
Salut Stéphane,
C'est Davide et nous nous sommes connus à Chéméré.
Je retrouve ton site alors je t'écris un message. Au sein d'OpenWines nous organisons une activité, que j'ai moi même proposé, et j'ai pensé à toi car on aimerait que tu te joins à nous.
Peut-on s’appeler un de ces jours?
Bonne soirée
Davide
2 De Stéphane -
Bonjour Davide,
Je t'envoie un mail rapidement.