TinyML-zoekwoorddetectie voor het regelen van RGB-verlichting
Componenten en benodigdheden
| × | 1 |
Apps en online services
|
Over dit project
Het pand
Machine learning aan de rand is uiterst nuttig voor het maken van apparaten die "intelligente" taken kunnen uitvoeren met veel minder programmering en logische stroomdiagrammen in vergelijking met traditionele code. Daarom wilde ik een uiterst geavanceerde zoekwoorddetectie gebruiken die bepaalde woorden kan herkennen en vervolgens een taak kan uitvoeren op basis van wat er is gezegd.
Hardware
Dit project heeft slechts één onderdeel:een Arduino Nano 33 BLE Sense. De echte magie vindt plaats in het machine learning-model. De Arduino Nano 33 BLE Sense zit vol met sensoren, waaronder een microfoon, 9-assige IMU, omgevingssensor en een gebaar/nabijheid/kleur/omgevingslichtsensor (APDS-9960). De microcontroller erop is een nRF52840 die draait op 64 MHz en 1 MB flash-geheugen en 256 KB RAM bevat. Dit project gebruikt ook de ingebouwde RGB-LED om de huidige kleur weer te geven.
Edge Impuls instellen
Ik begon met het maken van een nieuw project op Edge Impulse en installeerde vervolgens de Edge Impulse CLI-tool. Ga naar de pagina met installatie-instructies voor meer instructies over hoe u dat moet doen. Hierdoor kan de Arduino Nano communiceren met de cloudservice om automatisch opdrachten te ontvangen en sensorgegevens te verzenden. Ik heb de meest recente Edge Impulse-firmware gedownload en naar het bord geflitst door op de resetknop te dubbelklikken om het naar de bootloader-modus te laten gaan. Daarna heb ik flash_windows.bat
uitgevoerd om het over te dragen.
Op de opdrachtprompt heb ik edge-impulse-daemon
uitgevoerd en volgde de wizard om het in te stellen. Nu verschijnt de Nano in de apparaatlijst van het project, waarmee monsters kunnen worden genomen en geüpload als onderdeel van de trainings-/testdataset.
Monsters verzamelen
Het trainen van een machine learning-model vereist gegevens, en nogal wat. Ik wilde de volgende modi hebben voor de RGB LED-strip:
- Aan
- Uit
- Rood
- Groen
- Blauw
Ik kreeg ongeveer 1 minuut geluid voor elke modus waarbij ik het woord herhaaldelijk met tussenpozen van 1-2 seconden zei en ze splitste.
Maar alleen het hebben van deze samples is niet genoeg, aangezien achtergrondgeluid en andere woorden een verkeerde aflezing geven. Gelukkig biedt Edge Impulse al een vooraf gebouwde dataset voor ruis en 'onbekende' woorden, dus heb ik hun tool "Bestaande gegevens uploaden" gebruikt om deze audiobestanden naar de trainingsgegevens te uploaden.
Ten slotte heb ik de dataset opnieuw in evenwicht gebracht om de aanbevolen 80-20-verdeling te krijgen voor respectievelijk trainings- en testgegevens.
Het model trainen
Nu gewapend met een uur aan trainingsgegevens en veel labels, was het tijd om een model te trainen. De impuls die ik heb ontworpen, neemt audio op als tijdreeksgegevens met een venstergrootte van 1 seconde en een venstertoename van 500 ms. Vervolgens gaat het door een MFCC-blok naar een Keras neuraal netwerkblok.
Met het MFCC-blok kunt u configureren hoe de audio wordt verwerkt, samen met een spectogram dat de frequenties op een visuele manier weergeeft.
Ik heb de instellingen van het neurale netwerk grotendeels als standaard gelaten, maar heb ook een paar wijzigingen aangebracht. Ten eerste heb ik de minimale betrouwbaarheidsdrempel gewijzigd van 0,80 in 0,70, en een beetje gegevensvergroting toegevoegd in de vorm van extra ruis en maskeertijdbanden. Dit helpt de NN om te voorkomen dat het model te veel wordt aangepast, omdat het meer diverse gegevens heeft om mee te werken.
Implementeren op de Arduino Nano 33 BLE Sense
De Arduino Nano 33 BLE Sense fungeert als een always-on microfoon die continu de audio samplet en detecteert of een van de trefwoorden is uitgesproken. Zodra er een is gevonden, wordt het trefwoord omgezet in een index die wordt gebruikt om de gewenste kleur te decoderen. Voor het trefwoord aan of uit is de LED ingesteld op zwart of lichtgrijs.
Ik heb het model gedownload als een bibliotheek en toegevoegd aan de Arduino IDE, vervolgens gecompileerd en de code naar de Nano geflitst.
Code
- RGBLEDKeywordDetection
RGBLEDKeywordDetectionC/C++
/* Edge Impulse Arduino-voorbeelden * Copyright (c) 2020 EdgeImpulse Inc. * * Hierbij wordt gratis toestemming verleend aan eenieder die een kopie* van deze software en bijbehorende documentatiebestanden (de "Software") verkrijgt, om zonder beperking * in de Software te handelen, inclusief maar niet beperkt tot de rechten * om kopieën van de Software te gebruiken, kopiëren, wijzigen, samenvoegen, publiceren, distribueren, in sublicentie te geven en/of * te verkopen, en om personen toe te staan aan wie de Software is * verstrekt om dit te doen, met inachtneming van de volgende voorwaarden:* * De bovenstaande copyrightkennisgeving en deze toestemmingskennisgeving zullen worden opgenomen in * alle kopieën of substantiële delen van de Software. * * DE SOFTWARE WORDT GELEVERD "AS IS", ZONDER ENIGE GARANTIE, EXPLICIET OF * IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, * GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUK. IN GEEN GEVAL ZULLEN DE * AUTEURS OF AUTEURSRECHTHOUDERS AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE * AANSPRAKELIJKHEID, ZOWEL UIT CONTRACT, ONRECHTMATIGE OF ANDERSZINS, VOORTVLOEIEND UIT * UIT OF IN VERBAND MET DE SOFTWARE OF HET GEBRUIK OF HANDELINGEN IN DE * SOFTWARE. */// Als uw doel beperkt is in het geheugen, verwijdert u deze macro om 10K RAM te besparen#define EIDSP_QUANTIZE_FILTERBANK 0/** * Definieert het aantal segmenten per modelvenster. bijv. een modelvenster van 1000 ms * met slices per modelvenster ingesteld op 4. Resulteert in een slice-grootte van 250 ms. * Voor meer info:https://docs.edgeimpulse.com/docs/continuous-audio-sampling */#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3/* Inclusief ------------------- --------------------------------------------- */#inclusief#include #include
Productieproces
- IIoT-beveiligingstips en trends voor 2020
- Cloud en edge computing voor IoT:een korte geschiedenis
- Waarom edge computing voor IoT?
- Kontrons KBox A-150-WKL voor data-intensieve IoT Edge-applicaties
- Armkernen ontworpen voor TinyML-apparaten
- Edge Computing-voordelen voor AI Crystallizing
- Vier stappen voor succes in edge computing
- Microsoft lanceert Azure Edge Zones voor 5G-toepassingen
- De noodzaak van open source aan de rand (eBook)
- Chemisch detectiesysteem voor lage concentratieniveaus
- 3 redenen om gasdetectieapparatuur te onderhouden