Taula de continguts:

Identificador personalitzat de so de cuina: 4 passos
Identificador personalitzat de so de cuina: 4 passos

Vídeo: Identificador personalitzat de so de cuina: 4 passos

Vídeo: Identificador personalitzat de so de cuina: 4 passos
Vídeo: Беслан. Помни / Beslan. Remember (english & español subs) 2024, De novembre
Anonim
Image
Image
Identificador de so de cuina personalitzat
Identificador de so de cuina personalitzat

Per al nostre projecte final en un curs de sistemes interactius aquesta primavera, vam crear un sistema en temps real per identificar i visualitzar sons comuns a la cuina mitjançant la classificació de la màquina de suport vectorial. El sistema està format per un ordinador portàtil per al mostreig / classificació d’àudio i una pantalla Arduino / matriu de punts per a la visualització. A continuació es mostra una guia per crear la vostra pròpia versió d’aquest sistema per a sons de la vostra cuina.

El nostre cas d'ús original era com a dispositiu per a la cuina d'un individu sord i amb dificultats auditives, però aquest sistema teòricament es podria adaptar per identificar un conjunt de sons en diversos contextos. La cuina era un lloc ideal per començar, ja que sol ser relativament tranquil·la i conté una quantitat raonable de sons senzills i diferents.

Aquí es pot trobar un dipòsit GitHub per a aquest projecte.

Subministraments

  • Microcontrolador Leonardo Arduino amb capçaleres
  • KEYESTUDIO Pantalla LED de matriu de 16x16 punts per Arduino
  • Filferro pont de tauler de pa
  • Cable micro-USB a USB 2.0
  • Un portàtil amb portàtil Jupyter (instal·lació Anaconda)

    Aquí es pot trobar una guia per a principiants de Jupyter Notebook

  • Una quantitat substancial de maons LEGO no coincidents per a l'habitatge del sistema

    (Però realment podeu substituir-los per qualsevol material de construcció de bricolatge que vulgueu!)

Pas 1: recollida de mostres de so de la cuina

Recollida de mostres de so de la cuina
Recollida de mostres de so de la cuina

Figura a la part superior: dades d'àudio extretes de la gravació d'una forquilla i un ganivet que fan xocar amb aquest procés de recollida

Per tal d’identificar sons en temps real, hem de subministrar al nostre model d’aprenentatge automàtic exemples de qualitat per a la comparació. Hem creat un bloc de notes Jupyter per a aquest procés, al qual es pot accedir aquí o a través del dipòsit GitHub del nostre projecte. El dipòsit també conté col·leccions de mostres de dues cuines diferents amb finalitats de prova.

Pas 1.1: Copieu el bloc de notes CollectSamples.ipynb al directori Jupyter Notebook que treballeu i obriu-lo.

Pas 1.2: executeu cada cel·la una per una, prestant atenció a les notes que hem proporcionat als encapçalaments. Atureu-vos quan arribeu a un títol "Enregistrament de mostra".

NOTA: S'utilitzen diverses biblioteques Python en aquest bloc de notes i cadascuna requereix una instal·lació per poder importar-les amb èxit al projecte. Podeu fer-ho manualment, tot i que aquí es pot trobar una guia per a la instal·lació de la biblioteca a Jupyter Notebook.

Pas 1.3: creeu un directori buit per emmagatzemar les vostres mostres al directori de treball per a aquest projecte.

Pas 1.4: Editeu la variable SAMPLES_LOCATION a la cel·la "Enregistrament de mostra" perquè coincideixi amb la ubicació del directori buit.

Pas 1.5: afegiu o elimineu tants sons com vulgueu a la variable SOUND_LABELS.

Per tal que el codi de registre de mostra funcioni, cada línia d'aquesta variable ha d'estar separada per una coma i de la forma següent:

'ts': so ("TargetedSound", "ts")

Pas 1.6: quan s'hagin afegit totes les etiquetes, avalueu la cel·la "Gravació de mostres" i inicieu el procés de recollida de mostres. A la sortida de la cel·la, se us demanarà que introduïu el codi curt que heu associat a cada so a les etiquetes (és a dir, "ts" per a TargetedSound). Encara no ho feu.

Pas 1.7: porteu el portàtil a la cuina i col·loqueu-lo a la zona on més probablement col·loqueu el sistema acabat. Aquesta ubicació hauria de ser central per a una bona recollida d’àudio i seca i allunyada de qualsevol possible vessament per protegir l’electrònica.

Pas 1.8: prepareu el primer so dirigit. Si es tracta d'un timbre del forn del temporitzador, podeu configurar el temporitzador a un minut i esperar que es comptabilitzi fins a 20 segons aproximadament abans de continuar amb el següent pas.

Pas 1.9: escriviu el codi de l'etiqueta al missatge (és a dir, "ts") i premeu Retorn / Retorn.

El sistema començarà a escoltar un esdeveniment sonor diferent del soroll ambiental de la sala. En detectar aquest esdeveniment sonor, començarà a gravar fins que detecti que el so a la sala ha tornat als nivells ambientals. A continuació, desarà l'àudio com a fitxer WAV de 16 bits al directori identificat a SAMPLES_LOCATION en el format següent:

TargetedSound _ # _ caught.wav

La porció # d'aquest nom de fitxer correspon al nombre de mostres del so objectiu que heu recollit. Després de desar el fitxer WAV, la sol·licitud es repetirà i us permetrà recollir diverses mostres del mateix so en una sola execució de la cel·la.

NO canvieu aquest nom de fitxer. És important per al següent pas.

Pas 1.10: Repetiu els passos 1.8 i 1.9 fins que hagueu recollit de 5 a 10 mostres de cada so.

Pas 1.11: introduïu "x" quan hàgiu acabat per sortir de l'execució.

ADVERTÈNCIA: El fet de no sortir de la cel·la d'aquesta manera pot provocar un bloqueig del bloc de notes. En aquest cas, el nucli del bloc de notes s'ha de restablir i cada cel·la es torna a executar des de la part superior.

Pas 1.11 (opcional): comproveu les dades WAV de fitxers individuals a la cel·la "Visualització ràpida del so" per assegurar-vos que heu capturat tota la informació desitjada.

Alguns consells:

  • Grava quan la teva cuina està tranquil·la.
  • Enregistreu només un so alhora. El sistema no pot distingir la superposició de sons.
  • Intenteu que cada prova de so sigui el més coherent possible. Això ajudarà a la precisió de la identificació.
  • En tornar a avaluar la cel·la de gravació, es restablirà el valor # al nom del fitxer i se sobreescriuran els fitxers existents que coincideixin amb aquest #. Ens ha semblat més fàcil enregistrar totes les mostres d’un so alhora i aturar la cel·la de gravació.
  • Si el sistema no detecta el so objectiu, proveu de baixar el valor THRESHOLD (definit a 30 per iniciar) i torneu a avaluar la cel·la.
  • Si la gravació la desencadenen altres sons fora de l’orientat, proveu d’augmentar el valor THRESHOLD (establert a 30 per iniciar) i revaloreu la cel·la.

Pas 2: Preparació de la pantalla Arduino / Matrix

Preparació de la pantalla Arduino / Matrix
Preparació de la pantalla Arduino / Matrix
Preparació de la pantalla Arduino / Matrix
Preparació de la pantalla Arduino / Matrix
Preparació de la pantalla Arduino / Matrix
Preparació de la pantalla Arduino / Matrix

A continuació, configurarem el sistema de visualització mitjançant una pantalla de matriu de punts LED Arduino Leonardo i KEYESTUDIO 16x16 LED. Es tracta de generar la predicció del model de classificació dels sons detectats. Com abans, hem proporcionat tots els fitxers necessaris tant aquí com al dipòsit GitHub del projecte.

Pas 2.1: Connecteu la matriu Arduino i LED segons el diagrama anterior. KEYESTUDIO inclou cables per connectar-se a la seva matriu de punts, però caldrà fer cables jumper per connectar aquests cables a l'Arduino

Pas 2.2: obriu "arduino_listener.ino" mitjançant l'IDE Ardunio i pengeu-lo al Leonardo. Si es connecta correctament, hauríeu de veure la icona "escolta" (sembla Wi-Fi) tal com es mostra a la imatge superior.

Pas 2.3: prepareu les icones que vulgueu mostrar per a cadascun dels sons objectius. Per saber quins LED s’encenen, la icona s’ha d’enviar des de l’Arduino a la matriu com a matriu de bytes. Per exemple, la nostra icona de tassa de cafè (a la imatge superior) s’envia a la matriu en aquest 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};

Hem dibuixat les nostres icones mitjançant l'eina en línia Dot2Pic, amb 16 columnes, 16 files i "monocromàtic, 8 píxels per byte, configuració vertical" seleccionat al menú desplegable. Els nostres es poden trobar a la matriu "sample_icon_bytes.txt".

NOTA: També pot haver-hi eines en línia que puguin fer-ho automàticament amb fitxers penjats.

Pas 2.4: dibuixeu cada icona. Quan hàgiu acabat de dibuixar, seleccioneu "Converteix a la matriu".

Pas 2.5: substituïu les icones innecessàries definides a la part superior del codi "arduino_listening.ino" segons vulgueu. Afegiu un comentari que descrigui la icona per recordar quin és quin.

Pas 2.6: pengeu el nou codi a l'Arduino. Encara no tanqueu el fitxer, el necessitarem per al següent pas.

Pas 3: Execució del classificador i identificació de sons

Execució del classificador i identificació de sons
Execució del classificador i identificació de sons
Execució del classificador i identificació de sons
Execució del classificador i identificació de sons

Ara toca unir el sistema. La canalització de classificació, la comunicació Arduino i la captura d'àudio en directe es fan a través d'un únic bloc de notes Arduino, que s'ha proporcionat aquí o es pot accedir a través del dipòsit GitHub del nostre projecte.

Pas 3.1: copieu el bloc de notes FullPipeline.ipynb al directori Jupyter Notebook en funcionament i obriu-lo.

Pas 3.2: executeu cada cel·la una per una, prestant atenció a les notes que hem proporcionat als encapçalaments. No s’espera cap sortida. Atureu-vos quan arribeu a la cel·la titulada "Carrega les dades de formació".

Pas 3.3: Editeu la variable SAMPLES_LOCATION_ROOT a la cel·la "Carrega les dades de formació" al directori pare de la ubicació del directori de mostra anterior. A continuació, canvieu la variable SAMPLES_DIR_NAME pel nom del vostre directori. Per tant, si hagueu definit la ubicació a CollectSamples.ipynb a:

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

Ara definiríeu aquestes variables en:

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

Vam fer això per permetre canvis ràpids al classificador en casos d’inexactitud. Podeu canviar entre diferents col·leccions de mostres per afinar les vostres dades.

Pas 3.4: avaluar la cel·la. Hauríeu de veure cada col·lecció carregada amb èxit.

Pas 3.5: continueu executant cada cel·la una per una, prestant atenció a les notes que hem proporcionat als encapçalaments.

Pas 3.6: atureu-vos quan arribeu a la cel·la "Arduino de missatgeria". Definiu el port sèrie que utilitzarà l'ordinador per a la comunicació amb l'Arduino a la variable PORT_DEF. Es pot trobar a l’IDE Arduino i a Eines> Port.

Podeu trobar més informació aquí.

Pas 3.8: torneu a obrir el vostre ID Arduino. Als llocs on heu fet canvis a les icones, anoteu la lletra al costat del valor de la matriu, però NO la canvieu. A l'exemple següent, es tracta de "g".

// garbage dispositionconst unsigned 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,};

Pas 3.7: (Tornant a la cel·la "Messaging Arduino" del bloc de notes) Canvieu les etiquetes del diccionari self.sounds perquè coincideixin amb les etiquetes que heu utilitzat per gravar les mostres, assegurant-vos que cada etiqueta correspon a la lletra única que heu assenyalat a l'anterior. pas. "Enregistrament" i "Escolta" formen part de la funcionalitat bàsica del sistema i no s'han de canviar. NO canvieu la segona lletra a menys que tingueu confiança en fer alguns canvis addicionals al codi Arduino, ja que en cas contrari dificultarà la comunicació amb l'Arduino / matrix.

Pas 3.8: executeu la funció principal. El codi agafarà les dades de l'entrenament, n'extreurà les funcions clau, les introduirà a la canonada, construirà un model de classificació i, a continuació, començarà a escoltar els esdeveniments sonors. Quan en detecti un, veureu que la matriu canvia a un símbol de gravació (quadrat amb cercle a dins) i segmentarà aquestes dades i les introduirà al model. Tot el que prediu el model apareixerà uns segons més tard a la pantalla de matriu.

Podeu seguir la sortida de la cel·la a continuació. Mireu la precisió que podeu aconseguir.

Pas 4: Creació d'un habitatge LEGO

Creació d’un habitatge LEGO
Creació d’un habitatge LEGO
Creació d’un habitatge LEGO
Creació d’un habitatge LEGO
Creació d’un habitatge LEGO
Creació d’un habitatge LEGO

Aquesta és la part divertida! Heu fet tots els passos seriosos d’aprenentatge automàtic i heu posat en funcionament tot el sistema de punta a punta i ara podeu jugar amb els LEGO com a recompensa. No hi ha gaire procés per detallar aquí. Acabem d’afegir blocs que ens agradaven d’aquí i d’allà sense preocupar-nos massa pel disseny general, i vam acabar contents amb la manera com va resultar.

Permetre que les nostres imatges serveixin d’inspiració per al vostre propi habitatge creatiu únic per a la vostra cuina. Vam col·locar l'Arduino i la majoria del cablejat en una caixa buida i, a continuació, vam assegurar la pantalla matricial superior amb voladissos. Vam afegir una mica de paper a la pantalla per difondre lleugerament la llum que vam sentir que feia més clares les icones.

Recomanat: