PiRDF #1 : Présentation du projet

PiRDF #1 : Présentation du projet

Ce billet marque le début d’une série d’articles concernant la documentation d’un projet que je présenterai à la Maker Faire Paris sur le stand des éditions ENI qui est l’éditeur de mon livre intitulé « Python. Libérez le potentiel de votre Rapsberry Pi ».

Ce projet, je l’ai intitulé PiRDF. Pi en référence au Raspberry Pi et RDF pour le Reconnaissance De Formes. Le but de ce projet sera donc de construire une petite application qui permet d’apprendre et de reconnaitre des objets simples.
Tous les éléments logiciels seront développés en langage Python et publiés sur le « repository » Github : Projet PiRdf sur github. De cette manière quiconque pourra utiliser le code et/ou proposer des évolutions.

Le but de cette démo est montré au public qu’il est possible en très peu de lignes de construire des applications dont les fonctionnalités peuvent être complexes.

Enfin, on notera que l’ensemble de ces articles est une consignation des notes au cours de la réalisation. En effet, à l’heure où j’écris ces lignes le développement du code est loin d’être abouti, vous verrez sans doute des erreurs de conception qui vont nécessiter des refactoring d’un article à l’autre, j’essayerai donc de documenter toutes ces évolutions.

Dans la suite des cet article, je vais détailler le cahier des charges après une courte introduction de ce qu’est la reconnaissance de formes.

C’est quoi la reconnaissance de formes

La reconnaissance de forme est un des sous-domaines de la vision par ordinateur qui est elle-même une discipline à la croisée de nombreuses disciplines que sont :

  • l’informatique
  • les mathématiques appliquées
  • le traitement du signal et des images.

La reconnaissance de formes a pour but de reconnaitre au sein des images un ou des motifs appris au préalable. Ce motif peut être, par exemple, un objet, un visage…
La reconnaissance de formes fait donc appelle à des techniques comme l’apprentissage automatique et à la modélisation statistique. Pour le profane, on pourrait résumer le tout en disant que la reconnaissance de formes est une branche de l’intelligence artificielle même si le terme a en partie perdu de sa teneur à cause de la médiocrité de la vulgarisation de certains médias ces dernières années… Bref, ça, c’est un autre sujet…

Historiquement en sépare la reconnaissance d’objet en 2 familles :

  • l’approche globale
  • l’approche locale

l’approche locale

L’approche locale regroupe les différents techniques qui permettent de détecter et reconnaître un objet au sein d’une scène composée d’un ensemble d’objets.
Pour illustrer, on peut citer la détection de piéton (voir l’image ci-dessous) dans une scène urbaine qui trouve des applications dans le développement des véhicules autonomes.


Crédits : By Milwaukee_(WIS)N_5th_St« Tree,_Rain,_Wind« Pedestrian_1.jpg: vincent desjardinsderivative work: Indif (talk) – Milwaukee(WIS)N_5th_St« Tree,_Rain,_Wind« _Pedestrian_1.jpg, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=11912052

Cette approche qui a beaucoup évolué en matière de performances depuis le début des années 2010, n’est toujours pas parfaite et le taux d’erreur reste toujours trop élevé pour certains types d’applications.
De plus, les dernières méthodes nécessitent, le plus souvent, des puissances de calcul très élevées. À titre d’illustrations, la voiture Tesla autonome possède la puissance de calcul de plusieurs MacBook Pro…
Il est par conséquent quasiment impossible d’espérer faire tourner ce genre de manip sur un Raspberry Pi qui possède des ressources matérielles limitées tant au niveau du processeur que de la mémoire de type RAM.

l’approche globale

À l’inverse, l’approche globale est plus simple et historiquement antérieure à l’approche globale.
Le but, ici, est de reconnaitre un unique objet au sein d’une image ou d’une région d’intérêt au sein d’une image.
Dans ce cas, le nombre de méthodes disponibles dans la littérature est plus nombreux et les performances atteintes par les meilleurs sur les bases de test sont de plus en plus proches de 100% de réussites.
Enfin, ils existent une multitude de méthodes qui présentent une complexité calculatoire diverse et variée. Dans tous les cas, de nombreuses méthodes peuvent être envisagées pour une implémentation en python sur le Raspberry Pi.

Cahier des charges — c’est quoi donc le projet PiRDF

L’application sera réduite au maximum en termes de fonctionnalités et d’interface graphique.
Dans tous les cas, elle sera découpée en 2 phases : 1- l’apprentissage 2- la décision. Les sections qui suivent vont permettre de définir plus précisément les éléments fonctionnels de chaque tâche.

Phase d’apprentissage

La phase d’apprentissage correspond à l’ajout d’un nouvel élément à une base de connaissance.
En pratique cela correspond à calculer un ensemble de caractéristiques à partir de l’image qui contient l’objet de calculer un modèle d’apprentissage à partir de la base de connaissance.

D’un point de vue pratique, on aura à disposition un bouton branché sur le GPIO qui permet de démarrer l’apprentissage.
L’appui sur ce bouton permet de commencer à calculer les caractéristiques pour les images arrivant de la caméra.
Toutes images ne serviront pas à l’apprentissage.
Nous réaliserons un suréchantillonnage du signal vidéo de l’ordre d’une image par seconde voir moins si le temps de traitement est trop long.

Pour mettre fin, à la phase d’apprentissage un second bouton sera installé sur le port GPIO.
Un appui sur ce bouton permet d’arrêter la phase de création et d’enrichissement de la base de connaissances et de réaliser la phase d’apprentissage à proprement dites et permet de créer un modèle de décision.

À partir de cette étape, nous possédons l’information nécessaire pour réaliser une décision vis-à-vis de l’objet présent devant la caméra.

Phase de décision

La phase de décision consiste à déterminer la classe d’appartenance d’un objet devant la caméra aux classes existantes dans le modèle.
Pour réaliser cela, on va calculer un ensemble de caractéristiques à partir de l’image et utiliser un modèle décisionnel pour déterminer la classe d’appartenance.

Enfin, le nom de la classe d’appartenance sera transmis un module de synthèse vocale qui permettra de restituer le nom de la classe d’un point de vue audio.

Par ailleurs, 2 boutons permettront de démarrer et d’arrêter la phase de décision.

À venir prochainement

Si vous jetez un oeil sur le repo Github vous verrez que le coeur du projet est bien avancé.
Vous pouvez donc fouiller pour voir l’évolution du projet en termes de code.
L’article qui suivra détaillera la configuration nécessaire du raspberry à partir d’une configuration vierge.

Le matériel utilisé (liens affiliés — si vous commandez via ce lien, j’ai quelques % en commission pour payer l’hébergement de ce site l!):

Une pensée sur “PiRDF #1 : Présentation du projet”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.