Tabla de contenido:

Identificador de sonido de cocina personalizado: 4 pasos
Identificador de sonido de cocina personalizado: 4 pasos

Video: Identificador de sonido de cocina personalizado: 4 pasos

Video: Identificador de sonido de cocina personalizado: 4 pasos
Video: FABRICANDO CAJA ACUSTICA DE 4 ALTAVOCES MID BASS 2024, Noviembre
Anonim
Image
Image
Identificador de sonido de cocina personalizado
Identificador de sonido de cocina personalizado

Para nuestro proyecto final en un curso de sistemas interactivos esta primavera, creamos un sistema en tiempo real para identificar y visualizar sonidos comunes en la cocina usando la clasificación de máquinas de vectores de soporte. El sistema está compuesto por una computadora portátil para muestreo / clasificación de audio y una pantalla Arduino / matriz de puntos para visualización. La siguiente es una guía para crear su propia versión de este sistema para sonidos de su propia cocina.

Nuestro caso de uso original fue como un dispositivo para la cocina de una persona sorda y con problemas de audición, pero este sistema podría teóricamente adaptarse para identificar un conjunto de sonidos en una variedad de contextos. La cocina era un lugar ideal para comenzar, ya que tiende a ser relativamente silencioso y contiene una cantidad razonable de sonidos simples y distintos.

Puede encontrar un repositorio de GitHub para este proyecto aquí.

Suministros

  • Microcontrolador Arduino Leonardo con encabezados
  • Pantalla LED de matriz de puntos KEYESTUDIO 16x16 para Arduino
  • Cable de puente de tablero
  • Cable micro-USB a USB 2.0
  • Una computadora portátil con Jupyter Notebook (instalación de Anaconda)

    Puede encontrar una guía para principiantes de Jupyter Notebook aquí

  • Una cantidad sustancial de ladrillos LEGO no coincidentes para la carcasa del sistema.

    (¡Pero realmente puede sustituirlos con cualquier material de construcción de bricolaje que desee!)

Paso 1: recopilación de muestras de sonido de la cocina

Recolección de muestras de sonido de cocina
Recolección de muestras de sonido de cocina

Figura de arriba: datos de audio tomados de la grabación de un tenedor y un cuchillo tintineando juntos utilizando este proceso de recopilación

Para identificar sonidos en tiempo real, necesitamos proporcionar a nuestro modelo de aprendizaje automático ejemplos de calidad para comparar. Creamos un cuaderno Jupyter para este proceso, al que se puede acceder aquí oa través del repositorio GitHub de nuestro proyecto. El repositorio también contiene colecciones de muestra de dos cocinas diferentes con fines de prueba.

Paso 1.1: Copie el cuaderno CollectSamples.ipynb en su directorio de trabajo de Jupyter Notebook y ábralo.

Paso 1.2: Ejecute cada celda una por una, prestando atención a las notas que hemos proporcionado en los títulos. Deténgase cuando llegue a uno titulado "Grabación de muestra".

NOTA: En este cuaderno se utilizan varias bibliotecas de Python y cada una requiere instalación antes de que se puedan importar correctamente al proyecto. Puede hacerlo manualmente, aunque puede encontrar una guía para la instalación de la biblioteca dentro de Jupyter Notebook aquí.

Paso 1.3: Cree un directorio vacío para almacenar sus muestras dentro de su directorio de trabajo para este proyecto.

Paso 1.4: Edite la variable SAMPLES_LOCATION en la celda "Sample Recording" para que coincida con la ubicación de su directorio vacío.

Paso 1.5: agregue o elimine tantos sonidos como desee a la variable SOUND_LABELS.

Para que funcione el código de grabación de muestra, cada línea de esta variable debe estar separada por una coma y de la siguiente forma:

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

Paso 1.6: Cuando se hayan agregado todas las etiquetas, la evaluación de la celda "Registro de muestras" comenzará el proceso de recolección de muestras. En la salida de la celda, se le pedirá que ingrese el código corto que asoció con cada sonido en las etiquetas (es decir, "ts" para TargetedSound). No hagas esto todavía.

Paso 1.7: Lleve su computadora portátil a la cocina y colóquela en el área donde es más probable que coloque el sistema terminado. Esta ubicación debe ser central para una buena colección de audio, seca y lejos de posibles derrames para proteger sus dispositivos electrónicos.

Paso 1.8: Prepare su primer sonido objetivo. Si se trata de un pitido del temporizador del horno, puede configurar el temporizador en un minuto y esperar a que cuente hasta 20 segundos más o menos antes de continuar con el siguiente paso.

Paso 1.9: Escriba el código de la etiqueta en el indicador (es decir, "ts") y presione Intro / Retorno.

El sistema comenzará a escuchar un evento de sonido distinto del ruido ambiental de la habitación. Al detectar este evento de sonido, comenzará a grabar hasta que detecte que el sonido en la habitación ha regresado a los niveles ambientales. Luego guardará el audio como un archivo WAV de 16 bits en el directorio identificado en SAMPLES_LOCATION en el formato:

TargetedSound _ # _ capture.wav

La porción # de este nombre de archivo corresponde al número de muestras del sonido de destino que ha recopilado. Una vez guardado el archivo WAV, el mensaje se repetirá, lo que le permitirá recopilar varias muestras del mismo sonido en una sola ejecución de la celda.

NO cambie este nombre de archivo. Es importante para el siguiente paso.

Paso 1.10: Repita los pasos 1.8 y 1.9 hasta que haya recopilado de 5 a 10 muestras de cada sonido.

Paso 1.11: Ingrese "x" cuando termine para salir de la ejecución.

ADVERTENCIA: Si no sale de la celda de esta manera, el portátil puede bloquearse. En este caso, el kernel de Notebook debe reiniciarse y cada celda debe ejecutarse nuevamente desde la parte superior.

Paso 1.11 (Opcional): Verifique los datos WAV de los archivos individuales en la celda "Visualización rápida de sonido" para asegurarse de haber capturado toda la información deseada.

Algunos consejos:

  • Grabe cuando su cocina esté en silencio.
  • Grabe solo un sonido a la vez. El sistema no puede distinguir la superposición de sonidos.
  • Trate de hacer que cada prueba de sonido sea lo más consistente posible. Esto ayudará a la precisión de la identificación.
  • Reevaluar la celda de Grabación restablecerá el valor # en el nombre del archivo y sobrescribirá cualquier archivo existente que coincida con ese #. Descubrimos que es más fácil grabar todas las muestras de un sonido a la vez y luego detener la celda de grabación.
  • Si el sistema no capta el sonido deseado, intente bajar el valor UMBRAL (establecido en 30 para comenzar) y reevalúe la celda.
  • Si la grabación se activa por otros sonidos fuera del objetivo, intente aumentar el valor UMBRAL (establecido en 30 para comenzar) y reevalúe la celda.

Paso 2: preparación de la pantalla Arduino / Matrix

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

A continuación, configuraremos el sistema de visualización utilizando una pantalla de matriz de puntos LED Arduino Leonardo y KEYESTUDIO 16x16. Esto es para generar la predicción del modelo de clasificación de los sonidos detectados. Como antes, hemos proporcionado todos los archivos necesarios tanto aquí como en el repositorio de GitHub del proyecto.

Paso 2.1: Conecte el Arduino y la matriz de LED de acuerdo con el diagrama anterior. KEYESTUDIO incluye cables para conectarse a su matriz de puntos, pero se necesitarán cables de puente de tablero para conectar estos cables al Arduino

Paso 2.2: Abra "arduino_listener.ino" usando el IDE de Ardunio y cárguelo en Leonardo. Si está conectado correctamente, debería ver el icono de "escucha" (parece Wi-Fi) como se muestra en la imagen de arriba.

Paso 2.3: Prepare los iconos que le gustaría mostrar para cada uno de sus sonidos objetivo. Para saber qué LED se encienden, el icono debe enviarse desde Arduino a la matriz como una matriz de bytes. Por ejemplo, nuestro icono de taza de café (en la imagen de arriba) se envía a la matriz en este formato:

{

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

Dibujamos nuestros íconos usando la herramienta en línea Dot2Pic, con 16 columnas, 16 filas y "monocromático, 8 píxeles por byte, configuración vertical" seleccionado en el menú desplegable. El nuestro se puede encontrar en la matriz "sample_icon_bytes.txt".

NOTA: También puede haber herramientas en línea que pueden hacer esto automáticamente con los archivos cargados.

Paso 2.4: Dibuja cada ícono. Cuando termine de dibujar, seleccione "Convertir a la matriz".

Paso 2.5: Reemplace los iconos innecesarios definidos en la parte superior del código "arduino_listening.ino" como desee. ¡Asegúrese de agregar un comentario que describa el ícono para recordar cuál es cuál!

Paso 2.6: Cargue el nuevo código en Arduino. No cierre el archivo todavía, lo necesitaremos para el siguiente paso.

Paso 3: ejecutar el clasificador e identificar sonidos

Ejecución del clasificador e identificación de sonidos
Ejecución del clasificador e identificación de sonidos
Ejecución del clasificador e identificación de sonidos
Ejecución del clasificador e identificación de sonidos

Ahora es el momento de armar el sistema. La canalización de clasificación, la comunicación Arduino y la captura de audio en vivo se realizan a través de un solo portátil Arduino, que se ha proporcionado aquí o se puede acceder a través del repositorio GitHub de nuestro proyecto.

Paso 3.1: Copie el cuaderno FullPipeline.ipynb en su directorio de trabajo de Jupyter Notebook y ábralo.

Paso 3.2: Ejecute cada celda una por una, prestando atención a las notas que hemos proporcionado en los títulos. No se espera ningún resultado. Deténgase cuando llegue a la celda titulada "Cargar los datos de entrenamiento".

Paso 3.3: Edite la variable SAMPLES_LOCATION_ROOT en la celda "Cargar los datos de entrenamiento" en el directorio principal de la ubicación del directorio de muestra anterior. Luego, cambie la variable SAMPLES_DIR_NAME por el nombre de su directorio. Entonces, si hubiera establecido la ubicación en CollectSamples.ipynb en:

SAMPLES_LOCATION = "/ Usuarios / xxxx / Documentos / KitchenSoundClassifier / MySamples / NewDir"

Ahora establecería estas variables en:

SAMPLES_LOCATION_ROOT = "/ Usuarios / xxxx / Documentos / KitchenSoundClassifier / MySamples /" SAMPLES_DIR_NAME = "NewDir"

Hicimos que esto permitiera cambios rápidos en el clasificador en casos de inexactitud. Puede cambiar entre diferentes colecciones de muestras para ajustar sus datos.

Paso 3.4: Evaluar la celda. Debería ver cada colección cargada correctamente.

Paso 3.5: Continúe ejecutando cada celda una por una, prestando atención a las notas que hayamos proporcionado en los títulos.

Paso 3.6: Deténgase cuando llegue a la celda "Messaging Arduino". Defina el puerto serie que utilizará su computadora para comunicarse con Arduino en la variable PORT_DEF. Esto se puede encontrar en el IDE de Arduino y en Herramientas> Puerto.

Puede encontrar más información aquí.

Paso 3.8: Vuelva a abrir su IDE de Arduino. En los lugares donde realizó cambios en los íconos, tome nota de la letra junto al valor de la matriz, pero NO la cambie. En el ejemplo siguiente, es "g".

// eliminación de basuraconst 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,};

Paso 3.7: (Regresando a la celda "Messaging Arduino" del Notebook) Cambie las etiquetas en el diccionario self.sounds para que coincidan con las etiquetas que utilizó al grabar sus muestras, asegurándose de que cada etiqueta corresponda a la única letra que anotó en el anterior. paso. "Grabar" y "Escuchar" son parte de la funcionalidad principal del sistema y no deben cambiarse. NO cambie la segunda letra a menos que se sienta seguro de hacer algunos cambios adicionales en el código Arduino, ya que de lo contrario estropeará la comunicación con Arduino / matrix.

Paso 3.8: ¡Ejecute la función principal! El código tomará los datos de entrenamiento, extraerá sus características clave, las incorporará a la canalización, construirá un modelo de clasificación y luego comenzará a escuchar eventos de sonido. Cuando detecte uno, verá que la matriz cambia a un símbolo de grabación (un cuadrado con un círculo en el interior) y segmentará estos datos y los introducirá en el modelo. Cualquier cosa que prediga el modelo aparecerá unos segundos más tarde en la pantalla de matriz.

Puede seguir el resultado de la celda a continuación. ¡Vea cuán preciso puede obtenerlo!

Paso 4: Creación de una carcasa LEGO

Creación de una carcasa LEGO
Creación de una carcasa LEGO
Creación de una carcasa LEGO
Creación de una carcasa LEGO
Creación de una carcasa LEGO
Creación de una carcasa LEGO

¡Esta es la parte divertida! Ha realizado todos los pasos serios del aprendizaje automático y tiene todo el sistema de un extremo a otro en funcionamiento, y ahora puede jugar con LEGO como recompensa. No hay mucho proceso para detallar aquí. Simplemente agregamos bloques que nos gustaron aquí y allá sin preocuparnos demasiado por el diseño general, y terminamos contentos con la forma en que resultó.

Permita que nuestras imágenes le sirvan de inspiración para su propia vivienda creativa única para su cocina. Colocamos el Arduino y la mayoría del cableado en una caja hueca, luego aseguramos la pantalla de matriz de arriba con voladizos. Agregamos un poco de papel sobre la pantalla para difuminar ligeramente la luz, lo que sentimos que aclaraba los íconos.

Recomendado: