- Composants requis
- Schéma
- Création de l'ensemble de données pour la reconnaissance vocale Arduino
- Entraîner le modèle
- Code Arduino pour la reconnaissance vocale Arduino
La technologie de reconnaissance vocale est très utile dans l'automatisation qui vous donne non seulement un contrôle mains libres sur les appareils, mais ajoute également la sécurité du système. En plus de fabriquer des gadgets à commande vocale, la reconnaissance vocale fournit également une aide significative aux personnes souffrant de divers handicaps.
Dans les projets précédents, nous avons construit un convertisseur de texte en parole (TTS) basé sur Arduino et des lumières à commande vocale. Maintenant, dans ce projet, nous allons utiliser l'apprentissage automatique pour former un modèle de reconnaissance vocale à l'aide d'Edge Impulse Studio avec trois commandes à savoir « LIGHT ON» , « LIGHT OFF» et « NOISE ». Edge Impulse est une plate-forme d'apprentissage automatique en ligne qui permet aux développeurs de créer la prochaine génération de solutions d'appareils intelligents avec l'apprentissage automatique intégré. Nous avons utilisé auparavant Edge impulse studio pour différencier les sons de toux et de bruit.
Composants requis
Matériel
- Arduino 33 BLE Sense
- LED
- Fils de cavalier
Logiciel
- Edge Impulse Studio
- IDE Arduino
Nous avons couvert un tutoriel détaillé sur Arduino 33 BLE Sense.
Schéma
Le schéma de circuit pour cette reconnaissance vocale utilisant Arduino est donné ci-dessous. La partie Fritzing pour Arduino 33 BLE n'était pas disponible, j'ai donc utilisé Arduino Nano car les deux ont le même brochage.
Le fil positif de la LED est connecté à la broche numérique 5 du sens Arduino 33 BLE et le fil négatif est connecté à la broche GND d'Arduino.
Création de l'ensemble de données pour la reconnaissance vocale Arduino
Ici, Edge Impulse Studio est utilisé pour former notre modèle de reconnaissance vocale. La formation d'un modèle sur Edge Impulse Studio est similaire à la formation de modèles de machine learning sur d'autres frameworks de machine learning. Pour la formation, la première étape d'un modèle d'apprentissage automatique consiste à collecter un ensemble de données contenant les échantillons de données que nous aimerions pouvoir reconnaître.
Comme notre objectif est de contrôler une LED avec notre commande vocale, nous devrons collecter des échantillons vocaux pour toutes les commandes et le bruit afin qu'il puisse distinguer les commandes vocales des autres bruits.
Nous allons créer un jeu de données avec trois classes « LED ON », « LED OFF » et « noise ». Pour créer un ensemble de données, créez un compte Edge Impulse, vérifiez votre compte, puis démarrez un nouveau projet. Vous pouvez charger les échantillons en utilisant votre mobile, votre carte Arduino ou vous pouvez importer un ensemble de données dans votre compte Edge Impulse. Le moyen le plus simple de charger les échantillons dans votre compte consiste à utiliser votre téléphone mobile. Pour cela, connectez le mobile avec Edge Impulse.
Pour connecter un téléphone mobile, cliquez sur « Appareils », puis sur « Connecter un nouvel appareil» .
Maintenant, dans la fenêtre suivante, cliquez sur «Utiliser votre téléphone portable» et un code QR apparaîtra. Scannez le code QR avec votre téléphone mobile ou entrez l'URL indiquée sur le code QR.
Cela connectera votre téléphone au studio Edge Impulse.
Une fois votre téléphone connecté à Edge Impulse Studio, vous pouvez désormais charger vos échantillons. Pour charger les échantillons, cliquez sur « Acquisition de données» . Maintenant, sur la page Acquisition de données, entrez le nom de l'étiquette, sélectionnez le microphone comme capteur et entrez la longueur de l'échantillon. Cliquez sur « Démarrer l'échantillonnage» , votre appareil capturera un échantillon de 2 secondes. Enregistrez un total de 10 à 12 échantillons de voix dans différentes conditions.
Après avoir téléchargé les échantillons pour la première classe, définissez maintenant le changement d'étiquette et collectez les échantillons pour les classes « light off» et «noise» .
Ces exemples sont destinés à la formation du module, dans les étapes suivantes, nous collecterons les données de test. Les données de test doivent représenter au moins 30% des données de formation, collectez donc les 4 échantillons de «bruit» et 4 à 5 échantillons pour «allumé» et «éteint».
Entraîner le modèle
Comme notre ensemble de données est prêt, nous pouvons maintenant créer une impulsion pour les données. Pour cela, rendez-vous sur la page « Créer une impulsion ». Modifiez les paramètres par défaut d'une taille de fenêtre de 1000 ms à 1200 ms et une augmentation de fenêtre de 500 ms à 50 ms. Cela signifie que nos données seront traitées 1,2 s à la fois, à partir de chaque 58 ms.
Maintenant, sur la page « Créer une impulsion», cliquez sur « Ajouter un bloc de traitement» . Dans la fenêtre suivante, sélectionnez le bloc Audio (MFCC). Après cela, cliquez sur « Ajouter un bloc d'apprentissage» et sélectionnez le bloc Réseau neuronal (Keras). Cliquez ensuite sur « Save Impulse» .
À l'étape suivante, accédez à la page MFCC, puis cliquez sur «Générer des fonctionnalités». Il générera des blocs MFCC pour toutes nos fenêtres audio.
Ensuite, allez à la page « NN Classifier» et cliquez sur les trois points dans le coin supérieur droit des « Paramètres du réseau neuronal» et sélectionnez « Passer en mode Keras (expert)» .
Remplacez l'original par le code suivant et remplacez la « cote de confiance minimale» par « 0,70» . Cliquez ensuite sur le bouton « Démarrer la formation» . Il commencera à entraîner votre modèle.
import tensorflow as tf depuis tensorflow.keras.models import Sequential depuis tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D depuis tensorflow.keras.optimizers Adam de tensorflow.keras.constraints import import MaxNorm # model architecture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (classes, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # ceci contrôle le taux d'apprentissage opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # former le réseau neuronal model.compile (loss = 'categorical_crossentropy', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbeux = 2)verbeux = 2)verbeux = 2)
Après avoir entraîné le modèle, il montrera les performances d'entraînement. Pour moi, la précision était de 81,1% et la perte de 0,45, ce qui n'est pas une performance idéale mais nous pouvons continuer avec. Vous pouvez augmenter les performances de votre modèle en créant un vaste ensemble de données.
Maintenant que notre modèle de reconnaissance vocale est prêt, nous allons déployer ce modèle en tant que bibliothèque Arduino. Avant de télécharger le modèle en tant que bibliothèque, vous pouvez tester les performances en accédant à la page «Classification en direct» . La fonction de classification en direct vous permet de tester le modèle à la fois avec les données de test existantes fournies avec l'ensemble de données ou en diffusant des données audio depuis votre téléphone mobile.
Pour tester les données avec votre téléphone, choisissez « Passer en mode de classification» sur votre téléphone.
Maintenant, pour télécharger le modèle en tant que bibliothèque Arduino, accédez à la page « Déploiement » et sélectionnez « Bibliothèque Arduino» . Faites maintenant défiler vers le bas et cliquez sur « Construire » pour démarrer le processus. Cela créera une bibliothèque Arduino pour votre projet.
Ajoutez maintenant la bibliothèque dans votre IDE Arduino. Pour cela, ouvrez l'IDE Arduino, puis cliquez sur Sketch> Inclure la bibliothèque> Add.ZIP library
Ensuite, chargez un exemple en allant dans Fichier> Exemples> Nom de votre projet - Edge Impulse> nano_ble33_sense_microphone
Code Arduino pour la reconnaissance vocale Arduino
Ici, quelques modifications ont été apportées pour contrôler la LED avec les commandes vocales.
Nous apportons des modifications à la boucle void () où il affiche la probabilité de commandes. Dans le code d'origine, il imprime toutes les étiquettes et leurs valeurs ensemble.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Pour contrôler la LED, nous devons enregistrer toutes les probabilités de commande dans trois variables différentes afin de pouvoir y mettre des instructions conditionnelles. Ainsi, selon le nouveau code, si la probabilité de la commande ` ` allumer la lumière '' est supérieure à 0,50, il allumera la LED et si la probabilité de la commande `` éteindre '' est supérieure à 0,50, elle éteindra la LED.
for (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Bruit:"); Serial.println (bruit); } pour (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Light Off:"); Serial.print (lightoff); } lighton = 1- (bruit + éclairage); Serial.println ("Light ON:"); Serial.print (lighton); if (lighton> 0.50) {digitalWrite (led, HIGH); } if (lightoff> 0.50) {digitalWrite (led, LOW); }
Après avoir effectué les modifications, téléchargez le code dans votre Arduino. Ouvrez le moniteur série à 115200 bauds.
C'est ainsi que vous pouvez créer une reconnaissance vocale à l'aide d'Arduino et donner des commandes pour faire fonctionner les appareils.
Une vidéo de travail complète avec une bibliothèque et un code est donnée ci-dessous.