Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Configuration d’un environnement d’annotation sous QGIS

L’annotation de données, ou la saisie de données, est un préalable essentiel à l’IA. Car plus il y aura de données, si possible de bonne qualité, et mieux elle apprendra.

L’IA permet d’atteindre des facteurs d’échelle tels que dessiner 1000 emprises de stationnement pour l’entraînement, peut potentiellement vous permettre d’en détecter des dizaines de milliers, voire soyons fous, des millions.

Dans le précédent article, nous avons esquissé quelques réflexions autour de l’annotation de données sous QGIS vis-à-vis de celle sur des logiciels plus classiques en IA comme LabelStudio.

Ici, nous nous intéresserons à la configuration de l’environnement technique sous QGIS pour l’annotation, toujours en nous intéressant aux emprises de stationnement.

Tout d’abord, définissons ce que nous voudrons caractériser sur ces emprises :

  • La géométrie bien entendu ;
  • La forme du stationnement (voir billet précédent) qui peut être en bataille, épi ou longitudinal (parallèle) ;
  • La destination Personnes à Mobilité Réduite.

Environnement

L’annotation doit remplir plusieurs objectifs :

  • Obtenir beaucoup de données ;
  • Avoir des données de bonne qualité ;
  • Fournir aux annotateurs un environnement de travail adapté.

Selon moi, les trois piliers de l’annotation pourraient être ceux-ci :

Concernant la charge mentale associée à la tâche d’annotation, il est essentiel de fournir un environnement adapté, ergonomique : double écran, outils conviviaux. Il est important de faire des pauses, de s’arrêter lorsqu’une fatigue cognitive apparaît, de diversifier les tâches.

Concernant la reconnaissance, il est inutile de se le cacher : l’annotation pâtit d’une mauvaise image, peu valorisée d’un point de vue sociétal, mal payée, souvent dissimulée, car confiée le plus souvent à des “travailleurs du clic”, le plus souvent localisés dans des pays du tiers-monde ou en voie de développement. Alors qu’il s’agit du métier essentiel de l’IA.

La reconnaissance de cette activité est un point essentiel : il est important de la rétribuer correctement, y compris symboliquement. Les auteur.es de ces annotations ne sont jamais cités, noyés dans la masse des données.

Géométrie et sémantique

Précédemment, nous avons vu que l’intérêt de QGIS était de pouvoir dissocier la saisie des géométries de celle des attributs.

Il y a deux façons principales de saisir les objets, pour lesquels on pourra juger de la rapidité, à augmenter, et de la charge mentale associée, à réduire au maximum.

La première consiste à saisir les géométries dans une première passe, puis d’éditer les attributs sémantiques dans une seconde.

La seconde consiste à saisir objet par objet, soit pour chaque objet de le dessiner, puis de saisir ses attributs.

Je ne me suis pas intéressé à des études sur la charge cérébrale associée à l’annotation, mais il me semble qu’un continuum de mêmes activités, ou d’activités similaires, est à la fois à même d’atteindre une certaine rapidité, mais aussi de réduire la charge mentale d’un cerveau qui changera moins de mode à chaque fois.

Personnellement, dans le cas présent, je découperais le projet en trois phases

  • La saisie des géométries ;
  • Une pause ☁️ ;
  • La caractérisation de la forme de stationnement ;
  • Une pause ☁️ ;
  • La caractérisation de la place PMR ou pas PMR ;
  • Fini !

Ergonomie du poste de travail

N’étant pas ergonome, je vous laisserai le soin de consulter vers des articles traitant de ce sujet.

Concernant la station assise, je pense qu’elle pourrait être questionnée. La tâche d’annotation étant une tâche harassante, je pense qu’il faut nous autoriser à bouger, à agiter ses jambes, et donc de s’autoriser la station debout.

Concernant les écrans, dans l’idéal, il faut disposer :

  • d’un écran pour la saisie des géométries, par exemple à gauche ;
  • d’un autre pour la visualisation ou l’édition des attributs, à droite.

Cependant, si vous n’avez pas de double écran, vous pouvez émuler cet environnement en choisissant d’insérer la table d’attributs dans le dock à droite grâce à ce bouton :

Déplacez ensuite la table à droite :

Comme sur l’image ci-dessus, vous pouvez alléger l’interface en supprimant le contrôle des couches, puisque vous n’agirez que sur la couche Places, et en positionnant l’outil d’ajout de polygones à gauche.

Concernant les souris, certaines souris assez sophistiques disposent de touches configurables dont certaines pourraient correspondre à des classes différentes de l’objet : un bouton pour PMR, un autre pour Non PMR, par exemple.

Dessin

Pour dessiner les places, vous pouvez activer l’outil de forme, en choisissant le mode Rectangle à partir de trois points.

Dans ce mode, vous saisissez deux points, le troisième point crée un rectangle déporté, projeté. Le rectangle s’agrandit au fur et à mesure où vous éloignez le troisième point.

Formulaires

Type liste de valeurs

Dans un premier temps, nous allons créer un formulaire afin de remplir l’ensemble de ces champs.

Concernant la forme du stationnement, nous pouvons créer un champ forme et configurer le formulaire sous la forme classique d’une liste déroulante :

Derrière, la donnée est modélisée d’une façon propre, respectant le standard.

Cependant, lors du remplissage, cela demandera deux clics : un clic pour déployer pour la liste et un clic pour choisir l’item.

Deux clics :

Personnellement, afin de faciliter la saisie, je préfèrerai créer un champ par forme de type booléen : bataille, epi et longitudinal

Même si cette modélisation n’est pas correcte d’un point de vue standard, elle permettra de n’opérer qu’un seul clic en cochant directement le type de forme.

N’oublions pas l’adage, :

🧙 Le mieux est parfois l’ennemi du bien

Cela dit, cela n’empêche pas par la suite de transformer la donnée au bon standard et de réunir les valeurs des trois colonnes dans un champ forme.

L’expression QGIS de transformation sera :

CASE
WHEN bataille is TRUE THEN 'bataille'
WHEN epi is TRUE THEN 'épi'
WHEN longitudinal is TRUE THEN 'longitudinal'

Ainsi, dans le process, nous aurions la donnée d’annotation à transformer ensuite en donnée brute, celle qui pourrait être par exemple diffusée en OpenData. Attention cependant à veiller à la compatibilité des deux modèles.

Cas booléen simple

Intéressons-nous à présent à la caractérisation PMR ou pas PMR.

Pour cela, les choses sont assez simples : il suffit de créer un champ PMR de type booléen. Ainsi, nous aurons une case à cocher pour dire si la place est PMR ou pas.

Il est possible de choisir la valeur NULL pour avoir trois modalités :

  • FALSE (Non PMR)
  • TRUE (PMR)
  • NULL (vide, soit pas caractérisée).

Visuellement, on peut faire la différence sur la case à cocher entre une place Non PMR et une place non caractérisée car la place avec la valeur NULL apparaîtra avec un rectangle gris.

Tandis que la place Non PMR (FALSE) apparaîtra avec un rectangle non coché.

Décocher la case nécessitera de cliquer deux fois, ce qui peut être pénible à la longue, d’autant plus qu’il y a bien davantage de places Non PMR que de places PMR.

Ce que je préfère faire est de créer deux champs booléens :

  • pmr
  • non_pmr

En mettant la valeur à FALSE (décoché) par défaut à toutes les deux.

  • S’il y a FALSE pour les deux, alors cela veut dire que la place n’a pas été caractérisée.
  • S’il y a l’une des deux valeurs, alors cela signifie que la place a été caractérisée.
  • Par contre, s’il y a les deux valeurs à TRUE, cela doit provoquer une erreur.

Vous pouvez faire ce contrôle de cohérence dans QGIS, dans les contraintes en ajoutant l’expression sur les deux champs :

pmr is not non_pmr

Ainsi, on aura ceci si les champs sont mal remplis :

NB : Vous pouvez changer le message en “NON MAIS OH CA VA PAS LA TÊTE !”

Par contre, si les informations sont bien saisies, on a :

🎉 Youpi !

Saisie multiple

Le plugin QuickMultiAttributeEdit permet de changer très facilement les attributs d’un ensemble d’objets, par exemple pour mettre un ensemble de places en non PMR.

Vous les sélectionnez, puis changez la valeur en ouvrant la fenêtre facilement par le raccourci F10.

Des fois, il y a des plugins tout simples qui vous changent la vie !

Configurer la vue attributaire

Dans le cadre d’une saisie en deux temps, la seconde passe s’intéresse à l’édition des attributs associés à la place de stationnement.

Passez dans un premier temps la table en mode formulaire en ayant préalablement sélectionné dans la vue formulaire des propriétés de la couche uniquement les champs qui vous intéressent pour le remplissage (ma phrase est un peu trop longue, j’espère que vous avez suivi), de façon encore une fois à alléger l’interface et réduire la charge.

Le entités sont ordonnées par fid. Cela peut être bien : si vous vous étiez arrêté.e la veille à l’entité 500, notez que vous devrez reprendre à la 501e.

En haut, pour la visualisation rapide, vous pouvez afficher une expression qui vous indiquent les entités qui n’ont pas encore été remplies :

format('%1 %2',"fid", if(pmr is FALSE and non_pmr is FALSE , 'à voir', 'ok'))

Vous pouvez même filtrer les entités qui seront seulement à regarder en allant dans le filtre avancé de la table en bas en tapant pmr is FALSE and non_pmr is FALSE :

Il y a des boutons très pratiques qui permettent de naviguer aisément sur la carte d’entité en entité, que je vous conseille d’activer (soit le déplacement à échelle constante (pan), soit le zoom sur l’entité (1)) :

Clavier

https://upload.wikimedia.org/wikipedia/commons/6/60/Christian_Clavier_2011.jpg

Utiliser le clavier est très efficace par rapport à utiliser la souris.

En effet, la souris nécessite :

  • de solliciter le cortex visuel pour déplacer la souris là où c’est nécessaire ;
  • de solliciter le poignet, ce qui peut, à terme, faire mal aux articulations ;
  • d’activer plusieurs régions et organes de notre corps ;
  • Et nous sommes de gros feignants.

Vous pouvez le plugin Go2NextFeature pour passer d’une entité à une autre. Notamment, le raccourci F6 permet avec cette extension de passer à la prochaine entité.

Personnellement, je préfère configurer moi-même mes raccourcis. Notamment, je configure un raccourci Control+Flèche droite pour aller à l’entité suivante et Control+Flèche gauche pour la précédente.

Aller dans Préférences, Raccourcis Clavier

Après avoir cliqué sur Modifier, tapez votre combinaison de touches, pour moi Control + Flèche droite

Chercher également “Modifier l’entité précédente de la table d’attributs”

Conclusion

Dans cet article, nous avons vu quelques réflexions autour de la modélisation des données pour l’annotation en envisageant un modèle de données basique.

Nous avons vu comment configurer les champs de formulaires, y compris avec des contraintes.

Nous avons aussi vu comment configurer l’environnement de travail, ainsi que la vue formulaire en table d’attributs pour naviguer aisément entre entités, cibler celles à qualifier.

Nous avons vu comment configurer des raccourcis Clavier.

Nous avons, je l’espère, ri de temps en temps.

A suivre

Dans un prochain article, nous verrons comment renseigner automatiquement des champs utiles grâce aux expressions QGIS.

Goodie

Vous avez peut-être remarqué ce raccourci très utile à côté du nom de ma couche :

C’est grâce au plugin Attribute Shortcut.

Un clic sur cette icône affiche automatiquement la table attributaire. Très simple et pratique.

Annotation GéoIA

Dans ce billet, nous allons nous intéresser à l’annotation de données sous QGIS vis-à-vis d’autres outils plus classiques en IA comme Label Studio ou LabelMe, en nous intéressant à l’objet parking.

L’annotation de données sous QGIS peut être considérée comme une variante très proche, finalement, voire même équivalente, de la digitalisation de données (au sens où peuvent l’entendre les dessinateurs classiques).

Sur un outil carto, les finalités de la digitalisation et de l’annotation sont assez différentes : pour l’une, le porter-à-connaissance, l’observation et l’analyse du territoire, pour l’autre l’entraînement d’IA, mais la technique demeure assez similaire.

Une différence notable entre les deux concerne le contenu de la tâche : tandis que la digitalisation de données cartographiques concerne en général, dans un même continuum, soit une diversité d’objets : des routes, des infrastructures, des bâtiments, soit une diversité d’attributs, comme des niveaux de caractérisation (par exemple pour l’occupation du sol), l’annotation IA, elle, se concentre en général sur un objet bien précis qu’on vise à détecter sur des images, que l’on saisira à la chaîne, si nécessaire en le déclinant sur un nombre limité de classes, ce qui confère à l’opération un caractère moins esthétique et gratifiant, plus répétitif et monotone.

Le séquençage d’opérations pour l’annotations sous QGIS se différencie d’outils comme Label Studio ou LabelMe sur plusieurs points.

Label Studio

Les logiciels classiques d’annotation IA fonctionnent image par image, en général non géoréférencées, bien que cela n’empêche nullement d’utiliser des jpeg ou encore des png auxquels associer des world files (que QGIS peut d’ailleurs générer lors d’atlas), respectivement jpw et pngw.

Sous Label Studio, on crée un projet, par exemple Parkings :

Il faut préciser quelle interface d’annotation utiliser, ici segmentation par polygones.

Il faudra ensuite définir les classes d’objet. Pour cela, un petit état de l’art s’impose.

Standards de données et configuration de l’annotation

Nous nous intéresserons à la forme du stationnement.

Pour l’état de l’art, on peut regarder :

  • les schémas de données liés au stationnement ;
  • les données existantes sur le sujet.

Concernant les schémas de données, nous pouvons aller sur :

  • schema.data.gouv.fr;
  • le wiki d’OSM.

Sur schema.data.gouv.fr, il existe un schéma associé aux emprises de stationnement :

https://schema.data.gouv.fr/macaron-ai/onstreet-parking-schema

Le schéma définit les champs suivants :

🙁Nous ne voyons pas de champ sur la forme de stationnement.

Par contre, nous voyons un champ places calculées. Or, le calcul du nombre de places dépend de la forme du stationnement, en plus de ses dimensions en largeur et longueur.

En effet, un rangement en bataille comporte plus de places qu’un rangement en épi sur la même surface.

Il est important de connaître la forme du stationnement pour déduire le nombre de places

Il est dommage que ce champ Forme n’apparaisse pas dans le schéma. Mais il est toujours possible de faire une proposition pour améliorer le standard !

En revanche, nous trouvons l’information de la forme de stationnement sur le Wiki d’OpenStreetMap

https://wiki.openstreetmap.org/wiki/FR:Street_parking

OSM peut être d’une aide très précieuse, à la fois pour récupérer des données d’annotation, mais aussi pour accéder à des standards folksonomiques très complets.

Nous trouvons la même modélisation pour la donnée d’emprises de stationnement de la Ville de Paris :

Revenons-en à notre annotation sous Label Studio.

Nous définissons nos classes de cette façon :

On importe les images et on commence à saisir les données.

Concernant la saisie proprement dite, on choisit le libellé, puis on dessine.

A noter qu’on peut utiliser un raccourci clavier pour chaque classe, 1 pour bataille, 2 pour épi et 3 pour longitudinal.

Aussi, le combinaison Ctrl+Enter permet de soumettre l’annotation, et de passer à l’image suivante.

Les raccourcis clavier permettent d’être beaucoup plus rapide et sollicitent moins les articulations que la souris.

On voit que le processus est différent sous Label Studio par rapport à QGIS, car sous QGIS, on dessine l’objet, puis on le classe (logique pour un logiciel de carto).

On peut noter que Label Studio ne permet donc pas de procéder en deux phases, à savoir :

  • Une tâche graphique consistant à dessiner les objets, qui pourrait être confiée à un dessinateur expert ;
  • Une tâche sémantique consistant à classer chaque objet selon sa catégorie, qui pourrait dans le cas présent être confiée à n’importe qui.

De ce point de vue, QGIS autorise une certaine souplesse et une organisation du travail que ne permet pas Label Studio (séparation du dessin et de la sémantisation).

A noter qu’on pourrait très bien alimenter Label Studio pour la tâche de caractérisation sémantique à partir des produits de QGIS.

Cela aurait un intérêt afin de profiter de l’interface de labellisation de Label Studio mais cela demande en revanche de l’ingénierie de la donnée pour exporter, réaffecter les classes à la géodonnée d’origine. L’intérêt est selon moi assez faible.

Il vaut mieux essayer de faire de QGIS une station d’annotation performante, ce que nous approfondirons par la suite, d’autant plus que si vous amenez des collègues à contribuer, cela peut être le prétexte à une mini-formation QGIS 😉.

Label Studio est néanmoins un excellent outil d’annotation. Il permet d’annoter collaborativement grâce son accès web, de suivre facilement l’état d’avancement du projet d’annotation, et d’identifier l’auteur.e de chacune.

QGIS permet néanmoins de s’en approcher par l’utilisation de bases de données type PostgreSQL, de vues ou de Virtual Layers, ce que nous verrons dans un prochain billet.

Voici comment exporter les annotations sous Label Studio :

Par souci de commodité, j’ai choisi de limiter l’annotation à un objet surfacique.

Voici le résultat.

[
    {
        "id": 36,
        "annotations": [
            {
                "id": 30,
                "completed_by": 1,
                "result": [
                    {
                        "original_width": 981,
                        "original_height": 822,
                        "image_rotation": 0,
                        "value": {
                            "points": [
                                [
                                    50.67154310273576,
                                    42.736486486486484
                                ],
                                [
                                    27.88350276882387,
                                    71.62162162162163
                                ],
                                [
                                    26.32655591371188,
                                    84.7972972972973
                                ],
                                [
                                    27.034259029671876,
                                    86.82432432432432
                                ],
                                [
                                    35.243615174807836,
                                    81.25
                                ],
                                [
                                    36.65902140672783,
                                    73.1418918918919
                                ],
                                [
                                    59.588602363831725,
                                    43.41216216216216
                                ]
                            ],
                            "closed": true,
                            "polygonlabels": [
                                "épi"
                            ]
                        },
                        "id": "r1KkcNC-WY",
                        "from_name": "label",
                        "to_name": "image",
                        "type": "polygonlabels",
                        "origin": "manual"
                    }
                ],
                "was_cancelled": false,
                "ground_truth": false,
                "created_at": "2025-08-18T06:22:54.603031Z",
                "updated_at": "2025-08-18T06:36:13.453192Z",
                "draft_created_at": "2025-08-18T06:20:50.017499Z",
                "lead_time": 937.94,
                "prediction": {},
                "result_count": 1,
                "unique_id": "47da71f6-5e78-4b57-a4a6-21c8acb2bf46",
                "import_id": null,
                "last_action": null,
                "bulk_created": false,
                "task": 36,
                "project": 20,
                "updated_by": 1,
                "parent_prediction": null,
                "parent_annotation": null,
                "last_created_by": null
            }
        ],
        "file_upload": "bcc78a2c-01.jpeg",
        "drafts": [],
        "predictions": [],
        "data": {
            "image": "\/data\/upload\/20\/bcc78a2c-01.jpeg"
        },
        "meta": {},
        "created_at": "2025-08-18T06:16:25.727527Z",
        "updated_at": "2025-08-18T06:36:13.522814Z",
        "inner_id": 1,
        "total_annotations": 1,
        "cancelled_annotations": 0,
        "total_predictions": 0,
        "comment_count": 0,
        "unresolved_comment_count": 0,
        "last_comment_updated_at": null,
        "project": 20,
        "updated_by": 1,
        "comment_authors": []
    }
]

points comprend les coordonnées de chaque point du polygone. Cependant, il s’agit de coordonnées relatives aux dimensions de l’image, et non de coordonnées géographiques.

Les données annotées sont à des formats JSON, ou XML, non natifs pour les SIG si bien que pour les intégrer à ces derniers, il sera nécessaire de réaliser quelques transformations, et de créer quelques scripts.

LabelMe

Sur LabelMe, le processus est un peu différent, et plus proche de QGIS.

On saisit un objet, puis on renseigne sa classe.

Les classes s’alimentent au fur et à mesure qu’on progresse dans l’annotation.

Finalement, ce comportement peut être atteint sous QGIS en utilisant le type “Valeurs uniques” dans la configuration du formulaire QGIS (bien cocher “Editable”)

Nous obtiendrons ceci à la saisie d’un objet :

IA et géo

La librairie GeoAI de Qiusheng Wu vise à spatialiser l’ensemble des traitements de données IA.

Ce sont comme des branchements aux librairies IA les plus communes (telles que torch), ce qui est bien pratique pour consolider l’environnement de travail et ne pas faire des aller-retours entre un environnement IA classique et SIG.

Signalons aussi l’outil geodeep qui permet de détecter des arbres, voitures, routes depuis des images aériennes.

Une des réalisations de Qiusheng Wu est la librairie SamGeo.

Segment Anything est un modèle qui, sur la base d’un point ou d’un rectangle posé sur une image, parvient à deviner la surface à considérer. On voit rapidement l’intérêt pour la géomatique.

SamGeo peut fournir un objet surfacique géoréférencé à intégrer directement dans votre SIG à partir d’un point géoréférencé ou d’une BBOX.

Voici un résultat que l’on peut obtenir avec SamGeo :

Notons d’ailleurs l’existence du plugin GeoOSAM qui intègre SAM dans QGIS.

QGIS

L’annotation de données sous QGIS peut emprunter une variété de chemins.

Grilles

Sous QGIS, pour une tâche de segmentation, ou de détection, on doit découper la zone à investiguer en carreaux afin de préparer les données nécessaires à l’entraînement d’une IA. Chacun de ces carreaux fournira l’image sur laquelle réaliser l’entraînement.

Dans certains cas, les dalles à utiliser fourniront naturellement les images sur lesquelles réaliser l’entraînement.

Dans ce cas, pour avoir la grille associée, il suffit d’en créer le tableau d’assemblage. en choisissant le tableau contenant les dalles

Ce tableau d’assemblage fournira la grille de suivi de l’état d’avancement des annotations. Nous verrons comment activer ce suivi dans un prochain billet.

Dans le cas où la zone serait très grande ou les données d’une précision telle que cela nécessiterait de considérer un tamis plus fin, il sera nécessaire de réaliser soi-même la grille.

Voici comment générer une grille sous QGIS :

On utilisera l’atlas pour générer les images le long de la grille.

Remarque sur d’autres objets de couverture

On pourrait se dire que des objets type parcelles fourniraient des objets corrects à partir desquels réaliser l’atlas et les images d’entraînement, mais cela a plusieurs inconvénients :

  • Les parcelles seront de taille différente, et les images en sortie correspondront à des échelles différentes ;
  • Si deux parcelles saisies sont contigües, certains objets pourront apparaître sur deux images, voire plus, ce qui équivaut à surentraîner le modèle IA sur ces objets.

La grille garantit une homogénéité des tailles et qu’il n’y ait pas de recouvrement, et donc d’objets surreprésentés.

Sachant qu’il est d’usage d’associer aux IA une fonction d’augmentation qui génèrera une variante synthétique, augmentée, du jeu de données, où les images auront été tournées, changées d’échelle (zoomées/dézoomées), ce qui permettra d’envisager une variété de situations possibles, soit de généraliser un maximum, sans avoir à réaliser davantage d’annotations.

Ici, nous avons considéré sous QGIS le cas d’usage “saisie de parkings”.

Masques basiques

Sur une tâche de type classification, où l’on doit classer des places préalablement détectées, par exemple en place PMR / place non PMR, QGIS permettra, par le biais des masques, dans l’atlas, de faire abstraction de ce qui environne la place de façon à ce que l’IA ne cherche pas à y trouver des motifs.

Sous QGIS, on utilisera le style :

  • Polygones inversés ;
  • Ensemble de règles ;
  • L’expression @atlas_featureid = $id

Voici comment générer l’atlas dans ce cas de figure :

(1) Dans un premier temps, on choisit la couche Places sur laquelle réaliser l’export.

(2) Il est important que l’identifiant de l’objet apparaisse dans le fichier d’export image, sinon on ne retrouvera pas nos petits 🐥.

On insère la carte. Comme on ne peut préjuger de l’orientation de la place, on choisit une image carrée de même hauteur et largeur

Voici le rendu pour cette place :

On exporte les images dans un dossier datasets dans lequel on mettra un dossier :

  • IS-PMR (pour les images de places PMR)
  • NOT-PMR (pour les images de places non PMR)

Pour cela, on utilise l’option de filtrage lors de l’export de l’atlas :

Ici, les images seront à mettre dans le dossier IS-PMR.

L’expression handicapee is False sera à utiliser pour le dossier NOT-PMR

Masques avancés

Dans d’autres cas où l’on devrait considérer l’environnement proche, par exemple pour l’élimination de faux positifs lors d’une détection de places de parkings, on pourra :

  • Appliquer une marge autour de la place assez significative pour intégrer l’environnement :
  • Réaliser différents types de masques, plus ou moins progressifs, et tester les performances du modèle selon ces derniers.

Voici un exemple avec un masque de type “dégradé selon la forme” :

Cas d’une place qu’on a notée comme “bien détectée”, qui servira à l’entraînement

Cas d’une place qu’on a notée comme “mal détectée”, qui servira à l’entraînement

Nous sommes sur cette image à proximité d’un terrain de sport et l’IA a détecté le marquage du terrain comme celui d’une place de parking.

Sous Label Studio ou LabelMe, la réalisation de ces masques nécessiterait de post-traiter les images et de réaliser un script, par exemple sous Python, ce qui serait plus complexe.

En résumé

Nous avons :

  • Pressenti que QGIS pouvait fournir un environnement approprié pour annoter des images ;
  • Analysé qu’il permettait d’organiser le travail et de répartir les tâches en fonction des envies et compétences de chacun, notamment en séparant les tâches géométriques des tâches de caractérisation sémantique ;
  • Observé qu’il fournissait un environnement de choix pour produire les images d’entraînement, sans nécessité de programmation, grâce à la fonction Atlas.

A suivre

Dans de prochains billets, nous verrons :

  • Comment configurer QGIS afin de saisir/annoter des objets de manière efficace, toujours sur l’exemple des parkings ;
  • Comment utiliser les expressions pour pré-renseigner certaines valeurs ;
  • Comment suivre l’avancement des annotations dans un cadre collaboratif.

2021 dans le rétro

Cela fait longtemps que je n’ai pas écrit d’article sur mon blog.

Je me suis dit que ce début d’année 2022 était l’occasion de parler de mes projets les plus marquants de 2021 réalisés au Cerema ou sur mon temps propre.

C’est comme regrouper en un seul article tous les articles que j’aurais pu écrire (dû ?) en 2021.

Vous verrez que pour moi, 2021 a été beaucoup été question de qualité et de standardisation, ainsi que de (géo)dataviz. Mais aussi de musique.

Formation “La data dans les territoires” avec OpenDataFrance

Avec l’association OpenDataFrance, j’ai animé début 2021 quelques sessions de formation en webinaire intitulées “La data dans les territoires”.

J’ai eu l’honneur d’ouvrir les sessions en animant le module : “La data, kezaco ?” afin d’expliquer ce qu’est une donnée, lister les typologies de données avec des analogies : la donnée brute comme le cristal, celle enrichie comme un verre ou harmonica de cristal, parler des API, des licences, … en essayant d’être le moins technique possible.

J’ai aussi animé le troisième module autour de l’écosystème des données en présentant les acteurs de la donnée, ce qu’ils font, et les relations qu’entretient la donnée avec la société civile : les répercussions d’une data déséquilibrée sur les disparités de politiques publiques de plus en plus propulsées par les données, mais aussi les discriminations engendrées par des biais dans l’IA. A ce titre, ne pas hésiter à suivre les webinaires “Automating Society”.

Schéma sur les arrêtés de circulation pour le transport de marchandises

On the standardization road again

Avec La Région Sud, OpenDataFrance, et le concours d’Etalab, dans le cadre de la Fabrique de la Logistique, nous avons travaillé au Cerema sur la dématérialisation des arrêtés de circulation pour le transport de marchandises.

Au tout départ, un environnement de saisie SIG, sous QGIS, était envisagé, mais de fil en aiguille, l’idée de créer un schéma de données nous a semblés la plus pertinente, sous les conseils de Jean-Marie Bourgogne d’OpenDataFrance.

Le schéma est aujourd’hui publié sur schema.data.gouv.fr et accompagné de tutoriels qui expliquent pas à pas comment dématérialiser l’information de véritables arrêtés municipaux. D’ailleurs, je me dis que pour chaque schéma, il serait intéressant de proposer des tutoriels pour accompagner les producteurs dans la saisie.

Les vertus de ce schéma ont été celles-ci : il a permis de regrouper des acteurs, de réfléchir à un modèle de remplissage d’informations qui soit le plus appréhendable possible par des agents en Collectivités à qui l’on confierait la tâche de saisie. Enfin, la publication d’un schéma sur schema.data.gouv.fr entraîne de facto l’éclosion d’un validateur de données, et d’un assistant pour la création de données. Sympa, non ?

L’idée de ce schéma était de regrouper dans un tableau l’ensemble des informations utiles, issues d’arrêtés réglementant la circulation en ville de véhicules logistiques sur certaines rues, à certaines heures de la journée, tout en restant accessible et réutilisable.

MCDto2DCSV Challenge

Un défi majeur, que nous avons tenté de relever, était de concentrer un modèle initialement relationnel dans un modèle tabulaire en 2 dimensions : le fameux CSV. L’adoption d’Opening Hours d’OSM, qui devient aujourd’hui un standard dans les standards, l’utilisation de champs à valeurs multiples avec référentiel de valeurs dans certains cas, et dans d’autres non (pour permettre assez de souplesse) nous ont aidés.

En parallèle à ce schéma, j’ai créé un assistant en ligne pour aider les producteurs de données appelé groom-groom.

groom-groom (https://cerema-med.shinyapps.io/groom-groom)

Groom-groom fournit un assistant pour remplir certains champs très techniques : les jours et horaires au format Opening Hours, les géométries de rues au format KWKT, des champs multiples.

Des collaborations avec des villes du Sud vont commencer pour aboutir aux premiers jeux de données d’arrêtés sur DataSud. Cela permettra d’éprouver le standard, même si nous avons déjà pu le mettre à l’épreuve de plusieurs arrêtés.

La qualification d’une donnée ne peut exister selon moi sans spécifications concernant celle-ci, soit sans standard, et la production de données de qualité dépend aussi de la présence de standards qui soient de qualité.

Validator

En même temps que je prenais connaissance de schema.data.gouv.fr et de la norme TableSchema qui propulse ses schémas, nous devions, dans le cadre du projet Cartofriches auquel je participe, consolider des données multi-sources, issues de partenaires divers et variés.

Je me suis alors posé la question d’un validateur de données qui permette de prendre connaissance des données d’entrée, et de réaliser une conversion d’une structure originelle à une structure cible.

Validator intègre un standard, un visualisateur de données et un transformateur d’une structure à une autre. Validator est écrit en python.

J’avais de prime abord regretté la technicité du standard TableSchema au format JSON. Aussi, pour validator ai-je utilisé un tableau CSV car il est plus facilement modifiable qu’un fichier JSON. Aussi, souvent, un tableau, par exemple sous framacalc, constitue la pierre angulaire des premières collaborations autour des standards, avant la constitution du fichier JSON.

Validator m’a permis de consolider mes connaissances en python tout en bénéficiant des conseils éclairés de Mathieu Morey de Datactivist, grâce auquel j’ai appris l’existence de plein de librairies intéressantes, dont black, typer, pydantic.

A noter que j’aurais des idées afin d’implémenter la dimension géo dans TableSchema. Je partagerai ces idées dans un nouveau billet de blog.

Quadogeo

La planète ISO, une planète où tout le monde est dans la norme

Le groupe Quadogeo, sous l’égide du CNIG, s’intéresse à la qualité des données géographiques.

Une donnée géographique est composée de deux composants principaux. Le premier concerne ses dimensions géographiques, le second ses dimensions attributaires.

Déjà beaucoup de ressources méthodologiques sur la qualité des données existent sur le net, créées par OpenDataFrance, la FING, Datactivist, mais peu concernent la dimension géographique, à l’exception de certains documents IGN ou Certu, que le groupe Quadogeo s’est proposé, justement, de remettre au goût du jour.

Les dimensions géographiques, comme vous le savez déjà, concernent la localisation et la forme d’objets dans l’espace.

En aparté, question que je pose souvent à des apprenants : “Quelle proportion de données géographiques existe parmi toutes les données existantes ?” On la retrouve quasiment partout. Même si la donnée n’existe pas toujours à des formats spatiaux type shapefile ou geopackage, la simple mention d’une adresse, d’une commune ou d’une référence cadastrale dans un fichier en fait une donnée géoréférençable et spatiale. Et force est de constater que peu de jeux de données échappent à ces attributs de localisation.

Revenons à la qualité : le groupe Quadogeo me donne l’occasion de m’intéresser à la qualité des données, pas forcément dans sa dimension géo, mais de manière générale, et à des initiatives de qualification et d’impact de jeux de données tels qu’évalués dans d’autres pays, comme au Canada à Toronto.

Aussi, le groupe me permet d’expérimenter et mettre au point des outils de contrôle et de qualification des dimensions spatiales d’une donnée, comme le modeste quadorender.

J’ai aussi pu prendre connaissance, par ce groupe, d’initiatives telles que le Geospatial User Feedback, Interlis, des plugins QGIS comme QompliGIS, qui visent pour le premier à collecter le ressenti qualité des usagers, pour les seconds, à formaliser, spécifier et contrôler la donnée dans sa dimension géo.

Webinaires qualité des données géos

RéGIS, le gaffeur de la géodata

Le Cerema avait produit une série de fiches autour de la qualité, mais avec le CRIGE, nous avons souhaité aller plus loin, en réalisant 5 webinaires autour de la qualité des données géographiques.

Ces webinaires, d’une durée chacun de 2h30, se déroulent en deux phases : une présentation théorique des mesures de qualité, et une mise en application concrète avec QGIS.

Lors de ces sessions, assurées par Stéphane Rolle du CRIGE PACA et moi-même, nous avons misé sur l’humour, nécessaire pour aborder un sujet aussi “effrayant” que la qualité, en incarnant un personnage gaffeur appelé Régis (si vous avez pigé, il y a un petit jeu de mots avec GIS pour Geographical Information Systems).

Régis fait des bêtises de digitalisation, de saisie de données que nous nous empressons de détecter et de quantifier.

Ces webinaires ont permis de donner une tangibilité aux fiches qualité via des applications pratiques, reproductibles, sous QGIS, d’aller à la rencontre des utilisateurs, et de collecter des remarques très pertinentes sur la qualité de la part des participants, remarques qui permettront de solidifier le contenu de formation.

Master Dataviz Mois dans le cadre de l’Innovation Publique

Dans le cadre du Mois de l’Innovation Publique 2021, j’ai été invité à animer une masterclass autour de la Dataviz.

Le contenu de cette masterclass est disponible en Open à cette adresse : https://github.com/datagistips/dataviz-masterclass

Aussi, la masterclass est disponible en format web ici : https://datagistips.github.io/dataviz-masterclass/

Il se compose d’une petite introduction à la dataviz, en passant en revue des dataviz marquantes, comme celle de Charles-Joseph Minard, en proposant des notebooks qui explorent la couleur, confrontent les camemberts aux graphiques en barres.

Enfin, cette masterclass aborde pas à pas, commit après commit, la création d’une application autour de données sur l’artificialisation, données consolidées par le Cerema.

Cette masterclass permettra d’initier un module de formation autour de Shiny au MTE.

D3

Amoureux de la représentation des données, D3 m’a fourni l’occasion d’apprendre le javascript via la dataviz, de façon ludique et pratique.

Sur la base des données ouvertes de trafic que nous avons publiées suite au Covid, je me suis amusé à produire quelques notebooks autour de D3 et du jeu de données trafic COVID.

Par exemple, une façon de visualiser la baisse et la rehausse trafic en animation

Là, c’est statique, mais en cliquant, vous aurez l’animation

Comme disait Laurent Jégou, chaque apprentissage nécessite d’intellégir, à savoir appliquer ses connaissances, immédiatement à quelque chose de tangible, qui nous soit utile.

J’ai encore quelques projets D3 en gestation, telles qu’une transposition des Covid sparklines sous D3, ce qui me permettra d’apprendre à manipuler le côté spatial des données sous D3.

J’ai été très étonné de voir le fourmillement de l’univers Javascript dans D3, en pleine ébullition.

D’ailleurs, il y a un très bon fil twitter de Tom Février sur javascript.

J’ai appris dans ce fil que Jeff Atwood, le créateur de Stack Overflow, aurait prédit que « Toute application qui peut être écrite en #JavaScript sera un jour écrite en #JavaScript. ». A ce titre, il existe une librairie appelée Arquero qui permet de manipuler des données avec la même versatilité que tidyverse sous R, ce qui accrédite ce présage.

Pensée Design

Grâce au Cerema, j’ai pu suivre une formation au Design Thinking animée par la Fabrique Humaine.

J’ai trouvé cette formation très intéressante, en cela qu’elle permet d’envisager les choses non du point de vue de l'”Expert”, mais du point de vue de l’Utilisateur.

En effet, certains projets sont parfois déconnectés de l’Usager. Ce dernier ne se sent pas engagé dans la démarche, parfois même avec un sentiment d’infériorité vis-à-vis d’une expertise affirmée par les tenants du projet.

Cette démarche ascendante, bottom up, qui valorise l’expérience et le ressenti des utilisateurs, permet de motiver les troupes, lever des ambigüités sur la direction de projets, qui ne permet que de leur faire du bien (en plus parfois de les sauver).

Cette approche fournit les bons réflexes pour dompter aussi la multitude d’idées qui jaillit de brainstormings : des façons de les hiérarchiser, de les prioriser et de les aiguiller pour prototyper à une solution. De plus de façon assez ludique et sympa, et selon une alternance de convergences-divergences caractéristiques de cycles naturels.

Des cartes

De la distorsion de la donnée géographique

La cartographie est une discipline d’une telle noblesse qu’il m’est difficile de me revendiquer un de ses pratiquants. Je me considère plutôt comme un bidouilleur de données spatiales qui s’amuse à faire des cartes.

Sur mon temps libre, j’expérimente sur mon territoire des types de cartographie, dans une discipline que je nommerais cartomatique, à la croisée de la cartographie et l’informatique, et que je réalise à grand renfort de geometry generators sous QGIS.

Sur Aix-en-Provence, je m’amuse à contorsionner les rues, les bâtiments afin d’aboutir à certains rendus, soit à faire faire des acrobaties aux données vectorielles.

Cercles contenus
Mon voisinage façon Kandinksy

Sur la Sainte-Victoire, j’expérimente différentes façons de voir le relief, soit à faire faire des acrobaties aux données de Modèle Numérique de Terrain.

La Ste Victoire et la division de la joie
Une Nuit Étoilée à la Ste Victoire

Il faut dire que l’ouverture Open des données RGE de l’IGN permet à présent de beaucoup s’amuser avec les cartes.

Du côté du design génératif, ou du graphisme computationnel (voir le fil #genuary), je vois beaucoup d’oeuvres intéressantes, vibrionnantes, mais pour lesquelles je regrette une décorrélation à quelque chose de tangible et concret.

Je vois beaucoup de potentiel dans l’utilisation des données spatiales pour expérimenter de nouvelles façons de voir et représenter le territoire de façon artistique.

(Temps personnel)

OSM Data

Je participe aussi bénévolement à OSM Data, pour le volet visualisation des données. OSM Data a été créé par Karl Tayou.

Karl, Jean-Louis Zimmermann et moi-même sommes de la partie.

J’ai ainsi pu créer un style autour des lampadaires, iconique de la plateforme, un sur les sentiers de randonnée, ainsi que d’autres, divers et variés.

Hypercarto des lampadaires

OSM Data permet de prendre connaissance de la richesse OSM à la façon d’un catalogue de données. OSM Data est ainsi présenté dans certains cursus pour montrer à quoi ressemble OSM et toutes les thématiques qui y sont associées.

OSM Data permet aussi de télécharger les données OSM facilement au format Geopackage.

Enfin, comme vu avec les lampadaires, OSM Data fournit des rendus cartos très avancés qui rendent honneur à l’effort, immense, des contributeurs d’OpenStreetMap.

L’hypercartographie du lampadaire : du point à l’objet réaliste

Après la cartomatique, pourquoi ne pas introduire un nouveau mode de cartographie : l’hyper-cartographie.

Si la micro-cartographie s’intéresse à la cartographie d’éléments minuscules dans l’espace, tels que des bancs, des passages piétons, des feux de signalisation, l’hyper-cartographie s’intéresse, elle, à la restitution cartographique, pour un objet donné, du maximum de ses attributs. Ainsi, pour les lampadaires, on essaiera de représenter graphiquement le type de lampe, la couleur de l’éclairage, le type de mât, l’orientation de l’éclairage.

Dans le cadre d’OSM Data, nous demandons aux utilisateurs quels rendus ils souhaitent.

Le prochain sera donc les restaurants. Miam !

(Temps personnel)

Géotribu

Une des missions que je me suis fixées l’année dernière est de remettre au propre les revues de presse de 2011, à grand renfort de scripts.

Il y a plusieurs passes de correction : du gras à passer en titres, des niveaux de titres à corriger, des espaces à supprimer. Je dois admettre que le temps passé à programmer ça était si grand qu’il aurait été sans doute aussi rapide de le faire manuellement.

Cependant, le temps passé à deux activités différentes ayant la même finalité, l’une auto, l’autre mano, n’a de mon point de vue pas la même valeur.

Le temps passé à concevoir des scripts est un temps à apprendre, à consolider quelque chose qui sera toujours réutilisable plus tard, peut-être même sur les revues de presse d’autres années.

Une fois les revues de presse nettoyées, beaucoup de valorisations seront possibles, telles q’une analyse de l’ensemble des revues de presse et de l’évolution des tendances géomatiques, une petite vidéo GIF à partir des des imagettes, la mise en opensource et en JSON du contenu.

To be continued !

(Temps personnel)

Collaboration musicale avec Samuel Bobin

J’ai commencé l’harmonica pour son côté léger et sympathique.

L’imaginaire que le ruine-babines véhicule est aussi fascinant. C’est celui du voyage, celui des grandes étendues d’Amérique où seuls résonnent le sifflement du train et le jeu d’harmo du cow-boy de Morricone ou du hobo de Kerouac.

Au départ autodidacte, inspiré de prime abord par la rugosité du souffle du bluesman James Cotton, puis ensuite par la limpidité de celui de Jean-Jacques Milteau, j’ai appris l’harmonie et l’impro jazz auprès de Sébastien Charlier, de mon point de vue un des meilleurs harmonicistes au monde, et approfondi les overnotes, une technique étrange de respiration qui permet d’obtenir la gamme chromatique à l’harmonica diatonique, sésame pour s’aventurer sur d’autres contrées musicales.

L’année dernière, le chanteur (et batteur), Samuel Bobin (du groupe Poum Tchack) m’a proposé de l’accompagner à l’harmonica lors d’une session youtube Tiny d’Aix (en référence aux fameux Tiny Desk) autour de son album Combustion Spontanée, un savoureux album aux sonorités langoureuses et jazzy.

Ce fut un honneur pour moi de prendre part à un projet impliquant des musiciens professionnels, reconnus comme Cathy Heiting.

Si vous voulez voir la vidéo et entendre la musique :

Voilà pour un petit “résumé” de l’année 2021 !