- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Δημιουργία του συνόλου δεδομένων για μηχανή ανίχνευσης βήχα
- Εκπαίδευση του Μοντέλου και Παρακολούθηση του Κώδικα
Το COVID19 είναι πραγματικά μια ιστορική πανδημία που πλήττει άσχημα ολόκληρο τον κόσμο και οι άνθρωποι κατασκευάζουν πολλές νέες συσκευές για να πολεμήσουν. Έχουμε επίσης κατασκευάσει μια αυτόματη μηχανή απολύμανσης και θερμικό όπλο για έλεγχο θερμοκρασίας χωρίς επαφή. Σήμερα θα δημιουργήσουμε μια ακόμη συσκευή για να βοηθήσουμε στην καταπολέμηση του Coronavirus. Είναι ένα σύστημα ανίχνευσης βήχα, το οποίο μπορεί να διακρίνει μεταξύ θορύβου και ήχου βήχα και μπορεί να βοηθήσει στην εύρεση ύποπτου Corona. Θα χρησιμοποιήσει τεχνικές μηχανικής μάθησης για αυτό.
Σε αυτό το σεμινάριο, πρόκειται να δημιουργήσουμε ένα σύστημα ανίχνευσης βήχα χρησιμοποιώντας το Arduino 33 BLE Sense και το Edge Impulse Studio. Μπορεί να κάνει διάκριση μεταξύ φυσιολογικού θορύβου στο παρασκήνιο και βήχα σε ήχο σε πραγματικό χρόνο. Χρησιμοποιήσαμε το Edge Impulse Studio για να εκπαιδεύσουμε ένα σύνολο δεδομένων δειγμάτων βήχα και θορύβου στο παρασκήνιο και να δημιουργήσουμε ένα εξαιρετικά βελτιστοποιημένο μοντέλο TInyML, το οποίο μπορεί να ανιχνεύσει ήχο βήχα σε πραγματικό χρόνο.
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα
- Arduino 33 BLE Sense
- LED
- Καλώδια αλτών
Λογισμικό
- Στούντιο Edge Impulse
- Arduino IDE
Έχουμε καλύψει ένα λεπτομερές σεμινάριο για το Arduino 33 BLE Sense.
Διάγραμμα κυκλώματος
Το διάγραμμα κυκλώματος για ανίχνευση βήχα χρησιμοποιώντας το Arduino 33 BLE Sense δίνεται παρακάτω. Το μέρος Fritzing για το Arduino 33 BLE δεν ήταν διαθέσιμο, επομένως χρησιμοποίησα το Arduino Nano καθώς και οι δύο έχουν το ίδιο pin-out.
Το θετικό καλώδιο του LED είναι συνδεδεμένο με τον ψηφιακό πείρο 4 του Arduino 33 BLE και το αρνητικό καλώδιο συνδέεται με τον ακροδέκτη GND του Arduino.
Δημιουργία του συνόλου δεδομένων για μηχανή ανίχνευσης βήχα
Όπως αναφέρθηκε προηγουμένως, χρησιμοποιούμε το Edge Impulse Studio για να εκπαιδεύσουμε το μοντέλο ανίχνευσης βήχα. Για αυτό, πρέπει να συλλέξουμε ένα σύνολο δεδομένων με τα δείγματα δεδομένων που θα θέλαμε να μπορούμε να αναγνωρίσουμε στο Arduino μας. Δεδομένου ότι ο στόχος είναι να ανιχνευθεί ο βήχας, θα πρέπει να συλλέξετε μερικά δείγματα αυτού και μερικά άλλα δείγματα για θόρυβο, ώστε να διακρίνει μεταξύ βήχα και άλλων θορύβων.
Θα δημιουργήσουμε ένα σύνολο δεδομένων με δύο κατηγορίες «βήχα» και «θόρυβο». Για να δημιουργήσετε ένα σύνολο δεδομένων, δημιουργήστε έναν λογαριασμό Edge Impulse, επαληθεύστε τον λογαριασμό σας και, στη συνέχεια, ξεκινήστε ένα νέο έργο. Μπορείτε να φορτώσετε τα δείγματα χρησιμοποιώντας το κινητό σας, την πλακέτα Arduino ή μπορείτε να εισαγάγετε ένα σύνολο δεδομένων στον λογαριασμό σας. Ο ευκολότερος τρόπος για να φορτώσετε τα δείγματα στο λογαριασμό σας είναι χρησιμοποιώντας το κινητό σας τηλέφωνο. Για αυτό, πρέπει να συνδέσετε το κινητό σας με το Edge Impulse.
Για να συνδέσετε το κινητό σας τηλέφωνο, κάντε κλικ στο « Συσκευές » και μετά κάντε κλικ στο « Σύνδεση νέας συσκευής» .
Τώρα στο επόμενο παράθυρο, κάντε κλικ στο " Χρήση του κινητού σας τηλεφώνου" και θα εμφανιστεί ένας κωδικός QR. Σαρώστε τον κωδικό QR με το κινητό σας τηλέφωνο χρησιμοποιώντας το Google Lens ή άλλη εφαρμογή σαρωτή κώδικα QR.
Αυτό θα συνδέσει το τηλέφωνό σας με το Edge Impulse studio.
Με το τηλέφωνό σας συνδεδεμένο με το Edge Impulse Studio, μπορείτε πλέον να φορτώσετε τα δείγματά σας. Για να φορτώσετε τα δείγματα, κάντε κλικ στο « Απόκτηση δεδομένων» . Τώρα στη σελίδα Απόκτηση δεδομένων, εισαγάγετε το όνομα της ετικέτας, επιλέξτε το μικρόφωνο ως αισθητήρα και εισαγάγετε το μήκος του δείγματος. Κάντε κλικ στο " Έναρξη δειγματοληψίας" , για να ξεκινήσετε τη δειγματοληψία δείγματος 40 δευτερολέπτων. Αντί να αναγκάζετε τον εαυτό σας για βήχα, μπορείτε να χρησιμοποιήσετε διαδικτυακά δείγματα βήχα διαφορετικών μηκών. Καταγράψτε συνολικά 10 έως 12 δείγματα βήχα διαφορετικών μηκών.
Αφού ανεβάσετε τα δείγματα βήχα, ορίστε τώρα την ετικέτα σε «θόρυβο» και συλλέξτε άλλα 10 έως 12 δείγματα θορύβου.
Αυτά τα δείγματα είναι για την Εκπαίδευση της ενότητας, στα επόμενα βήματα, θα συλλέξουμε τα Δεδομένα δοκιμής. Τα δεδομένα δοκιμών πρέπει να είναι τουλάχιστον το 30% των δεδομένων εκπαίδευσης, συνεπώς συλλέξτε τα 3 δείγματα «θορύβου» και 4 έως 5 δείγματα «βήχα».
Αντί να συλλέξετε τα δεδομένα σας, μπορείτε να εισαγάγετε το σύνολο δεδομένων μας στο λογαριασμό σας Edge Impulse χρησιμοποιώντας το Edge Impulse CLI Uploader.
Για να εγκαταστήσετε το CLI Uploader, κατεβάστε πρώτα και εγκαταστήστε το Node.js στον φορητό υπολογιστή σας. Μετά από αυτό ανοίξτε τη γραμμή εντολών και εισαγάγετε την παρακάτω εντολή:
npm εγκατάσταση -g edge-impulse-cli
Τώρα κατεβάστε το σύνολο δεδομένων (Dataset Link) και εξαγάγετε το αρχείο στο φάκελο του έργου σας. Ανοίξτε τη γραμμή εντολών και μεταβείτε στη θέση του συνόλου δεδομένων και εκτελέστε τις παρακάτω εντολές:
edge-impulse-uploader - clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / *. cbor edge-impulse-uploader - δοκιμή δοκιμής κατηγορίας / *. json edge-impulse-uploader - δοκιμή δοκιμής κατηγορίας / *. cbor
Εκπαίδευση του Μοντέλου και Παρακολούθηση του Κώδικα
Καθώς το σύνολο δεδομένων είναι έτοιμο, τώρα θα δημιουργήσουμε μια ώθηση για δεδομένα. Για αυτό μεταβείτε στη σελίδα " Δημιουργία ώθησης ".
Τώρα στη σελίδα " Δημιουργία ώθησης" , κάντε κλικ στο " Προσθήκη μπλοκ επεξεργασίας" . Στο επόμενο παράθυρο, επιλέξτε το μπλοκ ήχου (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)
Μετά την εκπαίδευση του μοντέλου, θα δείξει την απόδοση της προπόνησης. Για μένα, η ακρίβεια ήταν 96,5% και η απώλεια ήταν 0,10 που είναι καλό να προχωρήσουμε.
Τώρα καθώς το μοντέλο ανίχνευσης βήχα είναι έτοιμο, θα αναπτύξουμε αυτό το μοντέλο ως βιβλιοθήκη Arduino. Πριν από τη λήψη του μοντέλου ως βιβλιοθήκης, μπορείτε να ελέγξετε την απόδοση μεταβαίνοντας στη σελίδα " Ζωντανή ταξινόμηση ".
Μεταβείτε στη σελίδα " Ανάπτυξη " και επιλέξτε " Βιβλιοθήκη Arduino" . Τώρα μετακινηθείτε προς τα κάτω και κάντε κλικ στο "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); }
Θα αποθηκεύσουμε τόσο τις τιμές θορύβου όσο και βήχα σε διαφορετικές μεταβλητές και θα συγκρίνουμε τις τιμές θορύβου. Εάν η τιμή θορύβου είναι κάτω από 0,50, αυτό σημαίνει ότι η τιμή του βήχα είναι μεγαλύτερη από 0,50 και θα κάνει τον ήχο. Αντικαταστήστε το πρωτότυπο για τον κωδικό βρόχου () με αυτό:
για (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = αποτέλεσμα.classification.value; εάν (Δεδομένα <0,50) {Serial.print ("Εντοπίστηκε βήχα"); τρομάζω(); }}
Αφού πραγματοποιήσετε τις αλλαγές, ανεβάστε τον κωδικό στο Arduino σας. Ανοίξτε τη σειριακή οθόνη στο 115200 baud.
Έτσι λοιπόν μπορεί να κατασκευαστεί μια μηχανή ανίχνευσης βήχα, δεν είναι μια πολύ αποτελεσματική μέθοδος για την εύρεση ύποπτου COVID19, αλλά μπορεί να λειτουργήσει όμορφα σε κάποια πολυσύχναστη περιοχή.
Ακολουθεί ένα πλήρες βίντεο εργασίας με βιβλιοθήκη και κωδικό: