Πίνακας περιεχομένων:

Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας: 4 βήματα
Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας: 4 βήματα

Βίντεο: Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας: 4 βήματα

Βίντεο: Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας: 4 βήματα
Βίντεο: ΜΥΣΤΙΚΑ ΚΑΙ ΣΥΖΗΤΗΣΕΙΣ ΜΕ ΑΤΙΑ (Η αίθουσα συνομιλίας UFO του Πενταγώνου) 2024, Νοέμβριος
Anonim
Image
Image
Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας
Προσαρμοσμένο αναγνωριστικό ήχου κουζίνας

Για το τελευταίο μας έργο σε ένα μάθημα διαδραστικών συστημάτων αυτήν την άνοιξη, δημιουργήσαμε ένα σύστημα πραγματικού χρόνου για τον εντοπισμό και την απεικόνιση κοινών ήχων στην κουζίνα χρησιμοποιώντας την ταξινόμηση Support-Vector Machine. Το σύστημα αποτελείται από φορητό υπολογιστή για δειγματοληψία/ταξινόμηση ήχου και οθόνη Arduino/dot matrix για απεικόνιση. Ακολουθεί ένας οδηγός για τη δημιουργία της δικής σας έκδοσης αυτού του συστήματος για ήχους από τη δική σας κουζίνα.

Η αρχική μας θήκη χρήσης ήταν ως συσκευή για την κουζίνα ενός κωφού και βαρήκοου ατόμου, αλλά αυτό το σύστημα θα μπορούσε θεωρητικά να προσαρμοστεί για να προσδιορίσει ένα σύνολο ήχων σε ποικίλα πλαίσια. Η κουζίνα ήταν ένα ιδανικό μέρος για να ξεκινήσετε, καθώς τείνει να είναι σχετικά ήσυχη και περιέχει μια λογική ποσότητα απλών, ξεχωριστών ήχων.

Ένα αποθετήριο GitHub για αυτό το έργο μπορείτε να βρείτε εδώ.

Προμήθειες

  • Μικροελεγκτής Arduino Leonardo με κεφαλίδες
  • KEYESTUDIO 16x16 Dot Matrix LED οθόνη για Arduino
  • Συρματόπτερο από μπριζόλα
  • Καλώδιο Micro-USB σε USB 2.0
  • Φορητός υπολογιστής με Jupyter Notebook (εγκατάσταση Anaconda)

    Μπορείτε να βρείτε έναν οδηγό για αρχάριους στο Jupyter Notebook εδώ

  • Μια σημαντική ποσότητα ακατάλληλων τούβλων LEGO για το περίβλημα του συστήματος

    (Αλλά πραγματικά μπορείτε να τα αντικαταστήσετε με οποιοδήποτε DIY οικοδομικό υλικό που θέλετε!)

Βήμα 1: Συλλογή δειγμάτων ήχου κουζίνας

Συλλογή δειγμάτων ήχου κουζίνας
Συλλογή δειγμάτων ήχου κουζίνας

Εικόνα παραπάνω: Ηχητικά δεδομένα που λαμβάνονται από την εγγραφή ενός πιρουνιού και ενός μαχαιριού που τσουγκρίζουν μαζί χρησιμοποιώντας αυτήν τη διαδικασία συλλογής

Για να προσδιορίσουμε τους ήχους σε πραγματικό χρόνο, πρέπει να παρέχουμε το μοντέλο μηχανικής μάθησης με ποιοτικά παραδείγματα για σύγκριση. Δημιουργήσαμε ένα σημειωματάριο Jupyter για αυτήν τη διαδικασία, στο οποίο μπορείτε να έχετε πρόσβαση εδώ ή μέσω του αποθετηρίου GitHub του έργου μας. Το αποθετήριο περιέχει επίσης συλλογές δειγμάτων από δύο διαφορετικές κουζίνες για σκοπούς δοκιμής.

Βήμα 1.1: Αντιγράψτε το σημειωματάριο CollectSamples.ipynb στον λειτουργικό κατάλογο Jupyter Notebook και ανοίξτε τον.

Βήμα 1.2: Εκτελέστε κάθε κελί ένα προς ένα, δίνοντας προσοχή στις σημειώσεις που έχουμε δώσει στις επικεφαλίδες. Σταματήστε όταν φτάσετε σε έναν με τίτλο "Εγγραφή δείγματος".

ΣΗΜΕΙΩΣΗ: Σε αυτό το σημειωματάριο χρησιμοποιούνται αρκετές βιβλιοθήκες Python και η κάθε μία απαιτεί εγκατάσταση πριν από την επιτυχή εισαγωγή τους στο έργο. Είστε ευπρόσδεκτοι να το κάνετε αυτό με μη αυτόματο τρόπο, αν και μπορείτε να βρείτε έναν οδηγό για την εγκατάσταση της βιβλιοθήκης στο Jupyter Notebook εδώ.

Βήμα 1.3: Δημιουργήστε έναν κενό κατάλογο για να αποθηκεύσετε τα δείγματά σας στον κατάλογο εργασίας σας για αυτό το έργο.

Βήμα 1.4: Επεξεργαστείτε τη μεταβλητή SAMPLES_LOCATION στο κελί "Εγγραφή δείγματος" για να ταιριάζει με την τοποθεσία του κενού καταλόγου σας.

Βήμα 1.5: Προσθέστε ή αφαιρέστε όσους ήχους θέλετε στη μεταβλητή SOUND_LABELS.

Για να λειτουργήσει το δείγμα κωδικού εγγραφής, κάθε γραμμή αυτής της μεταβλητής πρέπει να διαχωριστεί με κόμμα και της ακόλουθης μορφής:

'ts': oundχος ("TargetedSound", "ts")

Βήμα 1.6: Όταν έχουν προστεθεί όλες οι ετικέτες, αξιολογώντας το κελί "Εγγραφή δείγματος" ξεκινώντας τη διαδικασία συλλογής δείγματος. Στην έξοδο του κελιού, θα σας ζητηθεί να εισαγάγετε τον σύντομο κώδικα που συσχετίσατε με κάθε ήχο στις ετικέτες (δηλαδή "ts" για TargetedSound). Μην το κάνεις ακόμα.

Βήμα 1.7: Πάρτε το φορητό υπολογιστή σας στην κουζίνα και τοποθετήστε το στην περιοχή που πιθανότατα θα τοποθετήσετε το τελικό σύστημα. Αυτή η τοποθεσία πρέπει να είναι κεντρική για καλή συλλογή ήχου και να στεγνώνει και μακριά από τυχόν διαρροές για την προστασία των ηλεκτρονικών σας.

Βήμα 1.8: Προετοιμάστε τον πρώτο στοχευμένο ήχο. Εάν πρόκειται για μπιπ χρονοδιακόπτη φούρνου, μπορείτε να ρυθμίσετε το χρονόμετρο σε ένα λεπτό και να περιμένετε να μετρήσει αντίστροφα έως 20 δευτερόλεπτα περίπου, προτού συνεχίσετε στο επόμενο βήμα.

Βήμα 1.9: Πληκτρολογήστε τον κωδικό ετικέτας στη γραμμή προτροπής (δηλ., "Ts") και πατήστε Enter/Return.

Το σύστημα θα αρχίσει να ακούει για ένα ηχητικό γεγονός διαφορετικό από τον θόρυβο του δωματίου. Μόλις αντιληφθεί αυτό το ηχητικό συμβάν, θα ξεκινήσει την εγγραφή έως ότου αντιληφθεί ότι ο ήχος στο δωμάτιο έχει επιστρέψει στα επίπεδα περιβάλλοντος. Στη συνέχεια, θα αποθηκεύσει τον ήχο ως αρχείο WAV 16-bit στον κατάλογο που προσδιορίζεται στο SAMPLES_LOCATION με τη μορφή:

TargetedSound _#_ capture.wav

Το # τμήμα αυτού του ονόματος αρχείου αντιστοιχεί στον αριθμό των δειγμάτων του στοχευμένου ήχου που έχετε συλλέξει. Αφού αποθηκευτεί το αρχείο WAV, η προτροπή θα επαναληφθεί, επιτρέποντάς σας να συλλέξετε πολλά δείγματα του ίδιου ήχου σε μία μόνο εκτέλεση του κελιού.

ΜΗΝ αλλάξετε αυτό το όνομα αρχείου. Είναι σημαντικό για το επόμενο βήμα.

Βήμα 1.10: Επαναλάβετε τα βήματα 1.8 και 1.9 μέχρι να συλλέξετε 5-10 δείγματα από κάθε ήχο.

Βήμα 1.11: Εισαγάγετε "x" όταν τελειώσετε για έξοδο από την εκτέλεση.

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η αποτυχία εξόδου από το κελί με αυτόν τον τρόπο μπορεί να προκαλέσει τη διακοπή λειτουργίας του Notebook. Σε αυτήν την περίπτωση, ο πυρήνας του Notebook πρέπει να επαναρυθμιστεί και κάθε κελί να τρέξει ξανά από την κορυφή.

Βήμα 1.11 (Προαιρετικό): Ελέγξτε τα δεδομένα WAV μεμονωμένων αρχείων στο κελί "Quick Sound Visualization" για να βεβαιωθείτε ότι έχετε καταγράψει όλες τις επιθυμητές πληροφορίες.

Μερικές συμβουλές:

  • Καταγράψτε όταν η κουζίνα σας είναι ήσυχη.
  • Καταγράψτε μόνο έναν ήχο ταυτόχρονα. Το σύστημα δεν μπορεί να διακρίνει την επικάλυψη στους ήχους.
  • Προσπαθήστε να κάνετε κάθε δοκιμή ήχου όσο το δυνατόν πιο συνεπής. Αυτό θα βοηθήσει στην ακρίβεια της ταυτοποίησης.
  • Η επανεκτίμηση του κελιού εγγραφής θα επαναφέρει την τιμή # στο όνομα αρχείου και θα αντικαταστήσει τυχόν υπάρχοντα αρχεία που ταιριάζουν με αυτό το #. Βρήκαμε το πιο εύκολο να καταγράψουμε όλα τα δείγματα ενός ήχου ταυτόχρονα και μετά να σταματήσουμε το κελί εγγραφής.
  • Εάν το σύστημα δεν λαμβάνει τον στοχοθετημένο ήχο, δοκιμάστε να χαμηλώσετε την τιμή THRESHOLD (ορίστε στο 30 για εκκίνηση) και επανεκτιμήστε το κελί.
  • Εάν η εγγραφή ενεργοποιείται από άλλους ήχους εκτός του στοχευμένου, δοκιμάστε να αυξήσετε την τιμή THRESHOLD (ορίστε στο 30 για να ξεκινήσει) και επανεκτιμήστε το κελί.

Βήμα 2: Προετοιμασία της οθόνης Arduino/Matrix

Προετοιμασία της οθόνης Arduino/Matrix
Προετοιμασία της οθόνης Arduino/Matrix
Προετοιμασία της οθόνης Arduino/Matrix
Προετοιμασία της οθόνης Arduino/Matrix
Προετοιμασία της οθόνης Arduino/Matrix
Προετοιμασία της οθόνης Arduino/Matrix

Στη συνέχεια, θα δημιουργήσουμε το σύστημα απεικόνισης χρησιμοποιώντας μια οθόνη κουκκίδων LED Arduino Leonardo και KEYESTUDIO 16x16. Αυτό γίνεται για να εξάγει την πρόβλεψη του ανιχνευμένου ήχου από το μοντέλο ταξινόμησης. Όπως και πριν, παρέχουμε όλα τα απαιτούμενα αρχεία τόσο εδώ όσο και στο αποθετήριο GitHub του έργου.

Βήμα 2.1: Συνδέστε τη μήτρα Arduino και LED σύμφωνα με το παραπάνω διάγραμμα. Το KEYESTUDIO περιλαμβάνει καλώδια για σύνδεση με την κουκκίδα τους, αλλά θα χρειαστούν καλώδια με βραχυκυκλωτήρα για τη σύνδεση αυτών των καλωδίων στο Arduino

Βήμα 2.2: Ανοίξτε το "arduino_listener.ino" χρησιμοποιώντας το Ardunio IDE και ανεβάστε το στο Leonardo. Εάν συνδεθείτε σωστά, θα πρέπει να δείτε το εικονίδιο "ακρόαση" (μοιάζει με Wi-Fi) όπως φαίνεται στην παραπάνω εικόνα.

Βήμα 2.3: Προετοιμάστε τα εικονίδια που θέλετε να εμφανίζονται για κάθε έναν από τους ήχους -στόχους σας. Για να γνωρίζετε ποια LED θα ανάψουν, το εικονίδιο πρέπει να σταλεί από το Arduino στη μήτρα ως πίνακα byte. Για παράδειγμα, το εικονίδιο του φλιτζανιού καφέ (στην παραπάνω εικόνα) αποστέλλεται στη μήτρα με αυτήν τη μορφή:

{

0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xFE, 0xFE, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0F, 0xf7, 0xfb, 0xfb, 0xfb, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};

Σχεδιάσαμε τα εικονίδια μας χρησιμοποιώντας το online εργαλείο Dot2Pic, με 16 στήλες, 16 σειρές και "μονόχρωμα, 8 pixel ανά byte, κάθετη ρύθμιση" επιλεγμένα από το αναπτυσσόμενο μενού. Το δικό μας μπορεί να βρεθεί στον πίνακα "sample_icon_bytes.txt".

ΣΗΜΕΙΩΣΗ: Μπορεί επίσης να υπάρχουν διαδικτυακά εργαλεία που μπορούν να το κάνουν αυτόματα με μεταφορτωμένα αρχεία.

Βήμα 2.4: Σχεδιάστε κάθε εικονίδιο. Όταν τελειώσετε το σχέδιο, επιλέξτε "Μετατροπή στον πίνακα".

Βήμα 2.5: Αντικαταστήστε τα περιττά εικονίδια που ορίζονται στο επάνω μέρος του κώδικα "arduino_listening.ino" όπως θέλετε. Φροντίστε να προσθέσετε ένα σχόλιο που περιγράφει το εικονίδιο, ώστε να θυμάστε ποιο είναι ποιο!

Βήμα 2.6: Ανεβάστε τον νέο κώδικα στο Arduino. Μην κλείσετε το αρχείο ακόμα, θα το χρειαστούμε για το επόμενο βήμα.

Βήμα 3: Εκτέλεση του ταξινομητή και αναγνώριση ήχων

Εκτέλεση του ταξινομητή και αναγνώριση ήχων
Εκτέλεση του ταξινομητή και αναγνώριση ήχων
Εκτέλεση του ταξινομητή και αναγνώριση ήχων
Εκτέλεση του ταξινομητή και αναγνώριση ήχων

Τώρα ήρθε η ώρα να συνδυάσουμε το σύστημα. Ο αγωγός ταξινόμησης, η επικοινωνία Arduino και η ζωντανή λήψη ήχου γίνονται όλα μέσω ενός φορητού υπολογιστή Arduino, το οποίο παρέχεται εδώ ή μπορεί να προσπελαστεί μέσω του αποθετηρίου GitHub του έργου μας.

Βήμα 3.1: Αντιγράψτε το σημειωματάριο FullPipeline.ipynb στον λειτουργικό κατάλογο Jupyter Notebook και ανοίξτε τον.

Βήμα 3.2: Εκτελέστε κάθε κελί ένα προς ένα, δίνοντας προσοχή στις σημειώσεις που έχουμε δώσει στις επικεφαλίδες. Δεν αναμένεται έξοδος. Σταματήστε όταν φτάσετε στο κελί με τίτλο "Load the Training Data".

Βήμα 3.3: Επεξεργαστείτε τη μεταβλητή SAMPLES_LOCATION_ROOT στο κελί "Φόρτωση δεδομένων εκπαίδευσης" στον γονικό κατάλογο της προηγούμενης τοποθεσίας του δείγματος καταλόγου. Στη συνέχεια, αλλάξτε τη μεταβλητή SAMPLES_DIR_NAME στο όνομα του καταλόγου σας. Αν λοιπόν είχατε ορίσει την τοποθεσία στο CollectSamples.ipynb σε:

SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"

Μπορείτε τώρα να ορίσετε αυτές τις μεταβλητές σε:

SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"

Αυτό το επιτρέψαμε γρήγορες αλλαγές στον ταξινομητή σε περιπτώσεις ανακρίβειας. Μπορείτε να κάνετε εναλλαγή μεταξύ διαφορετικών συλλογών δειγμάτων για να συντονίσετε τα δεδομένα σας.

Βήμα 3.4: Αξιολογήστε το κελί. Θα πρέπει να δείτε κάθε συλλογή να φορτώνεται με επιτυχία.

Βήμα 3.5: Συνεχίστε να εκτελείτε κάθε κελί ένα προς ένα, δίνοντας προσοχή στις σημειώσεις που έχουμε δώσει στις επικεφαλίδες.

Βήμα 3.6: Σταματήστε όταν φτάσετε στο κελί "Messaging Arduino". Ορίστε τη σειριακή θύρα που θα χρησιμοποιεί ο υπολογιστής σας για επικοινωνία με το Arduino στη μεταβλητή PORT_DEF. Αυτό μπορείτε να το βρείτε στο Arduino IDE και μεταβείτε στην ενότητα Εργαλεία> Θύρα.

Περισσότερες πληροφορίες μπορείτε να βρείτε εδώ.

Βήμα 3.8: Ανοίξτε ξανά το Arduino IDE. Σε μέρη όπου κάνατε αλλαγές στα εικονίδια, σημειώστε το γράμμα δίπλα στην τιμή του πίνακα, αλλά ΜΗΝ το αλλάξετε. Στο παρακάτω παράδειγμα, αυτό είναι "g".

// απόρριψη σκουπιδιώνανυπόγραφο char g [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

Βήμα 3.7: (Επιστροφή στο κελί "Messaging Arduino" του Σημειωματάριου) Αλλάξτε τις ετικέτες στο λεξικό self.sounds για να ταιριάζουν με τις ετικέτες που χρησιμοποιήσατε για την εγγραφή των δειγμάτων σας, βεβαιωθείτε ότι κάθε ετικέτα αντιστοιχεί στο μοναδικό γράμμα που σημειώσατε στο προηγούμενο βήμα. Η "Εγγραφή" και η "Ακρόαση" αποτελούν μέρος της βασικής λειτουργικότητας του συστήματος και δεν πρέπει να αλλάξουν. ΜΗΝ αλλάξετε το δεύτερο γράμμα, εκτός εάν αισθάνεστε σίγουροι ότι θα κάνετε μερικές επιπλέον αλλαγές στον κώδικα Arduino, καθώς αλλιώς θα χαλάσει η επικοινωνία με το Arduino/μήτρα.

Βήμα 3.8: Εκτελέστε την κύρια λειτουργία! Ο κώδικας θα συλλέξει τα δεδομένα εκπαίδευσης, θα εξάγει τα βασικά χαρακτηριστικά του, θα τα τροφοδοτήσει, θα δημιουργήσει ένα μοντέλο ταξινόμησης και θα αρχίσει να ακούει για ηχητικά συμβάντα. Όταν το αντιληφθεί, θα δείτε τη μήτρα να αλλάζει σε σύμβολο εγγραφής (τετράγωνο με κύκλο μέσα) και θα τμηματοποιήσει αυτά τα δεδομένα και θα τα τροφοδοτήσει στο μοντέλο. Ό, τι προβλέπει το μοντέλο θα εμφανιστεί λίγα δευτερόλεπτα αργότερα στην οθόνη μήτρας.

Μπορείτε να ακολουθήσετε την έξοδο του κελιού παρακάτω. Δείτε πόσο ακριβές μπορείτε να το πάρετε!

Βήμα 4: Δημιουργία κατοικίας LEGO

Δημιουργία κατοικίας LEGO
Δημιουργία κατοικίας LEGO
Δημιουργία κατοικίας LEGO
Δημιουργία κατοικίας LEGO
Δημιουργία κατοικίας LEGO
Δημιουργία κατοικίας LEGO

Αυτό είναι το διασκεδαστικό μέρος! Έχετε κάνει όλα τα σοβαρά βήματα μηχανικής εκμάθησης και έχετε θέσει σε λειτουργία όλο το σύστημα από άκρο σε άκρο, και τώρα μπορείτε να παίξετε με τα LEGO ως ανταμοιβή. Δεν υπάρχει μεγάλη διαδικασία για λεπτομέρειες εδώ. Προσθέσαμε απλά μπλοκ που μας άρεσαν εδώ και εκεί χωρίς να ανησυχούμε πολύ για το συνολικό σχέδιο και καταλήξαμε ευχαριστημένοι με τον τρόπο που αποδείχθηκε.

Αφήστε τις εικόνες μας να χρησιμεύσουν ως έμπνευση για τη δική σας δημιουργική κατοικία μοναδική για την κουζίνα σας. Τοποθετήσαμε το Arduino και την πλειοψηφία της καλωδίωσης σε μια κοίλη θήκη και στη συνέχεια ασφαλίσαμε την επάνω οθόνη μήτρας με προεξοχές. Προσθέσαμε λίγο χαρτί πάνω από την οθόνη για να διαδώσουμε ελαφρώς το φως, το οποίο αισθανθήκαμε ότι έκανε τα εικονίδια πιο καθαρά.

Συνιστάται: