Table des matières:
- Fournitures
- Étape 1: Collecte d'échantillons sonores de cuisine
- Étape 2: Préparation de l'affichage Arduino/Matrix
- Étape 3: Exécuter le classificateur et identifier les sons
- Étape 4: Création d'un boîtier LEGO
Vidéo: Identificateur de son de cuisine personnalisé : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Pour notre projet final de cours sur les systèmes interactifs ce printemps, nous avons créé un système en temps réel pour identifier et visualiser les sons courants dans la cuisine à l'aide de la classification Support-Vector Machine. Le système est composé d'un ordinateur portable pour l'échantillonnage/classification audio et d'un écran Arduino/matrice de points pour la visualisation. Ce qui suit est un guide pour créer votre propre version de ce système pour les sons de votre propre cuisine.
Notre cas d'utilisation d'origine était un appareil pour la cuisine d'un individu sourd et malentendant, mais ce système pourrait théoriquement être adapté pour identifier un ensemble de sons dans une variété de contextes. La cuisine était un endroit idéal pour commencer, car elle a tendance à être relativement silencieuse et contient une quantité raisonnable de sons simples et distincts.
Un référentiel GitHub pour ce projet peut être trouvé ici.
Fournitures
- Microcontrôleur Arduino Leonardo avec en-têtes
- Écran LED matriciel KEYESTUDIO 16x16 pour Arduino
- Câble de cavalier de planche à pain
- Câble micro-USB vers USB 2.0
-
Un ordinateur portable avec Jupyter Notebook (installation Anaconda)
Un guide du débutant sur Jupyter Notebook est disponible ici
-
Une quantité substantielle de briques LEGO dépareillées pour le boîtier du système
(Mais vous pouvez vraiment les remplacer par n'importe quel matériau de construction de bricolage que vous souhaitez !)
Étape 1: Collecte d'échantillons sonores de cuisine
Figure ci-dessus: données audio provenant de l'enregistrement d'une fourchette et d'un couteau s'entrechoquant à l'aide de ce processus de collecte
Afin d'identifier les sons en temps réel, nous devons fournir à notre modèle d'apprentissage automatique des exemples de qualité à des fins de comparaison. Nous avons créé un bloc-notes Jupyter pour ce processus, accessible ici ou via le référentiel GitHub de notre projet. Le référentiel contient également des échantillons de collections de deux cuisines différentes à des fins de test.
Étape 1.1: Copiez le bloc-notes CollectSamples.ipynb dans votre répertoire de travail Jupyter Notebook et ouvrez-le.
Étape 1.2: Exécutez chaque cellule une par une, en faisant attention aux notes que nous avons fournies dans les en-têtes. Arrêtez-vous lorsque vous en atteignez un intitulé "Sample Recording".
REMARQUE: plusieurs bibliothèques Python sont utilisées dans ce bloc-notes et chacune nécessite une installation avant de pouvoir être importée avec succès dans le projet. Vous pouvez le faire manuellement, bien qu'un guide d'installation de la bibliothèque dans Jupyter Notebook soit disponible ici.
Étape 1.3: Créez un répertoire vide pour stocker vos échantillons dans votre répertoire de travail pour ce projet.
Étape 1.4: Modifiez la variable SAMPLES_LOCATION dans la cellule « Sample Recording » pour qu'elle corresponde à l'emplacement de votre répertoire vide.
Étape 1.5: Ajoutez ou supprimez autant de sons que vous le souhaitez dans la variable SOUND_LABELS.
Pour que l'exemple de code d'enregistrement fonctionne, chaque ligne de cette variable doit être séparée par une virgule et de la forme suivante:
'ts':Sound("TargetedSound", "ts")
Étape 1.6: Lorsque toutes les étiquettes ont été ajoutées, l'évaluation de la cellule « Sample Recording » démarre le processus de collecte d'échantillons. Dans la sortie de la cellule, vous serez invité à saisir le code de fonction que vous avez associé à chaque son dans les étiquettes (c'est-à-dire "ts" pour TargetedSound). Ne le faites pas tout de suite.
Étape 1.7: Apportez votre ordinateur portable dans la cuisine et placez-le dans la zone où vous seriez le plus susceptible de placer le système fini. Cet emplacement doit être central pour une bonne collecte audio, sec et éloigné de tout déversement possible pour protéger vos appareils électroniques.
Étape 1.8: Préparez votre premier son ciblé. S'il s'agit d'un bip de la minuterie du four, vous pouvez régler la minuterie sur une minute et attendre qu'elle décompte jusqu'à 20 secondes environ avant de passer à l'étape suivante.
Étape 1.9: Tapez le code de l'étiquette dans l'invite (c'est-à-dire "ts") et appuyez sur Entrée/Retour.
Le système commencera à écouter un événement sonore distinct du bruit ambiant de la pièce. Lors de la détection de cet événement sonore, il commencera à enregistrer jusqu'à ce qu'il détecte que le son dans la pièce soit revenu aux niveaux ambiants. Il enregistrera ensuite l'audio sous forme de fichier WAV 16 bits dans le répertoire identifié dans SAMPLES_LOCATION au format:
TargetedSound_#_captured.wav
La partie # de ce nom de fichier correspond au nombre d'échantillons du son ciblé que vous avez collecté. Une fois le fichier WAV enregistré, l'invite se répétera, vous permettant de collecter plusieurs échantillons du même son en une seule exécution de la cellule.
NE PAS changer ce nom de fichier. C'est important pour la prochaine étape.
Étape 1.10: Répétez les étapes 1.8 et 1.9 jusqu'à ce que vous ayez collecté 5 à 10 échantillons de chaque son.
Étape 1.11: Entrez « x » lorsque vous avez terminé pour quitter l'exécution.
AVERTISSEMENT: si vous ne quittez pas la cellule de cette manière, l'ordinateur portable peut tomber en panne. Dans ce cas, le noyau Notebook doit être réinitialisé et chaque cellule s'exécute à nouveau par le haut.
Étape 1.11 (facultatif): vérifiez les données WAV des fichiers individuels dans la cellule « Visualisation rapide du son » pour vous assurer que vous avez capturé toutes les informations souhaitées.
Quelques conseils:
- Enregistrez lorsque votre cuisine est calme.
- Enregistrez un seul son à la fois. Le système ne peut pas distinguer le chevauchement des sons.
- Essayez de rendre chaque essai sonore aussi cohérent que possible. Cela contribuera à l'exactitude de l'identification.
- La réévaluation de la cellule d'enregistrement réinitialisera la valeur # dans le nom de fichier et écrasera tous les fichiers existants qui correspondent à ce #. Nous avons trouvé plus simple d'enregistrer tous les échantillons d'un son à la fois, puis d'arrêter la cellule d'enregistrement.
- Si le système ne capte pas le son ciblé, essayez de baisser la valeur SEUIL (définie sur 30 pour commencer) et réévaluez la cellule.
- Si l'enregistrement est déclenché par d'autres sons en dehors de celui ciblé, essayez d'augmenter la valeur SEUIL (définie sur 30 pour commencer) et réévaluez la cellule.
Étape 2: Préparation de l'affichage Arduino/Matrix
Ensuite, nous allons configurer le système de visualisation à l'aide d'un écran à matrice de points LED Arduino Leonardo et KEYESTUDIO 16x16. Il s'agit de produire la prédiction du modèle de classification des sons détectés. Comme auparavant, nous avons fourni tous les fichiers requis ici et dans le référentiel GitHub du projet.
Étape 2.1: Câblez l'Arduino et la matrice LED selon le schéma ci-dessus. KEYESTUDIO comprend des fils pour se connecter à leur matrice de points, mais des fils de cavalier de planche à pain seront nécessaires pour connecter ces fils à l'Arduino
Étape 2.2: Ouvrez "arduino_listener.ino" à l'aide de l'IDE Ardunio et téléchargez-le sur Leonardo. Si le câblage est correct, vous devriez voir l'icône « écoute » (ressemble au Wi-Fi) comme indiqué dans l'image ci-dessus.
Étape 2.3: Préparez les icônes que vous souhaitez afficher pour chacun de vos sons cibles. Pour savoir quelles LED s'allumer, l'icône doit être envoyée de l'Arduino à la matrice sous forme de tableau d'octets. Par exemple, notre icône de tasse à café (dans l'image ci-dessus) est envoyée à la matrice dans ce format:
{
0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xb, 7, 0xf, 0xf7, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};
Nous avons dessiné nos icônes à l'aide de l'outil en ligne Dot2Pic, avec 16 colonnes, 16 lignes et "monochromatique, 8 pixels par octet, réglage vertical" sélectionné dans le menu déroulant. Le nôtre se trouve dans le tableau "sample_icon_bytes.txt".
REMARQUE: Il peut également exister des outils en ligne qui peuvent le faire automatiquement avec les fichiers téléchargés.
Étape 2.4: Dessinez chaque icône. Une fois le dessin terminé, sélectionnez "Convertir en tableau".
Étape 2.5: remplacez les icônes inutiles définies en haut du code "arduino_listening.ino" comme vous le souhaitez. N'oubliez pas d'ajouter un commentaire décrivant l'icône afin de vous rappeler laquelle est laquelle !
Étape 2.6: Téléchargez le nouveau code sur l'Arduino. Ne fermez pas le fichier tout de suite, nous en aurons besoin pour la prochaine étape.
Étape 3: Exécuter le classificateur et identifier les sons
Il est maintenant temps de mettre le système en place. Le pipeline de classification, la communication Arduino et la capture audio en direct sont tous effectués via un seul bloc-notes Arduino, qui a été fourni ici ou accessible via le référentiel GitHub de notre projet.
Étape 3.1: Copiez le bloc-notes FullPipeline.ipynb dans votre répertoire de travail Jupyter Notebook et ouvrez-le.
Étape 3.2: Exécutez chaque cellule une par une, en faisant attention aux notes que nous avons fournies dans les en-têtes. Aucune sortie n'est attendue. Arrêtez-vous lorsque vous atteignez la cellule intitulée "Charger les données d'entraînement".
Étape 3.3: Modifiez la variable SAMPLES_LOCATION_ROOT dans la cellule « Charger les données d'entraînement » dans le répertoire parent de l'emplacement de votre répertoire d'échantillons précédent. Ensuite, remplacez la variable SAMPLES_DIR_NAME par le nom de votre répertoire. Donc, si vous aviez défini l'emplacement dans CollectSamples.ipynb sur:
SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"
Vous devez maintenant définir ces variables sur:
SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/"SAMPLES_DIR_NAME = "NewDir"
Nous avons fait cela pour permettre des changements rapides au classificateur en cas d'imprécision. Vous pouvez basculer entre différentes collections d'échantillons pour ajuster vos données.
Étape 3.4: Évaluez la cellule. Vous devriez voir chaque collection chargée avec succès.
Étape 3.5: Continuez à exécuter chaque cellule une par une, en faisant attention aux notes que nous avons fournies dans les en-têtes.
Étape 3.6: Arrêtez-vous lorsque vous atteignez la cellule "Messagerie Arduino". Définissez le port série que votre ordinateur utilisera pour communiquer avec l'Arduino dans la variable PORT_DEF. Cela peut être trouvé dans l'IDE Arduino et en allant dans Outils> Port.
Plus d'informations peuvent être trouvées ici.
Étape 3.8: rouvrez votre IDE Arduino. Aux endroits où vous avez apporté des modifications aux icônes, notez la lettre à côté de la valeur du tableau, mais NE la modifiez PAS. Dans l'exemple ci-dessous, il s'agit de "g".
// élimination des déchetsconst unsigned char g[1][32] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff, };
Étape 3.7: (Retour à la cellule « Messagerie Arduino » du bloc-notes) Modifiez les étiquettes dans le dictionnaire self.sounds pour qu'elles correspondent aux étiquettes que vous avez utilisées pour enregistrer vos échantillons, en vous assurant que chaque étiquette correspond à la seule lettre que vous avez notée dans le précédent étape. « Enregistrement » et « Écoute » font tous deux partie des fonctionnalités principales du système et ne doivent pas être modifiés. NE PAS modifier la deuxième lettre à moins que vous ne soyez sûr d'apporter quelques modifications supplémentaires au code Arduino, car cela perturberait la communication avec l'Arduino/la matrice autrement.
Étape 3.8: Exécutez la fonction principale ! Le code récupérera les données d'entraînement, extraira ses fonctionnalités clés, les alimentera dans le pipeline, créera un modèle de classification, puis commencera à écouter les événements sonores. Lorsqu'il en détecte un, vous verrez la matrice se transformer en un symbole d'enregistrement (carré avec un cercle à l'intérieur) et il segmentera ces données et les alimentera dans le modèle. Tout ce que le modèle prédit apparaîtra quelques secondes plus tard sur l'affichage matriciel.
Vous pouvez suivre dans la sortie de la cellule ci-dessous. Voyez à quel point vous pouvez l'obtenir avec précision !
Étape 4: Création d'un boîtier LEGO
C'est la partie amusante! Vous avez suivi toutes les étapes sérieuses de l'apprentissage automatique et mis en place tout le système de bout en bout, et maintenant vous pouvez jouer avec des LEGO en guise de récompense. Il n'y a pas beaucoup de processus à détailler ici. Nous avons juste ajouté des blocs que nous aimions ici et là sans trop nous soucier de la conception globale, et nous avons fini par être satisfaits du résultat.
Laissez nos images servir d'inspiration pour votre propre logement créatif unique à votre cuisine. Nous avons placé l'Arduino et la majorité du câblage dans un boîtier creux, puis avons sécurisé l'affichage matriciel ci-dessus avec des surplombs. Nous avons ajouté un peu de papier sur l'écran pour diffuser légèrement la lumière, ce qui, selon nous, rendait les icônes plus claires.
Conseillé:
Minuterie de cuisine : 4 étapes
Minuteur de cuisine : il comprend le gen4-uLCD-35DT qui sera utilisé comme affichage secondaire pour un projet Raspberry Pi, le minuteur de cuisine. C'est une application utile pour la plupart des mères et des passionnées de cuisine. Cela peut être utilisé pour surveiller le temps lors de la cuisson
GRUE AGITATEUR DE CUISINE : 4 étapes
GRUE DE CUISINE: Bonjour à tous, je suis un fin gourmet et j'adore les soupes chaudes, les sauces, la crème anglaise et plus encore, mais pour cela, ma femme ou moi passons beaucoup de temps à remuer ou à fouetter pendant des heures. Je voulais le prendre comme un défi, faire un design rentable, qui soit à l'échelle
Remplacement des LED de votre hotte de cuisine faible : 4 étapes
Remplacement des LED de votre hotte de cuisine faible : Lorsque nous avons rénové notre maison, la cuisine a été conçue comme notre pièce maîtresse. Nous aimons avoir de la compagnie et notre cuisine finissait toujours par être l'endroit où tout le monde traînait. Je suis sûr que beaucoup de gens peuvent s'identifier. Etant donné que je suis le cuisinier de la famille
Balance de cuisine Arduino : 6 étapes (avec photos)
Balance de cuisine Arduino : dans ce projet, je vais vous montrer comment construire une balance de cuisine simple avec un boîtier imprimé en 3D personnalisé
Graver un circuit imprimé avec des fournitures de cuisine : 6 étapes (avec photos)
Gravez un circuit imprimé avec des fournitures de cuisine : Au fur et à mesure que vous bricolez avec des projets électroniques, vous vous rendrez rapidement compte que plus ils sont complexes, plus ils sont difficiles à souder ensemble. Cela signifie généralement créer un nid de rats de fils individuels, ce qui peut être encombrant et difficile à dépanner