Tabla de contenido:
- Suministros
- Paso 1: recopilación de muestras de sonido de la cocina
- Paso 2: preparación de la pantalla Arduino / Matrix
- Paso 3: ejecutar el clasificador e identificar sonidos
- Paso 4: Creación de una carcasa LEGO
Video: Identificador de sonido de cocina personalizado: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
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
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
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
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
¡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:
Cronómetro De Cocina. Árbol de la vida: 4 pasos
Cronómetro De Cocina. Árbol de la vida: El cronómetro de cocina es una herramienta que permite al estudiante realizar varias tareas sin perder la atención de los tiempos de la cocina. Funciona como un cronómetro midiendo intervalos de 10 min, cada lapso de tiempo s
Temporizador de cocina: 4 pasos
Temporizador de cocina: presenta gen4-uLCD-35DT que se utilizará como pantalla secundaria para un proyecto de Raspberry Pi, el temporizador de cocina. Es una aplicación útil para la mayoría de las madres y entusiastas de la cocina que se pueden utilizar para controlar el tiempo al cocinar
GRÚA DE REVOLVER DE COCINA: 4 Pasos
GRÚA REVUELTA DE COCINA: Saludos a todos, soy un entusiasta de la comida y me encantan las sopas calientes, la salsa, las natillas y más, pero para eso, mi esposa o yo pasamos mucho tiempo revolviendo o batiendo durante horas. Quería tomarlo como un desafío, hacer un diseño rentable, que es scal
Reemplazo de los LED tenues de la campana de cocina: 4 pasos
Reemplazo de los LED tenues de la campana de cocina: Cuando remodelamos nuestra casa, la cocina fue diseñada como nuestra pieza central. Disfrutamos tener compañía y nuestra cocina siempre terminaba siendo el lugar donde todos pasaban el rato. Estoy seguro de que muchas personas pueden identificarse. Siendo que soy el cocinero de la familia
Báscula de cocina Arduino: 6 pasos (con imágenes)
Báscula de cocina Arduino: en este proyecto, le mostraré cómo construir una báscula de cocina simple con un gabinete impreso en 3D personalizado