Cuprins:

Identificator de sunet personalizat în bucătărie: 4 pași
Identificator de sunet personalizat în bucătărie: 4 pași

Video: Identificator de sunet personalizat în bucătărie: 4 pași

Video: Identificator de sunet personalizat în bucătărie: 4 pași
Video: VTech CS6529-4B 4 Handset Cordless Answering System Telephone 2024, Noiembrie
Anonim
Image
Image
Identificator de sunet personalizat pentru bucătărie
Identificator de sunet personalizat pentru bucătărie

Pentru proiectul nostru final într-un curs de sisteme interactive în această primăvară, am creat un sistem în timp real pentru identificarea și vizualizarea sunetelor obișnuite în bucătărie utilizând clasificarea Support-Vector Machine. Sistemul este alcătuit dintr-un laptop pentru eșantionare / clasificare audio și un afișaj Arduino / matrice de puncte pentru vizualizare. Următorul este un ghid pentru crearea propriei versiuni a acestui sistem pentru sunete din propria bucătărie.

Cazul nostru original de utilizare a fost ca un dispozitiv pentru bucătăria unui individ surd și cu deficiențe de auz, dar acest sistem ar putea fi adaptat teoretic pentru a identifica un set de sunete într-o varietate de contexte. Bucătăria a fost un loc ideal pentru a începe, deoarece tinde să fie relativ liniștită și conține o cantitate rezonabilă de sunete simple, distincte.

Un depozit GitHub pentru acest proiect poate fi găsit aici.

Provizii

  • Microcontroler Arduino Leonardo cu anteturi
  • KEYESTUDIO 16x16 Dot Matrix LED Display pentru Arduino
  • Sârmă jumper din pană
  • Cablu micro-USB la USB 2.0
  • Un laptop cu notebook Jupyter (instalare Anaconda)

    Un ghid pentru începători pentru Jupyter Notebook poate fi găsit aici

  • O cantitate substanțială de cărămizi LEGO nepotrivite pentru carcasa sistemului

    (Dar într-adevăr le puteți înlocui cu orice material de construcție DIY pe care l-ați dori!)

Pasul 1: Colectarea probelor de sunet din bucătărie

Colectarea probelor de sunet din bucătărie
Colectarea probelor de sunet din bucătărie

Figura de mai sus: date audio preluate din înregistrarea unei furculițe și a unui cuțit care clincă împreună folosind acest proces de colectare

Pentru a identifica sunetele în timp real, trebuie să furnizăm modelului nostru de învățare automată exemple de calitate pentru comparație. Am creat un notebook Jupyter pentru acest proces, care poate fi accesat aici sau prin depozitul GitHub al proiectului nostru. Depozitul conține, de asemenea, eșantioane de colecții de la două bucătării diferite în scopul testării.

Pasul 1.1: Copiați notebook-ul CollectSamples.ipynb în directorul de lucru Jupyter Notebook și deschideți-l.

Pasul 1.2: Rulați fiecare celulă una câte una, acordând atenție oricăror note pe care le-am furnizat în titluri. Opriți-vă când ajungeți la unul intitulat „Înregistrare mostră”.

NOTĂ: În acest notebook sunt utilizate mai multe biblioteci Python și fiecare necesită instalare înainte de a putea fi importate cu succes în proiect. Puteți face acest lucru manual, deși aici puteți găsi un ghid pentru instalarea bibliotecii în Jupyter Notebook.

Pasul 1.3: Creați un director gol pentru a stoca probele în directorul dvs. de lucru pentru acest proiect.

Pasul 1.4: Editați variabila SAMPLES_LOCATION din celula „Înregistrare mostră” pentru a se potrivi cu locația directorului gol.

Pasul 1.5: Adăugați sau eliminați cât de multe sunete doriți la variabila SOUND_LABELS.

Pentru ca eșantionul de cod de înregistrare să funcționeze, fiecare linie a acestei variabile trebuie separată printr-o virgulă și cu următoarea formă:

„ts”: Sunet („TargetedSound”, „ts”)

Pasul 1.6: Când toate etichetele au fost adăugate, evaluați celula „Înregistrare eșantion” cu începe procesul de colectare a eșantionului. În ieșirea celulei, vi se va solicita să introduceți codul scurt pe care l-ați asociat cu fiecare sunet din etichete (adică „ts” pentru TargetedSound). Nu face asta încă.

Pasul 1.7: Luați laptopul în bucătărie și plasați-l în zona în care ați fi cel mai probabil să plasați sistemul finit. Această locație ar trebui să fie centrală pentru o bună colectare audio și să fie uscată și ferită de orice posibilă deversare pentru a vă proteja electronica.

Pasul 1.8: Pregătiți primul sunet vizat. Dacă acesta este un semnal sonor al temporizatorului cuptorului, s-ar putea să setați temporizatorul la un minut și să așteptați să se numere înapoi până la 20 de secunde înainte de a continua la pasul următor.

Pasul 1.9: Tastați codul etichetei în prompt (adică „ts”) și apăsați Enter / Return.

Sistemul va începe să asculte un eveniment sonor distinct de zgomotul ambiental al camerei. După ce detectați acest eveniment sonor, acesta va începe să înregistreze până când va simți sunetul din cameră să revină la nivelurile ambientale. Apoi va salva sunetul ca fișier WAV pe 16 biți în directorul identificat în SAMPLES_LOCATION în format:

TargetedSound _ # _ caught.wav

# Porțiunea acestui nume de fișier corespunde numărului de eșantioane ale sunetului vizat pe care l-ați colectat. După salvarea fișierului WAV, promptul se va repeta, permițându-vă să colectați mai multe mostre ale aceluiași sunet într-o singură execuție a celulei.

NU modificați acest nume de fișier. Este important pentru următorul pas.

Pasul 1.10: Repetați pașii 1.8 și 1.9 până când ați colectat 5-10 mostre din fiecare sunet.

Pasul 1.11: Introduceți „x” când ați terminat pentru a ieși din execuție.

AVERTISMENT: Nerespectarea ieșirii din celulă în acest mod poate cauza blocarea Notebook-ului. În acest caz, nucleul Notebook trebuie resetat și fiecare celulă rulează din nou de sus.

Pasul 1.11 (Opțional): verificați datele WAV ale fișierelor individuale din celula „Vizualizare rapidă a sunetului” pentru a vă asigura că ați captat toate informațiile dorite.

Niste sfaturi:

  • Înregistrați când bucătăria dvs. este liniștită.
  • Înregistrați un singur sunet simultan. Sistemul nu poate distinge suprapunerea în sunete.
  • Încercați să faceți ca fiecare probă sonoră să fie cât mai consecventă posibil. Acest lucru va ajuta la precizia identificării.
  • Reevaluarea celulei de înregistrare va reseta valoarea # din numele fișierului și va suprascrie orice fișiere existente care se potrivesc cu #. Am găsit cel mai ușor să înregistrăm toate mostrele unui singur sunet simultan, apoi să oprim celula de înregistrare.
  • Dacă sistemul nu preia sunetul vizat, încercați să reduceți valoarea THRESHOLD (setată la 30 pentru a porni) și reevaluați celula.
  • Dacă înregistrarea este declanșată de alte sunete în afara celui vizat, încercați să ridicați valoarea THRESHOLD (setată la 30 pentru a începe) și reevaluați celula.

Pasul 2: Pregătirea afișajului Arduino / Matrix

Pregătirea afișajului Arduino / Matrix
Pregătirea afișajului Arduino / Matrix
Pregătirea afișajului Arduino / Matrix
Pregătirea afișajului Arduino / Matrix
Pregătirea afișajului Arduino / Matrix
Pregătirea afișajului Arduino / Matrix

Apoi, vom configura sistemul de vizualizare folosind un afișaj cu matrice de puncte LED Arduino Leonardo și KEYESTUDIO 16x16. Aceasta este pentru a afișa predicția modelului de clasificare a sunetelor detectate. Ca și până acum, am furnizat toate fișierele necesare atât aici, cât și în depozitul GitHub al proiectului.

Pasul 2.1: Conectați matricea Arduino și LED în conformitate cu diagrama de mai sus. KEYESTUDIO include fire pentru conectarea la matricea lor de puncte, dar vor fi necesare fire jumper pentru a conecta aceste fire la Arduino

Pasul 2.2: Deschideți „arduino_listener.ino” folosind Ardunio IDE și încărcați-l pe Leonardo. Dacă este conectat corect, ar trebui să vedeți pictograma „ascultare” (arată ca Wi-Fi) așa cum se arată în imaginea de mai sus.

Pasul 2.3: Pregătiți pictogramele pe care doriți să le afișați pentru fiecare sunet țintă. Pentru a ști ce LED-uri să se aprindă, pictograma trebuie trimisă de la Arduino la matrice ca matrice de octeți. De exemplu, pictograma ceașcă de cafea (în imaginea de mai sus) este trimisă la matrice în acest format:

{

0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xfx, 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};

Ne-am desenat pictogramele folosind instrumentul online Dot2Pic, cu 16 coloane, 16 rânduri și „monocromatic, 8 pixeli pe octet, setare verticală” selectat din meniul derulant. Al nostru poate fi găsit în matricea „sample_icon_bytes.txt”.

NOTĂ: Pot exista și instrumente online care pot face acest lucru automat cu fișierele încărcate.

Pasul 2.4: Desenați fiecare pictogramă. La finalizarea desenului, selectați „Convertiți în tablou”.

Pasul 2.5: Înlocuiți pictogramele inutile definite în partea de sus a codului „arduino_listening.ino” după cum doriți. Asigurați-vă că adăugați un comentariu care descrie pictograma pentru a vă aminti care este care!

Pasul 2.6: Încărcați noul cod pe Arduino. Nu închideți fișierul încă, vom avea nevoie de el pentru pasul următor.

Pasul 3: Rularea clasificatorului și identificarea sunetelor

Rularea clasificatorului și identificarea sunetelor
Rularea clasificatorului și identificarea sunetelor
Rularea clasificatorului și identificarea sunetelor
Rularea clasificatorului și identificarea sunetelor

Acum este timpul să punem sistemul împreună. Conducta de clasificare, comunicarea Arduino și captura audio live se realizează printr-un singur notebook Arduino, care a fost furnizat aici sau poate fi accesat prin depozitul GitHub al proiectului nostru.

Pasul 3.1: Copiați blocnotesul FullPipeline.ipynb în directorul de lucru Jupyter Notebook și deschideți-l.

Pasul 3.2: Rulați fiecare celulă una câte una, acordând atenție oricăror note pe care le-am furnizat în titluri. Nu se așteaptă nicio ieșire. Opriți-vă când ajungeți la celula intitulată „Încărcați datele de antrenament”.

Pasul 3.3: Editați variabila SAMPLES_LOCATION_ROOT din celula „Încărcați datele de instruire” în directorul părinte al locației dvs. anterioare de eșantion. Apoi, modificați variabila SAMPLES_DIR_NAME cu numele directorului dvs. Deci, dacă ați fi stabilit locația din CollectSamples.ipynb la:

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

Acum veți seta aceste variabile la:

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

Am făcut acest lucru pentru a permite modificări rapide ale clasificatorului în caz de inexactitate. Puteți comuta între diferite colecții de eșantioane pentru a vă regla datele.

Pasul 3.4: Evaluează celula. Ar trebui să vedeți fiecare colecție încărcată cu succes.

Pasul 3.5: continuați să rulați fiecare celulă una câte una, acordând atenție oricăror note pe care le-am furnizat în titluri.

Pasul 3.6: Opriți-vă când ajungeți la celula „Messaging Arduino”. Definiți portul serial pe care îl va utiliza computerul dvs. pentru comunicarea cu Arduino în variabila PORT_DEF. Acest lucru poate fi găsit în IDE-ul Arduino și accesând Instrumente> Port.

Mai multe informații găsiți aici.

Pasul 3.8: redeschideți ID-ul Arduino. În locurile în care ați modificat pictogramele, notați litera de lângă valoarea matricei, dar NU o modificați. În exemplul de mai jos, acesta este „g”.

// gunoi eliminareconst semnat char g [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};

Pasul 3.7: (Revenind la celula „Messaging Arduino” din Notebook) Schimbați etichetele din dicționarul self.sounds pentru a se potrivi cu etichetele pe care le-ați utilizat la înregistrarea mostrelor, asigurându-vă că fiecare etichetă corespunde cu litera pe care ați notat-o în versiunea anterioară. Etapa. „Înregistrare” și „Ascultare” fac parte din funcționalitatea de bază a sistemului și nu ar trebui modificate. NU schimbați a doua literă decât dacă vă simțiți încrezător în a face câteva modificări suplimentare și la codul Arduino, deoarece altfel va deranja comunicarea cu Arduino / matrix.

Pasul 3.8: Rulați funcția principală! Codul va prelua datele de antrenament, va extrage caracteristicile sale cheie, le va introduce în conductă, va construi un model de clasificare, apoi va începe să asculte evenimente sonore. Când detectează unul, veți vedea matricea schimbându-se într-un simbol de înregistrare (pătrat cu cerc în interior) și va segmenta aceste date și le va introduce în model. Orice model prezice va apărea câteva secunde mai târziu pe afișajul matricial.

Puteți urmări rezultatul celulei de mai jos. Vedeți cât de precis o puteți obține!

Pasul 4: Crearea unei locuințe LEGO

Crearea unei locuințe LEGO
Crearea unei locuințe LEGO
Crearea unei locuințe LEGO
Crearea unei locuințe LEGO
Crearea unei locuințe LEGO
Crearea unei locuințe LEGO

Aceasta este partea distractivă! Ați făcut toți pașii serioși de învățare automată și ați pus în funcțiune întregul sistem end-to-end, iar acum puteți juca cu LEGO-uri ca recompensă. Aici nu există prea multe detalii. Tocmai am adăugat blocuri care ne-au plăcut ici și colo, fără a ne îngrijora prea mult de designul general și am ajuns să fim mulțumiți de felul în care a ieșit.

Permiteți imaginilor noastre să servească drept inspirație pentru propria dvs. carcasă creativă, unică bucătăriei dvs. Am plasat Arduino și majoritatea cablajelor într-o carcasă goală, apoi am securizat afișajul matricei de deasupra cu consolă. Am adăugat un pic de hârtie peste afișaj pentru a difuza ușor lumina, pe care am simțit-o că a făcut iconițele mai clare.

Recomandat: