- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Δημιουργία του συνόλου δεδομένων για την αναγνώριση ομιλίας Arduino
- Εκπαίδευση του Μοντέλου
- Κωδικός Arduino για αναγνώριση φωνής Arduino
Η τεχνολογία αναγνώρισης ομιλίας είναι πολύ χρήσιμη στον αυτοματισμό, η οποία όχι μόνο σας δίνει hands-free έλεγχο των συσκευών, αλλά και προσθέτει ασφάλεια στο σύστημα. Εκτός από την κατασκευή φωνητικών συσκευών, η αναγνώριση ομιλίας παρέχει επίσης σημαντική βοήθεια σε άτομα που πάσχουν από διάφορες αναπηρίες.
Σε προηγούμενα έργα κατασκευάσαμε μετατροπέα Text to Speech (TTS) με βάση το Arduino και φώτα ελεγχόμενης φωνής Τώρα σε αυτό το έργο, θα χρησιμοποιήσουμε μηχανική εκμάθηση για να εκπαιδεύσουμε ένα μοντέλο αναγνώρισης ομιλίας χρησιμοποιώντας το Edge Impulse Studio με τρεις εντολές, δηλαδή « LIGHT ON» , « LIGHT OFF» και « NOISE » Το Edge Impulse είναι μια διαδικτυακή πλατφόρμα μηχανικής εκμάθησης που επιτρέπει στους προγραμματιστές να δημιουργήσουν την επόμενη γενιά έξυπνων συσκευών με ενσωματωμένη μηχανική εκμάθηση. Χρησιμοποιήσαμε προηγουμένως το Edge impulse studio για να διαφοροποιήσουμε τους ήχους βήχα και θορύβου.
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα
- Arduino 33 BLE Sense
- LED
- Καλώδια αλτών
Λογισμικό
- Στούντιο Edge Impulse
- Arduino IDE
Έχουμε καλύψει ένα λεπτομερές σεμινάριο για το Arduino 33 BLE Sense.
Διάγραμμα κυκλώματος
Το διάγραμμα κυκλώματος για αυτήν την αναγνώριση φωνής χρησιμοποιώντας το Arduino δίνεται παρακάτω. Το μέρος Fritzing για το Arduino 33 BLE δεν ήταν διαθέσιμο, επομένως χρησιμοποίησα το Arduino Nano καθώς και οι δύο έχουν το ίδιο pinout.
Το θετικό καλώδιο LED είναι συνδεδεμένο με ψηφιακό πείρο 5 του Arduino 33 BLE και το αρνητικό καλώδιο συνδέεται με τον πείρο GND του Arduino.
Δημιουργία του συνόλου δεδομένων για την αναγνώριση ομιλίας Arduino
Εδώ το Edge Impulse Studio χρησιμοποιείται για την εκπαίδευση του μοντέλου Αναγνώρισης ομιλίας. Η εκπαίδευση ενός μοντέλου στο Edge Impulse Studio είναι παρόμοια με την κατάρτιση μοντέλων μηχανικής μάθησης σε άλλα πλαίσια μηχανικής μάθησης. Για την εκπαίδευση, το πρώτο βήμα ενός μοντέλου μηχανικής μάθησης είναι η συλλογή ενός συνόλου δεδομένων που έχει τα δείγματα δεδομένων που θα θέλαμε να αναγνωρίσουμε.
Καθώς ο στόχος μας είναι να ελέγξουμε ένα LED με τη φωνητική μας εντολή, θα χρειαστεί να συλλέξουμε δείγματα φωνής για όλες τις εντολές και τον θόρυβο, ώστε να μπορεί να διακρίνει μεταξύ φωνητικών εντολών και άλλων θορύβων.
Θα δημιουργήσουμε ένα σύνολο δεδομένων με τρεις κατηγορίες " LED ON ", " LED OFF " και " noise ". Για να δημιουργήσετε ένα σύνολο δεδομένων, δημιουργήστε έναν λογαριασμό Edge Impulse, επαληθεύστε τον λογαριασμό σας και, στη συνέχεια, ξεκινήστε ένα νέο έργο. Μπορείτε να φορτώσετε τα δείγματα χρησιμοποιώντας το κινητό σας, την πλακέτα Arduino ή μπορείτε να εισαγάγετε ένα σύνολο δεδομένων στον λογαριασμό σας. Ο ευκολότερος τρόπος για να φορτώσετε τα δείγματα στο λογαριασμό σας είναι χρησιμοποιώντας το κινητό σας τηλέφωνο. Για αυτό συνδέστε το κινητό με το Edge Impulse.
Για σύνδεση κινητού τηλεφώνου κάντε κλικ στο « Συσκευές » και μετά κάντε κλικ στο « Σύνδεση νέας συσκευής» .
Τώρα στο επόμενο παράθυρο κάντε κλικ στο "Χρήση του κινητού σας τηλεφώνου" και θα εμφανιστεί ένας κωδικός QR. Σαρώστε τον κωδικό QR με το κινητό σας τηλέφωνο ή εισαγάγετε τη διεύθυνση URL που αναφέρεται στον κωδικό QR.
Αυτό θα συνδέσει το τηλέφωνό σας με το Edge Impulse studio.
Με το τηλέφωνό σας συνδεδεμένο με το Edge Impulse Studio, μπορείτε πλέον να φορτώσετε τα δείγματά σας. Για να φορτώσετε τα δείγματα κάντε κλικ στο « Απόκτηση δεδομένων» . Τώρα στη σελίδα Απόκτηση δεδομένων εισαγάγετε το όνομα της ετικέτας, επιλέξτε το μικρόφωνο ως αισθητήρα και εισαγάγετε το μήκος του δείγματος. Κάντε κλικ στο « Έναρξη δειγματοληψίας» , η συσκευή σας θα καταγράψει ένα δείγμα 2 δευτερολέπτων. Καταγράψτε συνολικά 10 έως 12 δείγματα φωνής σε διαφορετικές συνθήκες.
Μετά τη μεταφόρτωση των δειγμάτων για την πρώτη τάξη ορίστε τώρα την αλλαγή της ετικέτας και συλλέξτε τα δείγματα για την κατηγορία " light off" και "noise" .
Αυτά τα δείγματα είναι για την Εκπαίδευση της ενότητας, στα επόμενα βήματα, θα συλλέξουμε τα Δεδομένα δοκιμής. Τα δεδομένα δοκιμών πρέπει να είναι τουλάχιστον το 30% των δεδομένων εκπαίδευσης, οπότε συλλέξτε τα 4 δείγματα «θορύβου» και 4 έως 5 δείγματα για «φως σε» και «απενεργοποίηση»
Εκπαίδευση του Μοντέλου
Καθώς το σύνολο δεδομένων μας είναι έτοιμο, τώρα μπορούμε να δημιουργήσουμε μια ώθηση για τα δεδομένα. Για αυτό μεταβείτε στη σελίδα " Δημιουργία ώθησης ". Αλλάξτε τις προεπιλεγμένες ρυθμίσεις μεγέθους παραθύρου 1000 ms σε 1200ms και αύξηση παραθύρου 500 ms σε 50ms. Αυτό σημαίνει ότι τα δεδομένα μας θα υποβάλλονται σε επεξεργασία 1,2 δευτερόλεπτα κάθε φορά, ξεκινώντας κάθε 58ms.
Τώρα στη σελίδα " Δημιουργία ώθησης" κάντε κλικ στο " Προσθήκη μπλοκ επεξεργασίας" . Στο επόμενο παράθυρο επιλέξτε το μπλοκ ήχου (MFCC). Μετά από αυτό κάντε κλικ στο « Προσθήκη μπλοκ εκμάθησης» και επιλέξτε το μπλοκ Neural Network (Keras). Στη συνέχεια, κάντε κλικ στο " Αποθήκευση ώθησης" .
Στο επόμενο βήμα μεταβείτε στη σελίδα MFCC και, στη συνέχεια, κάντε κλικ στο «Δημιουργία δυνατοτήτων». Θα δημιουργήσει μπλοκ MFCC για όλα τα παράθυρα ήχου.
Μετά από αυτό μεταβείτε στη σελίδα " NN Classifier" και κάντε κλικ στις τρεις κουκκίδες στην επάνω δεξιά γωνία των " Ρυθμίσεων νευρωνικού δικτύου" και επιλέξτε " Μετάβαση σε λειτουργία Keras (ειδικός)" .
Αντικαταστήστε το πρωτότυπο με τον ακόλουθο κωδικό και αλλάξτε την « Ελάχιστη βαθμολογία εμπιστοσύνης» σε « 0,70» . Στη συνέχεια, κάντε κλικ στο κουμπί " Έναρξη εκπαίδευσης" . Θα αρχίσει να εκπαιδεύει το μοντέλο σας.
εισαγωγή tensorflow ως tf από το tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D από το tensorflow.keras.optimizers εισαγωγή από το tensorflow.keras.optimizers εισαγωγή MaxNorm # μοντέλο αρχιτεκτονική μοντέλο = 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 (class, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # αυτό ελέγχει το ποσοστό εκμάθησης = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # εκπαιδεύστε το νευρικό δίκτυο model.compile (loss ='ategorical_crossentropy ', optimizer = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, εποχή = 9, επικύρωση_δεδομένων = (X_test, Y_test), verbose = 2)ριζική = 2)ριζική = 2)
Μετά την προπόνηση το μοντέλο θα δείξει την απόδοση της προπόνησης. Για μένα, η ακρίβεια ήταν 81,1% και η απώλεια ήταν 0,45 που δεν είναι ιδανική απόδοση, αλλά μπορούμε να συνεχίσουμε με αυτήν. Μπορείτε να αυξήσετε την απόδοση του μοντέλου σας δημιουργώντας ένα τεράστιο σύνολο δεδομένων.
Τώρα καθώς το μοντέλο Αναγνώρισης ομιλίας μας είναι έτοιμο, θα αναπτύξουμε αυτό το μοντέλο ως βιβλιοθήκη Arduino. Πριν από τη λήψη του μοντέλου ως βιβλιοθήκης, μπορείτε να δοκιμάσετε την απόδοση μεταβαίνοντας στη σελίδα " Ζωντανή ταξινόμηση" . Η λειτουργία ζωντανής ταξινόμησης σάς επιτρέπει να δοκιμάσετε το μοντέλο τόσο με τα υπάρχοντα δεδομένα δοκιμών που συνοδεύουν το σύνολο δεδομένων είτε με ροή δεδομένων ήχου από το κινητό σας τηλέφωνο.
Για να ελέγξετε τα δεδομένα με το τηλέφωνό σας, επιλέξτε " Μετάβαση σε λειτουργία ταξινόμησης" στο τηλέφωνό σας.
Τώρα για να κατεβάσετε το μοντέλο ως Arduino Library, μεταβείτε στη σελίδα " Ανάπτυξη " και επιλέξτε " Arduino Library" . Τώρα μετακινηθείτε προς τα κάτω και κάντε κλικ στο " Build " για να ξεκινήσει η διαδικασία. Αυτό θα δημιουργήσει μια βιβλιοθήκη Arduino για το έργο σας.
Τώρα προσθέστε τη βιβλιοθήκη στο Arduino IDE σας. Για αυτό ανοίξτε το Arduino IDE και, στη συνέχεια, κάντε κλικ στο Σκίτσο> Συμπερίληψη βιβλιοθήκης> Προσθήκη βιβλιοθήκης ZIP
Στη συνέχεια, φορτώστε ένα παράδειγμα μεταβαίνοντας στο Αρχείο> Παραδείγματα> Το όνομα του έργου σας - Edge Impulse> nano_ble33_sense_microphone
Κωδικός Arduino για αναγνώριση φωνής Arduino
Εδώ έχουν γίνει κάποιες αλλαγές στον έλεγχο του LED με τις φωνητικές εντολές.
Πραγματοποιούμε μερικές αλλαγές στον κενό βρόχο () όπου εκτυπώνει την πιθανότητα εντολών. Στον αρχικό κώδικα, εκτυπώνει όλες τις ετικέτες και τις τιμές τους μαζί.
για (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Για να ελέγξουμε το LED πρέπει να αποθηκεύσουμε όλες τις πιθανότητες εντολών σε τρεις διαφορετικές μεταβλητές, έτσι ώστε να μπορούμε να βάλουμε τις υποθέσεις υπό όρους. Έτσι, σύμφωνα με τον νέο κωδικό, εάν η πιθανότητα της εντολής " light on" είναι μεγαλύτερη από 0,50, τότε θα ανάψει η LED και εάν η πιθανότητα της εντολής " light off" είναι μεγαλύτερη από 0,50 από ότι θα σβήσει το LED.
για (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Θόρυβος:"); Serial.println (θόρυβος); } για (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Light Off:"); Serial.print (lightoff); } lighton = 1- (θόρυβος + lightoff); Serial.println ("Light ON:"); Serial.print (lighton); εάν (lighton> 0,50) {digitalWrite (led, HIGH); } εάν (lightoff> 0,50) {digitalWrite (led, LOW); }
Αφού πραγματοποιήσετε τις αλλαγές, ανεβάστε τον κωδικό στο Arduino σας. Ανοίξτε τη σειριακή οθόνη στο 115200 baud.
Έτσι μπορείτε να δημιουργήσετε αναγνώριση ομιλίας χρησιμοποιώντας το Arduino και να δώσετε εντολές για τη λειτουργία των συσκευών.
Ακολουθεί ένα πλήρες βίντεο εργασίας με βιβλιοθήκη και κωδικό.