Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Détecteur de langage TinyML basé sur Edge Impulse et Arduino

Composants et fournitures

Arduino Nano 33 BLE Sense
× 1
Périphériques de contrôle nationaux PCA9685 8-Channel 8W 12V FET Driver Valve proportionnelle Contrôleur avec interface I2C
× 1
Micro-servomoteur SG90
× 3
Clip de batterie 9V
× 1

Outils et machines nécessaires

Imprimante 3D (générique)
Fer à souder (générique)

Applications et services en ligne

Edge Impulse Studio
Arduino IDE
Autodesk Fusion 360

À propos de ce projet

Présentation

L'idée derrière ce projet est de créer un classificatoire de langage, en utilisant un réseau de neurones/apprentissage en profondeur implémenté dans un microcontrôleur. L'appareil identifiera un mot pour les langues italien, anglais et français. Les mots à reconnaître sont "si " pour l'italien, " oui " pour les Français, et "oui " pour l'anglais. L'appareil est à l'écoute en continu et une fois qu'un des 3 mots est reconnu il surgit le drapeau de la langue associée.

Le projet est basé sur les deux composants principaux, le microcontrôleur Arduino Nano 33 BLE Sense et la plate-forme de développement Edge Impulse Studio.

La mise en œuvre du projet suivait ces étapes :

  • Échantillonnage/création de l'ensemble de données
  • Concevoir le modèle
  • Formation du modèle
  • Test du modèle
  • Personnaliser pour le matériel
  • Déploiement du modèle et sa personnalisation
  • Construisez l'appareil final (le matériel autour du modèle).

Échantillonnage/Création de l'ensemble de données

Le jeu de données est composé de l'enregistrement des 3 mots (oui, si, yes) d'une durée globale d'environ 30 minutes (10 minutes pour chaque mot).

Pour chaque mot a été créé un fichier sonore continu, où le même mot se répétait en continu, puis à l'aide de l'application Audacity, le fichier a été divisé en plusieurs fichiers chacun d'une durée d'une seconde. Chaque fichier contient un exemple du mot.

Ces fichiers ont ensuite été téléchargés sur edge impulse et étiquetés en fonction du mot.

En plus de ces fichiers, un autre ensemble de fichiers d'enregistrement d'une durée d'une seconde a été téléchargé et étiqueté comme bruit de fond.

Globalement, les données d'entraînement étaient composées de 33 minutes (10 minutes pour chaque mot et les 3 minutes pour le bruit de fond)

Concevoir le modèle

Le modèle a été mis en œuvre en tirant parti de la plate-forme d'impulsion de bord, où la plupart des algorithmes nécessaires étaient déjà définis et dimplemenés.

La première étape pour créer le modèle est de transformer le son en une série temporelle. Ensuite, la série temporelle est partitionnée avec une taille de fenêtre temporelle prédéfinie.

(Cette première transformation est indiquée sur le côté rouge de l'image ci-dessous).

La deuxième étape consiste à utiliser la technique de traitement du signal, dans ce cas le MFCC (Mel Frequency Cepstral Coefficients), pour extraire les caractéristiques de la série temporelle qui caractérise le mieux chacune des 4 classes (3 mots + le fond).

Ci-dessous un exemple de la transformation MFCC et ses coefficients.

La convolution des séries temporelles et des coefficients est utilisée pour alimenter un réseau de neurones. Enfin, la sortie des réseaux de neurones fournit une probabilité d'appartenance pour chaque classe.

Ci-dessous un aperçu de la mise en œuvre du réseau de neurones et de ses performances de classification.

Formation - Personnaliser pour l'Arduino Nano 33 BLE Sense

Pour la formation et pour la personnalisation finale du modèle, une nouvelle option est disponible sur Edge Impulse Studio appelée "EON Tuner ". Il permet de choisir l'architecture optimale pour une application de machine learning embarquée.

Il exécute de nombreuses instances de modèles possibles en parallèle, chaque instance avec une configuration différente (technique de signal numérique différente et architectures de réseaux de neurones différentes).

Cette option ne nécessite que quelques informations pour s'exécuter :

  • La "Cible " qui représente le type de modèle (dans ce cas "Keyword Spotting ")
  • Le matériel sur lequel l'application s'exécute (dans ce cas "Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

Pour chaque instance, il donne les quelques métriques de performances de classification, le temps nécessaire au calcul, la quantité de RAM et l'espace du système de fichiers utilisé sur le système de fichiers du microcontrôleur.

Pour ce projet, nous avons sélectionné les 5 meilleures instances pour la précision de la classification et parmi elles, nous avons choisi la plus rapide.

Tests

Le test a été effectué en collectant un nouvel ensemble de fichiers d'enregistreurs et en vérifiant la qualité de la classification.

Une fois qu'il a été vérifié que la classification était exacte. Nous sommes passés à l'étape suivante de la mise en œuvre, le déploiement final.

Déploiement

Le déploiement grâce au studio edge-impulse a été assez simple.

Il a été sélectionné l'option de la bibliothèque Arduino parmi les options de déploiement. Cela donne un fichier arduino C standard du modèle, qui peut être personnalisé selon nos besoins.

Une fois la construction terminée par le edge-impulse, un fichier zip est créé et téléchargé sur la machine locale, et il suffit de l'importer dans l'Arduino Ide pour la personnalisation finale.

Code

Le code est disponible sur le lien. Le code est basé sur le code téléchargé depuis le edge-impulse avec quelques personnalisations, répertoriées ci-dessous.

1. Il s'agissait d'ajouter la bibliothèque Adafruit_PWMServoDriver.h pour entraîner les servos attachés aux drapeaux.

2. Il a été défini la fonction servos_selector pour coordonner les servos en fonction des résultats du classement.

void servos_selector(int iter){
time_now =millis();
delta=time_now - time_was;
if (delta> 2000){
time_was=time_now;
commutateur (iter) {
cas 0 :
pwm.setPWM(0, 0, 350);
delay(500);
pwm.setPWM( 0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
cas 1 :
pwm.setPWM(1, 0, 350);
Serial.println("2222");
delay(500);
pwm.setPWM(0, 0, 200) );
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
cas 2 :
pwm .setPWM(2, 0, 350);
Serial.println("333");
delay(500);
pwm.setPWM(0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break ;
}
}
}

3. Enfin, il a été ajouté une condition IF qui invoque le servos_select fonction basée sur la "result.classification " objet.

for (size_t ix =0 ; ix ei_printf(" %s :%.5f\n", result.classification[ix].label,
result.classification[ix].value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf(" score d'anomalie :%.3f\n", result.anomaly);
#endif
print_results =0;
}
if (result.classification[1].value> 0.80){
servos_selector(0);
}
else if (result.classification[2].value> 0.80){
servos_selector(1);
}
else if (result.classification[3].value> 0.80){
servos_selector(2) ;
}
}

Circuits électriques

Le circuit électrique est basé sur le microcontrôleur Arduino Nano 33 BLE Sense et utilise un PCA9685 pour piloter les 3 servos.

La charge de travail PCA9685 est prise en charge par une batterie externe de 9v.

C'est tout.

Code

code
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

Pièces et boîtiers personnalisés

Schémas

détection de la langue_9RxXhRX5sj.fzz

Processus de fabrication

  1. Jeu de gyroscope Arduino avec MPU-6050
  2. Dés numériques Arduino
  3. Iron Man
  4. Trouvez-moi
  5. Contrôle de l'humidificateur Arduino
  6. Sonar utilisant arduino et affichage lors du traitement de l'IDE
  7. MobBob :Robot Arduino DIY contrôlé par smartphone Android
  8. Lampe de bureau réactive audio Arduino
  9. NeoMatrix Arduino Pong