Hier wird beschrieben wie man einen micro:bit v2 Mikrocomputer mithilfe eines neuronales Netzes so programmieren kann, dass er auf ein bestimmtes Schlüsselwort reagiert. Beim Erkennen des Schlüsselwortes leuchten standardmäßig LEDs in Form eines Smileys auf der Vorderseite des micro:bit auf. Diese Anleitung ist angelehnt an das Youtube Video https://www.youtube.com/watch?v=fNSKWdIxh8o&ab_channel=EdgeImpulse.
Du brauchst einen PC, ein Account bei Edge Impulse (https://www.edgeimpulse.com/), einen micro:bit v2 Mikrocomputer und irgendein Mikrofon (ich habe einfach das Mikrofon benutzt, das in meinem Handy verbaut ist, jedes andere Mikrofon geht natürlich auch).
Logge dich auf Edge Impulse ein und erstelle ein neues Projekt. Wir brauchen nun Daten für das Training. Genauer gesagt sowohl Tonaufnahmen wie jemand unser Schlüsselwort ausspricht, als auch Aufnahmen von Worten, die nicht dem Schlüsselwort entsprechen, und Hintergrundgeräusche. Um die Arbeit ein wenig zu vereinfachen, findet man unter folgendem Link sowohl Tonaufnahmen von zufälligen Worten (auf Englisch) als auch Hintergrundgeräusche: https://cdn.edgeimpulse.com/datasets/microbit-keywords-11khz.zip. Lade die zip-Datei herunter und extrahiere alle Inhalte. Natürlich kann man diese Geräusche auch selbstständig aufnehmen, wenn man mag. Wir beschränken uns bei den eigenen Aufnahmen jedoch erstmal auf die Aufnahme des Schlüsselwortes. Klicke in deinem Edge Impulse Projekt auf den Reiter Data Acquisition
. Nutze den Upload-Button, um die heruntergeladenen Geräusche in Edge Impulse zu importieren. Wähle bei den Upload-Optionen Automatically split between training and testing
und Infer from filename
aus. Nach dem Upload solltest du ca. 15 Minuten Tonaufnahmen mit dem Label unknown
und 15 Minuten Tonaufnahmen mit dem Label noise
in deinem Projekt sehen.
Nun brauchen wir noch Daten zu unserem gewählten Schlüsselwort. Diese nehmen wir selbst auf. Im Data Acquisition
Reiter steht recht weit oben Did you know? You can capture data from any device or development board or upload your existing datasets – Show options
. Klicke auf den Link Show options
. Möchtest du dein Handy nutzen, wähle die Option Use your mobile phone
aus. Drücke auf den Button Show QR Code
und scanne den Code mit deinem Handy. Nachdem dein Gerät erfolgreich verbunden wurde, erscheint rechts ein Fenster, in dem du Einstellungen für die neuen Tonaufnahmen vornehmen kannst. Trage bei Label
dein gewähltes Schlüsselwort ein, setzte die Sample length
zwischen 10 Sekunden und 30 Sekunden, wähle unter “Sensor“ das Mikrophon aus, und setze die Frequenz auf 11.000 Hz. Drücke den Button Start sampling
, um mit der Aufnahme des Schlüsselwortes zu beginnen. Dein Handy zählt die gewählte Zeit (sample length) runter. In dieser Zeit musst du das Schlüsselwort mehrmals hintereinander in das Mikrophon deines Handys sprechen. Achte darauf, dass du genug Pause zwischen den einzelnen Wiederholungen machst, da du die Tonspur nachher noch trennen musst. In dem Fenster Collected data
wählst du nun deine aufgenommene Tonspur aus, klickst auf die drei Punkte und wählst Split sample
aus. Es öffnet sich ein Fenster, in dem die Teile der Tonspur hervorgehoben sind, die getrennt werden. Bei Bedarf kannst du die automatische Auswahl noch abändern. Drücke anschließend auf Split
. Wiederhole den Aufnahme Vorgang mit anderen Personen so lange bis du mindestens insgesamt 5 Minuten Tonaufnahmen deines Schlüsselwortes gesammelt hast.
Nachdem alle notwendigen Daten gesammelt worden sind, klicke links auf den Reiter Create impulse
. Du solltest einen roten, weißen und blauen Block sehen (Wenn nicht, füge sie gleich noch hinzu). Setze die Window size
im ersten Block auf 999 ms. Der zweite Block sollte ein Audio (MFCC)
Block sein, der dritte Block sollte die Überschrift Neural Network (Keras)
bzw. Classification (Keras)
tragen. Du kannst die Blöcke über den Button Add a processing block
bzw. Add a learning block
hinzufügen. Drücke auf Save impulse
. Wähle nun links den Reiter MFCC
aus und drücke auf Save parameters
. Du wirst automatisch zur Generate features
Seite weitergeleitet. Wenn nicht, wähle oben den Generate features
Reiter aus. In dem Training set
Block, drücke auf den Generate features
Button. Zum Trainieren des neuronalen Netzes, wähle links den Reiter NN Classifier
. Versichere dich, dass der Haken hinter Data augmentation
gesetzt ist und drücke auf den Button Start training
. Nach dem Training siehst du eine Tabelle mit der erwarteten Genauigkeit des Modells. Unter dem Reiter Model testing
links, kannst du das Modell mit Daten testen, die nicht zum Training genutzt worden sind. Für das Testen kannst du auch extra Daten unter dem Reiter Data acquisition
hinzufügen.
Um das Programm auf den micro:bit zu laden, brauchen wir den Code aus folgendem repository: https://github.com/edgeimpulse/voice-activated-microbit. Klone das repository auf deinen Computer (eine Anleitung dazu findest du auf der Website). Du brauchst außerdem die Programme Python
, CMake
und GNU ARM Embedded Toolchain 9
(auch zum Installieren dieser Programme findest du Anweisungen auf der oben genannten Website). In dem geklonten repository, entferne die Ordner source/edge-impulse-sdk
, source/model-parameters
, und source/tflite-model
. In Edge Impulse, drücke auf den Reiter Deployment
auf der linken Seite. Unter Create Library
, wähle C++ library
und drücke anschließend auf den Button Build
am Ende der Seite. Verschiebe nun die gerade erhaltenen Dateien in den source
Ordner des geklonten repository. Öffne ein Eingabeterminal auf deinem PC und gehe zu dem repository.
cd path/to/your/voice-activated-microbit
Dann nutze die Eingabeaufforderung
python build.py
Anschließend kannst du die MICROBIT.hex
Datei aus dem repository auf deinen micro:bit Mikrocomputer kopieren.
Da die Anleitung oben einige sehr spezifische Voraussetzungen hat (z.B. Python2) hier stichwortartig eine Anleitung wie man es mit einem Docker Container machen kann.
Die Anleitung wurde unter Windows 11 ausprobiert. Prinzipiell sollte es auch unter Linux so gehen.
docker build -t microbit_ei_build .
source/edge-impulse-sdk
, source/model-parameters
, und source/tflite-model
. und ersetze sie durch die von Edge Impulse heruntergeladenen mit dem eigenen Sprachmodell (Siehe Oben)docker run --rm -v ${PWD}:/data microbit_ei_build
Jetzt sollte der Microbit auf die Sprachbefehle reagieren.