Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

TinyML-Spracherkennung basierend auf Edge Impulse &Arduino

Komponenten und Verbrauchsmaterialien

Arduino Nano 33 BLE Sense
× 1
National Control Devices PCA9685 8-Kanal 8W 12V FET-Treiber-Proportionalventil Controller mit I2C-Schnittstelle
× 1
SG90 Micro-Servomotor
× 3
9-V-Batterieklemme
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Lötkolben (generisch)

Apps und Onlinedienste

Edge Impulse Studio
Arduino-IDE
Autodesk Fusion 360

Über dieses Projekt

Übersicht

Die Idee hinter diesem Projekt besteht darin, ein Sprachklassifikatorium zu erstellen, das ein in einem Mikrocontroller implementiertes neuronales Netzwerk/Deep Learning verwendet. Das Gerät erkennt ein Wort für die Sprachen Italienisch, Englisch und Frankreich. Die zu erkennenden Wörter sind "si " für den Italiener, "oui " für die Franzosen und "ja " für das Englische. Das Gerät hört ununterbrochen zu und sobald eines der 3 Wörter erkannt wird, erscheint die Flagge der zugehörigen Sprache.

Das Projekt basiert auf den beiden Hauptkomponenten, dem Arduino Nano 33 BLE Sense Mikrocontroller und der Edge Impulse Studio Entwicklungsplattform.

Die Projektimplementierung lief wie folgt ab:

  • Sampling/Erstellung des Datensatzes
  • Entwerfen Sie das Modell
  • Training des Modells
  • Testen des Modells
  • An die Hardware anpassen
  • Bereitstellung des Modells und seine Anpassung
  • Bauen Sie das endgültige Gerät (die Hardware um das Modell herum).

Abtasten/Erstellen des Datensatzes

Der Datensatz besteht aus der Aufzeichnung der 3 Wörter (oui, si, yes), die insgesamt etwa 30 Minuten dauern (10 Minuten für jedes Wort).

Für jedes Wort wurde eine kontinuierliche Sounddatei erstellt, in der sich das gleiche Wort kontinuierlich wiederholte, und dann mit der Audacity-Anwendung wurde die Datei in mehrere Dateien mit einer Dauer von jeweils einer Sekunde aufgeteilt. Jede Datei enthält ein Beispiel für das Wort.

Diese Dateien wurden dann auf edge impulse hochgeladen und nach dem Wort beschriftet.

Zusätzlich zu diesen Dateien wurde ein weiterer Satz von Aufnahmedateien mit einer Dauer von 1 Sekunde hochgeladen und als Hintergrundgeräusche gekennzeichnet.

Insgesamt setzten sich die Trainingsdaten aus 33 Minuten zusammen (10 Minuten für jedes Wort und die 3 Minuten für das Hintergrundgeräusch)

Entwerfen Sie das Modell

Das Modell wurde unter Nutzung der Edge-Impuls-Plattform implementiert, bei der die meisten der benötigten Algorithmen bereits definiert und mit Dimplemen versehen waren.

Der erste Schritt zum Erstellen des Modells besteht darin, den Klang in eine Zeitreihe zu transformieren. Anschließend wird die Zeitreihe mit einer vordefinierten Zeitfenstergröße partitioniert.

(Diese erste Transformation ist auf der roten Seite des Bildes unten gezeigt).

Der zweite Schritt besteht darin, eine Signalverarbeitungstechnik zu verwenden, in diesem Fall die MFCC (Mel Frequency Cepstral Coefficients), um die Merkmale aus der Zeitreihe zu extrahieren, die jede der 4 Klassen (3 Wörter + Hintergrund) am besten charakterisieren.

Unten ein Beispiel für die MFCC-Transformation und ihre Koeffizienten.

Die Faltung der Zeitreihen und der Koeffizienten wird verwendet, um ein neuronales Netz zu speisen. Schließlich liefert die Ausgabe der neuronalen Netze eine Zugehörigkeitswahrscheinlichkeit für jede Klasse.

Nachfolgend ein Überblick über die Implementierung des neuronalen Netzwerks und seine Klassifikationsleistungen.

Training - Anpassen für den Arduino Nano 33 BLE Sense

Für das Training und für die finale Modellanpassung steht im Edge Impulse Studio eine neue Option namens "EON Tuner . zur Verfügung ". Es ermöglicht die Auswahl der optimalen Architektur für eine eingebettete Machine-Learning-Anwendung.

Es führt viele Instanzen möglicher Modelle parallel aus, jede Instanz mit unterschiedlicher Konfiguration (unterschiedliche digitale Signaltechnik und unterschiedliche neuronale Netzarchitekturen).

Diese Option erfordert nur ein paar Informationen, um ausgeführt zu werden:

  • Das "Ziel " was den Modelltyp repräsentiert (in diesem Fall "Keyword Spotting ")
  • Die Hardware, auf der die Anwendung ausgeführt wird (in diesem Fall "Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

Für jede Instanz gibt es die wenigen Klassifikationsleistungsmetriken, die für die Berechnung benötigte Zeit, die Menge an RAM und den auf dem Mikrocontroller-Dateisystem verwendeten Dateisystemspeicherplatz an.

Für dieses Projekt haben wir die 5 besten Instanzen für die Klassifizierungsgenauigkeit ausgewählt und daraus die schnellste ausgewählt.

Testen

Der Test wurde durchgeführt, indem ein neuer Satz von Rekorderdateien gesammelt und die Qualität der Klassifizierung überprüft wurde.

Einmal wurde überprüft, ob die Klassifizierung korrekt war. Wir sind zum nächsten Schritt der Implementierung übergegangen, der endgültigen Bereitstellung.

Bereitstellung

Der Einsatz dank des Edge-Impuls-Studios war recht unkompliziert.

Es wurde die Arduino-Bibliotheksoption aus den Bereitstellungsoptionen ausgewählt. Das ergibt eine Standard-Arduino-C-Datei des Modells, die an unsere Bedürfnisse angepasst werden kann.

Sobald das Gebäude durch den Edge-Impuls abgeschlossen ist, wird eine Zip-Datei erstellt und auf den lokalen Computer heruntergeladen, die für die endgültige Anpassung nur noch in die Arduino-Ide importiert werden muss.

Code

Der Code ist unter dem Link verfügbar. Der Code basiert auf dem Code, der vom Edge-Impuls heruntergeladen wurde, mit wenigen Anpassungen, die unten aufgeführt sind.

1. Es wurde die Bibliothek Adafruit_PWMServoDriver.h . hinzugefügt zum Antreiben der an den Fahnen angebrachten Servos.

2. Es wurde die Funktion servos_selector . definiert die Servos entsprechend den Klassifizierungsergebnissen zu koordinieren.

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

3. Schließlich wurde eine IF-Bedingung hinzugefügt, die das servos_select . aufruft Funktion basierend auf der "result.classification " Objekt.

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(" Anomaly score:%.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);
}
}

Stromkreise

Die elektrische Schaltung basiert auf dem Mikrocontroller Arduino Nano 33 BLE Sense Mikrocontroller und verwendet einen PCA9685 zum Ansteuern der 3 Servos.

Die PCA9685-Workload wird von einer externen 9-V-Batterie unterstützt.

Das ist alles.

Code

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

Kundenspezifische Teile und Gehäuse

Schaltpläne

Spracherkennung_9RxXhRX5sj.fzz

Herstellungsprozess

  1. Arduino-Gyroskop-Spiel mit MPU-6050
  2. Arduino Digital Dice
  3. Iron Man
  4. Finde mich
  5. Arduino-Befeuchtersteuerung
  6. Sonar mit Arduino und Anzeige bei der Verarbeitung von IDE
  7. MobBob:DIY-Arduino-Roboter, der von einem Android-Smartphone gesteuert wird
  8. Arduino Audio Reactive Desk Light
  9. NeoMatrix Arduino Pong
  10. Arduino-Joystick