Compteur d'objets intelligent: reconnaissance d'images simplifiée avec Edge Impulse
sur
Souhaitez-vous transformer un Raspberry Pi et une caméra en un outil intelligent de calcul d'objets à l'aide de Edge Impulse ? Ce projet de compteur d'objets accessible démontre la facilité de démarrer avec Edge Impulse sur un Raspberry Pi. Suivez-nous.
Edge Impulse est spécialisé dans la fourniture d'outils et de plateformes pour le développement de modèles d'apprentissage automatique pour l'edge computing, en particulier pour les systèmes embarqués. L'edge computing implique le traitement des données à proximité de la source de données, au lieu de dépendre d'un serveur distant. C'est parfait pour une implantation sur un Raspberry Pi ! Dans cet exemple, nous allons compter les petits objets, dans le cas présent les boutons ordinaires que l'on trouve sur les vêtements.
Les plateformes d'apprentissage automatique telles que Edge Impulse utilisent ce que l'on appelle des modèles, qui sont des types spécifiques d'algorithmes utilisés pour l'analyse des données et la reconnaissance des formes. Ces modèles sont entraînés à reconnaître des formes, à faire des prédictions ou à effectuer des tâches basées sur les données d'entrée.
Les modèles Edge Impulse permettent de classer facilement les objets. Vous pouvez faire la distinction entre un homme et un animal, un vélo et une voiture, etc. En outre, vous pouvez facilement compter une sorte d'objet parmi d'autres types d'objets. Tout ce dont vous avez besoin, c'est d'un module caméra de bonne qualité, d'une lumière suffisante, d'une mise au point correcte, et enfin, d'un ordinateur de taille moyenne (un Raspberry Pi 3 ou Raspberry Pi 4 est suffisant), et vous êtes prêt à compter.
Dès le départ, ce projet a été destiné à une installation au niveau microcontrôleur (MCU), comme un Espressif ESP32, un Arduino Nicla vision, etc. C'est pourquoi il a été conçu pour une très petite zone de comptage (120 × 120 pixels) avec un bouton relativement petit en tant qu'objet à compter. En fin de compte, il s'est avéré que même pour une si petite zone, les microcontrôleurs n'étaient pas du tout adaptés. Les modèles d'apprentissage automatique sont pré-entraînés sur les serveurs Edge Impulse et un fichier modèle est généré pour être stocké sur l'appareil embarqué. Ici, le fichier modèle lui-même pèse environ 8 Mo ! Par conséquent, le projet a finalement été installé sur un ordinateur Raspberry Pi, où il fonctionne parfaitement.
Connaissance et sagesse
Si vous connaissez Edge Impulse, alors croyez-moi, votre travail est à moitié terminé. Pour le reste, il vous suffit de peaufiner votre modèle afin d'obtenir un niveau de performance acceptable. Un modèle d'IA fonctionne comme un enfant. Imaginez comment vous avez appris des choses comme « A est pour une pomme (apple) » et « B comme une balle ». On vous a montré une pomme sous différents angles, puis on vous a appris à la nommer « pomme ». Il en va de même pour la « balle ». À présent, un enfant identifiera assez facilement une pomme et une balle sous tous les angles possibles ! Il en va de même pour l'IA, qui peut les identifier facilement.
Considérons maintenant qu'il y a un panier dans lequel sont mélangées des balles de la taille d'une pomme et des pommes de la taille d'une balle, et qu'elles se ressemblent de là où on les regarde. En tant qu'enfant, que feriez-vous ? Avec votre seule connaissance de la pomme et de la balle, vous vous tromperiez tout simplement ! L'IA passerait à côté également. Mais considérons que la corbeille de fruits est exposée par un vendeur de fruits et légumes. Selon toute probabilité, aucun de ces fruits n'est une balle ! Et certains d'entre eux, voire tous, pourraient être des pommes. Cette « astuce » consistant à associer une pomme à un vendeur de fruits et légumes s'appelle la sagesse, que l'on ne peut attendre ni d'un enfant ni d'une IA, à moins qu'on ne lui enseigne spécifiquement le contraire. Cependant, les êtres humains ont appris, au fil des ans, de nombreuses autres choses associées qui nous ont finalement donné assez de sagesse pour relier une pomme à un vendeur de fruits et légumes.
Pourtant, l'IA progresse si rapidement qu'un jour, elle pourra travailler sur la sagesse. Pour l'instant, vous devez apprendre la pomme et la balle au modèle ML sous tous les angles possibles afin de les exécuter sans aucune confusion (par exemple, le profil de texture d'une pomme, sa tige, ses plis sur son corps, l'aspect du haut et du bas et bien d'autres choses encore). Quoi qu'il en soit, de nombreux modèles aux capacités différentes sont disponibles dans Edge Impulse pour tester et expérimenter.
Démarrer avec Edge Impulse
Tout d'abord, ouvrez un compte dans Edge Impulse, qui nécessite un identifiant par email. Rassemblez quelques boutons du même type. Si vous ouvrez le site à partir d'un ordinateur Raspberry Pi, en utilisant la caméra de l'ordinateur Raspberry Pi (soit connectée en USB, soit connectée au port Cam), vous pouvez collecter des images de boutons sous plusieurs angles (ce qui est nécessaire lorsque le modèle est déployé dans un environnement de travail réel). Edge Impulse permet également de connecter votre téléphone portable ou votre ordinateur portable en tant que périphérique d'entrée pour la collecte de données, ce qui est également plus pratique pour l'acquisition de données dans le cadre du projet Edge Impulse.
Le projet
Le projet Edge Impulse est divisé en plusieurs étapes, qui doivent toutes être suivies sur le site web Edge Impulse.
1. L'acquisition de données : il peut s'agir d'images, de sons, de températures, de distances, etc. Une partie des données est utilisée comme données de test, tandis que toutes les autres données sont utilisées comme données d'apprentissage.
2. Impulse design : l’élément central est nommé Create Impulse. Dans ce contexte, une « impulsion » fait référence à un pipeline ou à un workflow pour la création d'un modèle d'apprentissage automatique. Cette impulsion comprend plusieurs étapes, notamment l'ajustement des paramètres d'entrée associés aux données qui viennent d'être collectées, le traitement du signal, l'extraction des caractéristiques et le modèle d'apprentissage automatique lui-même. Les « caractéristiques » sont les propriétés ou les particularités individuelles mesurables d'un phénomène observé. En principe, les caractéristiques sont les attributs de données utilisés par les modèles pour détecter des modèles et prendre des décisions. Le pipeline d'Impulse est subdivisé comme suit :
- Paramètres d'entrée (Input parameters) : image (largeur, hauteur), son (paramètres du son)
- Bloc de traitement (Processing block) : comment traiter les données d'entrée
- Bloc d'apprentissage (Learning block) : données de l'objet de ce mode d'apprentissage
Vous devez sélectionner et configurer ces trois étapes.
3. Traitement des images (Image processing) : générer des caractéristiques à partir des images collectées.
4. Détection d'objets (Object detection) : sélectionnez votre modèle de réseau neuronal et entraînez-le.
Pour la partie finale – la détection d'objets – votre expertise est nécessaire, ou je dirais plutôt un effort d'expérimentation, afin que la précision du modèle atteigne 85 % ou plus. À un moment donné, vous devez supprimer certaines mauvaises images (dites aberrantes) du modèle afin d'améliorer son efficacité.
Il existe quelques modèles dans lesquels vous pouvez essayer de voir le niveau de précision du modèle. Tout ce qui est supérieur à 90 % est excellent, mais il ne sera certainement pas précis à 100 % ! Si c'est le cas, c'est que quelque chose ne va pas avec vos données. Il se peut qu'il y ait très peu de données ou que les caractéristiques soient insuffisantes. Revérifiez et réessayez dans ce cas ! Pour ce projet, la précision était de 98,6 %. Certes, notre nombre de données (environ 40) était faible. Cependant, pour un projet de débutant, c'est plutôt bien (voir la figure 1). Les fichiers de ce projet sont disponibles sur la page Elektor Labs de ce projet.
Test du modèle
Vous pouvez d'abord tester votre modèle sur les données d'essai. Commencez par là, puis dirigez votre système vers les données réelles et voyez si cela fonctionne !
Dans le tableau de bord de la page d'ouverture de Edge Impulse, la fonction de test est disponible. Vous pouvez directement exécuter le modèle dans le navigateur ou utiliser votre smartphone pour le tester. Pour cela, Edge Impulse propose un code QR à scanner avec votre smartphone figure 2). Dirigez l'appareil photo vers les boutons (figure 3, figure 4 et figure 5) et voyez s'il peut les compter ou non!
Déploiement sur un Raspberry Pi
Pour exécuter le modèle sur un ordinateur Raspberry Pi, vous devez télécharger le fichier *.eim. Mais contrairement à d'autres matériels (Arduino, Nicla Vision, ou ESP32 où vous pouvez télécharger directement), dans le cas du Raspberry Pi, vous devez d'abord installer Edge Impulse sur l'ordinateur Raspberry Pi. À l'intérieur du logiciel edge-impulse-daemon, vous devez télécharger ce fichier. Mais ne vous inquiétez pas, Edge Impulse a consacré une page entière à l'installation de Edge Impulse sur Raspberry Pi. Il y a quelques dépendances à installer en premier. Regardez . C'est assez simple. La marche à suivre est bien détaillée.
Donc après avoir installé Edge Impulse sur l'ordinateur Raspberry Pi, les choses sérieuses commencent. N'oubliez pas de garder le Raspberry Pi connecté à Internet.
Exécuter la commande edge-impulse-linux-runner à partir du terminal du Raspberry Pi. Cela lancera un assistant qui vous demandera de vous connecter et de choisir un projet Edge Impulse. Si vous souhaitez passer d'un projet à l'autre par la suite, exécutez à nouveau cette commande avec l'option --clean. Cette commande compilera et téléchargera automatiquement le modèle d'IA de votre projet et l'exécutera sur votre Raspberry Pi. Montrez les boutons à la caméra connectée à votre Raspberry Pi et elle devrait les compter. C'est bien ! Dans ce qui suit, nous allons modifier le système en utilisant Python et un synthétiseur vocal qui, après avoir compté, énonce le nombre de boutons qu'il a réussi à compter.
Déploiement du modèle en Python
Dans le déploiement ci-dessus, il fonctionnerait comme prévu dans le modèle Edge Impulse. Pour le faire fonctionner dans un but particulier, par exemple pour déclencher une alarme sonore ou allumer une LED lorsque le comptage atteint « 2 ou plus » , vous devez trouver un autre moyen ! C'est ici que Python 3 est là pour vous aider. Le Linux-sdk-python doit être installé sur votre ordinateur Raspberry PI.
Le kit de développement logiciel (SDK) Edge Impulse est disponible pour de nombreux modèles, notamment Python, Node.js, C++, etc. Consultez la page SDK Python.
Une fois que linux-sdk-python est installé, allez dans le répertoire linux-sdk-python/examples/image directory et exécutez le fichier Python pour l'identification de l'image. Ne vous y trompez pas. Le répertoire des exemples contient trois sous-répertoires, un pour les données audio, un pour les données d'image et un pour les données personnalisées. Dans le répertoire image, le fichier de classification vidéo est également disponible pour les données d'entrée vidéo. Le répertoire custom permet de personnaliser d'autres types de données (pour les experts uniquement !).
Ensuite exécutez la commande :
python3 classify-image.py /home/bera/downloads/model.eim
Le fichier modèle *.eim doit être chargé à partir du répertoire correspondant à son emplacement. Si vous préférez, vous pouvez également le copier dans le répertoire du SDK !
C'est ainsi que vous devez charger le fichier Python avec le fichier model.eim téléchargé. Le programme trouvera automatiquement le module caméra (connecté par USB ou par Cam-Port) et commencera à fonctionner ! Dans le coin supérieur gauche, une petite fenêtre de caméra de 120 × 120 pixels s'ouvrira, et les boutons identifiés seront marqués d'un petit marqueur rouge. Les numéros identifiés s'affichent sur le terminal. Veillez à ce qu'il y ait suffisamment de lumière et que la caméra soit correctement mise au point sur les boutons. Ceci est particulièrement important pour les caméras bon marché. C'est pourquoi, si vous exécutez le modèle sur votre smartphone, il produit des images de bien meilleure qualité et compte beaucoup plus rapidement. Assurez-vous tout de même que la lumière et la mise au point sont correctes, et vous obtiendrez de meilleurs résultats.
Dans les captures d'écran suivantes de l'ordinateur Raspberry Pi, en haut à gauche, on peut voir la petite fenêtre de prise de vue de 120 × 120 pixels, dans laquelle les trois boutons sont identifiés et comptés par le modèle. Vous pouvez observer le marqueur rouge visible sur les trois boutons.
Dans la figure 6, quatre boutons sont manquants en raison d'une mise au point défaillante et d'un problème d'éclairage. L'appareil photo n'était pas non plus fixé sur un pied pour ce travail ! C'est pourquoi je recommande de fixer l'appareil sur un pied, comme dans le cas d'une utilisation avec un microscope. Veillez à ne pas regarder en biais depuis le haut de l'appareil.
Dans la figure 7, J'ai enlevé un bouton et le modèle l'a d'abord compté correctement. Il a compté deux boutons, mais au moment où j'ai appuyé sur le bouton pr-screen, il s'est désaligné et n'a pas compté. Veillez également à ce que la caméra dispose d'un câble long (un câble plat, voir mon prototype à la Figure 8) pour les positionnements. Ce câble est disponible sur Amazon. Toutefois, une fois que la caméra est fixée sur un support avec une bonne quantité de lumière, elle fonctionnera de manière infaillible.
Personnalisez votre modèle
Jetez un coup d'œil au fichier classify-image.py file. Il s'agit d'un simple fichier Python qui peut être adapté sans grande difficulté. Dans ce fichier Python, j'ai ajouté un module espeak de sorte qu'au moment où il trouve un ou plusieurs boutons, il énonce le nombre de boutons qu'il trouve. Pour installer espeak, sur votre Raspberry Pi, lancez la commande :
sudo apt-get install espeak
Reportez-vous au listage 1 avec le fichier Python incluant mes modifications.
Espeak est un module autonome de synthèse vocale pour Python. Il ne nécessite pas de connexion Internet pour fonctionner.
Exécution modifiée
Vous avez maintenant modifié le programme Python. Si vous exécutez le fichier Python maintenant, il localisera le bouton (en haut à gauche, une petite fenêtre de caméra de 120 × 120 pixels s'ouvrira), les nombres s'afficheront dans la fenêtre du terminal et le haut-parleur associé énoncera le nombre : « Trouvé cinq boutons / Trouvé deux boutons, » etc. Si vous souhaitez faire fonctionner un relais, allumer une LED, etc., importez la bibliothèque GPIO de Python, puis activez le GPIO associé pour faire fonctionner le relais, etc. Par contre, pour faire fonctionner un relais, vous devez utiliser un transistor de commutation pour augmenter la quantité de courant nécessaire pour enclencher le relais.
Et ensuite
Edge Impulse a démarré en 2019, avec pour objectif de permettre aux développeurs de créer la prochaine génération d'appareils intelligents. Depuis, des programmes et des appareils basés sur l'IA sont apparus sur ESP32, Jetson Nano, Raspberry Pi, Orange Pi, Maixduino, OpenMV, Nicla Vision, et bien d'autres encore. Cette tendance va encore s'accentuer dans les jours à venir ! L'époque des superordinateurs ou des ordinateurs de grande marque est révolue. Les petits appareils modulaires à faible consommation sont en train de conquérir rapidement cet espace. Et qui sait, peut-être aurons-nous bientôt la sagesse intégrée et prête à l'emploi à portée de main !
Note de la rédaction : cet article (230575-04) paraît dans Elektor Mars/Avril 2024.
Questions ou commentaires ?
Si vous avez des questions techniques ou des commentaires sur cet article ou sur le compteur d'objets, n'hésitez pas à contacter l'auteur par courrier électronique à l'auteur berasomnath@gmail.com ou contactez Elekto redaction@elektor.fr.
Discussion (0 commentaire(s))