Baguette magique IA avec TensorFlow Lite pour microcontrôleurs et Arduino

1. Introduction

Objectifs de l'atelier

Dans cet atelier de programmation, nous allons apprendre à utiliser TensorFlow Lite for Microcontrollers pour exécuter un modèle de deep learning sur l'Arduino Nano 33 BLE. L'utilisateur transforme le microcontrôleur en "baguette magique" numérique pour agiter et lancer différents sorts. Lorsque l'utilisateur déplace la baguette, ces données de capteur complexes et multidimensionnelles, qui seraient indéchiffrables pour un humain, sont transmises en entrée au modèle, qui génère une classification simple nous alertant si l'un des mouvements a eu lieu.

9208eb1207211349.gif

Machine learning sur microcontrôleurs

Le machine learning peut être utilisé pour créer des outils intelligents qui facilitent la vie des utilisateurs, comme l'Assistant Google. Cependant, ces expériences nécessitent souvent beaucoup de calculs ou de ressources, qui peuvent inclure un serveur cloud puissant ou un ordinateur de bureau. Il est désormais possible d'exécuter l'inférence de machine learning sur du matériel minuscule et à faible consommation d'énergie, comme les microcontrôleurs.

Les microcontrôleurs sont extrêmement courants, peu coûteux, nécessitent très peu d'énergie et sont très fiables. Ils sont intégrés à toutes sortes d'appareils ménagers : électroménager, voitures et jouets, par exemple. En fait, environ 30 milliards d'appareils alimentés par microcontrôleur sont produits chaque année.

1914a419dfacf0b5.jpeg

Le fait d'exécuter le machine learning sur de très petits microcontrôleurs nous permet d'augmenter l'intelligence de milliards d'appareils utilisés au quotidien, sans être tributaires de matériel Internet onéreux ou de la fiabilité des connexions. Imaginez des appareils électroménagers connectés capables de s'adapter à vos habitudes quotidiennes, des capteurs industriels intelligents capables de faire la différence entre un problème et un fonctionnement normal, ou encore des jouets magiques qui aident les enfants à apprendre tout en s'amusant.

TensorFlow Lite for Microcontrollers (logiciel)

864114d0c2b4c919.png

TensorFlow est le framework de machine learning Open Source de Google pour l'entraînement et l'exécution de modèles. TensorFlow Lite est un framework logiciel, une version optimisée de TensorFlow, conçue pour exécuter des modèles TensorFlow sur des appareils petits et relativement peu puissants, tels que les téléphones mobiles.

TensorFlow Lite for Microcontrollers est un framework logiciel, une version optimisée de TensorFlow, conçue pour exécuter des modèles TensorFlow sur du matériel minuscule et à faible consommation d'énergie, tel que les microcontrôleurs. Il respecte les contraintes requises dans ces environnements intégrés, c'est-à-dire qu'il a une petite taille binaire, ne nécessite aucune compatibilité avec le système d'exploitation, aucune bibliothèque C ou C++ standard, ni d'allocation de mémoire dynamique, etc.

Arduino Nano 33 BLE (matériel)

bcd452d4d660efa9.jpeg

Arduino est une plate-forme Open Source populaire utilisée pour créer des projets électroniques. Elle se compose des éléments suivants :

  1. Une carte de circuit imprimé physique programmable (souvent un microcontrôleur), telle que l'Arduino Nano 33 BLE utilisée dans cet atelier de programmation.
  2. L'IDE Arduino (environnement de développement intégré), un logiciel utilisé pour écrire et importer du code informatique sur la carte physique.

Arduino Nano 33 BLE est une plate-forme basée sur un microcontrôleur : un petit ordinateur sur une seule carte de circuit imprimé. Il dispose d'un processeur, d'une mémoire et d'un matériel d'E/S qui lui permettent d'envoyer et de recevoir des signaux numériques vers d'autres appareils. Contrairement à un ordinateur, un microcontrôleur n'est pas puissant et n'exécute généralement pas de système d'exploitation. Au lieu de cela, il dispose de petits processeurs, de peu de mémoire et les programmes que vous écrivez s'exécutent directement sur le matériel. Toutefois, comme ils sont conçus pour être aussi simples que possible, un microcontrôleur peut consommer très peu d'énergie.

Objectifs de l'atelier

  • Configurer le microcontrôleur Arduino Nano 33 BLE et le transformer en "baguette magique" numérique
  • Configurer l'IDE Arduino et installer les bibliothèques requises
  • Déployer le programme sur l'appareil
  • Lancer différents sorts en agitant la baguette magique et afficher les prédictions

Prérequis

2. Configurer le microcontrôleur Arduino

Déballer votre Arduino

Retirez-le de la boîte et de la mousse de protection. Il est conducteur et peut causer des problèmes dans le cas contraire.

6ed84a651c871a58.jpeg

Branchez-le à votre ordinateur portable

  • Branchez le câble micro USB dans la prise de la puce.
  • Branchez l'autre extrémité du câble dans une prise USB de votre ordinateur portable.
  • La LED en bas à gauche de l'Arduino (en haut à gauche de l'image ci-dessous) doit s'allumer.

c6936696f9659104.jpeg

Familiarisez-vous avec le workflow

99852afbed7e78b0.png

Comme illustré dans le schéma ci-dessus, l'interpréteur TFLite de l'Arduino exécute périodiquement l'inférence sur le modèle. Le modèle utilise les données de l'accéléromètre traitées comme entrée et génère une prédiction qui suggère le geste le plus probable. De plus, une sortie souhaitée est imprimée et les LED appropriées s'allument.

3. Configurer l'IDE Arduino

1. Télécharger l'IDE Arduino

Pour déployer le programme sur le microcontrôleur Arduino, nous utilisons l'IDE Arduino.

Après l'avoir téléchargé, installez et ouvrez l'IDE Arduino en cliquant sur l'application dont l'icône ressemble à ceci : 75717f13527f36b9.png

La page de destination initiale s'ouvre comme suit :

933c91e6e1997c61.png

2. Configurer le gestionnaire de cartes

  1. Dans le menu Arduino, sélectionnez Tools -> Board: "Arduino .." —> Boards Manager.
  2. Recherchez "Arduino Nano 33 BLE" et installez Arduino nRF528x Boards (Mbed OS). Cela garantit que notre microcontrôleur Arduino Nano 33 BLE est compatible avec l'IDE Arduino. 817c63346152eda9.png
  1. Dans le menu Arduino, sélectionnez Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE".

9357691e1a1348eb.png

  1. Enfin, vérifiez que la carte sélectionnée est "Arduino Nano 33 BLE" en bas à droite de l'IDE.

aa08706bb84fa9b2.png

3. Configurer le port

Dans le menu Arduino, sélectionnez Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Le résultat doit ressembler à ceci :

8c25990d0c6fb6f8.png

4. Vérifier la connexion de la carte

Dans le menu Arduino, sélectionnez Tools -> Get Board Info. Le résultat doit ressembler à ceci :

ccd8f5305be6cf59.png

4. Installer des bibliothèques

1. Bibliothèque Arduino TensorFlow

Cette bibliothèque contient tous les exemples de TensorFlow Lite for Microcontrollers, y compris le code source de la baguette magique requis pour cet atelier de programmation.

  1. Dans le menu Arduino, sélectionnez Sketch -> Include Library -> Add .ZIP Library....
  2. Ajoutez la bibliothèque Arduino TensorFlow .zip que vous avez téléchargée.

2. Bibliothèque Arduino LSM9DS1

Cette bibliothèque vous permet de lire les valeurs de l'accéléromètre, du magnétomètre et du gyroscope de l'IMU LSM9DS1 sur votre Arduino Nano 33 BLE Sense.

  1. Dans le menu Arduino, sélectionnez Sketch -> Include -> Manage Libraries....
  2. Recherchez et installez "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. Charger et compiler l'exemple

1. Charger l'exemple

Dans le menu Arduino, sélectionnez File -> Examples -> Arduino_TensorFlowLite -> magic_wand pour charger l'exemple de code.

de349f2d3cb49b98.png

Le code source de la baguette magique est alors chargé.

cda8c35a597b0798.png

2. Compiler l'exemple

Cliquez sur le bouton Upload dans la fenêtre de croquis.

71cb1474d5e14669.png

Après quelques minutes, un texte rouge indiquant que le flashage est terminé doit s'afficher. Pendant l'importation, la LED de droite doit clignoter, puis s'éteindre à la fin.

3df1d0858c6e40a4.png

6. Démo

La baguette magique peut actuellement détecter trois gestes, comme illustré ci-dessous : 99a607da66af9fc8.png

  1. Aile : commencez en haut à gauche et tracez soigneusement la lettre "W" pendant deux secondes.
  2. Anneau : commencez en position verticale et déplacez la baguette dans un cercle dans le sens des aiguilles d'une montre pendant une seconde.
  3. Pente : commencez par tenir la baguette vers le haut, les LED vers vous. Déplacez la baguette vers le bas en l'inclinant vers la gauche, puis horizontalement vers la droite pendant une seconde.

L'image suivante illustre deux gestes. Tout d'abord, une pente, puis une aile (utilisez-la comme référence pour votre démo).

9208eb1207211349.gif

Pour exécuter la démo, suivez les instructions ci-dessous :

  1. Une fois l'USB branché, sélectionnez Tools -> Serial Monitor dans le menu Arduino. Un écran vide s'ouvre initialement sans aucune sortie.

38e8d53652eb28f2.png

  1. Déplacez le microcontrôleur Arduino pour tracer soigneusement chacune des formes ci-dessus et vérifiez si le moniteur série détecte le geste.

60b8a0017bcae419.png

  1. Dans la sortie du moniteur série, nous constatons que la baguette magique a bien détecté toutes les formes. Vous remarquerez également que la LED de droite s'allume.

7. Étapes suivantes

Félicitations, vous venez de créer votre première "baguette magique" de reconnaissance de gestes sur un microcontrôleur Arduino.

Nous espérons que cette brève présentation du développement avec TensorFlow Lite for Microcontrollers vous a plu. L'idée du deep learning sur les microcontrôleurs est nouvelle et passionnante. Nous vous encourageons à vous lancer et à expérimenter.

Documents de référence

647c3ef0dc103804.png

Merci et amusez-vous bien.