Оглавление:
- Запасы
- Шаг 1. Сбор образцов звуков кухни
- Шаг 2: Подготовка дисплея Arduino / Matrix
- Шаг 3. Запуск классификатора и определение звуков
- Шаг 4: Создание корпуса LEGO
Видео: Индивидуальный звуковой идентификатор кухни: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Для нашего последнего проекта в курсе интерактивных систем этой весной мы создали систему в реальном времени для идентификации и визуализации обычных звуков на кухне с использованием классификации машин опорных векторов. Система состоит из портативного компьютера для дискретизации / классификации звука и матричного дисплея Arduino для визуализации. Ниже приводится руководство по созданию собственной версии этой системы для звуков с собственной кухни.
Наш первоначальный вариант использования был в качестве устройства для кухни глухого и слабослышащего человека, но эту систему теоретически можно было адаптировать для идентификации набора звуков в различных контекстах. Кухня была идеальным местом для начала, поскольку она обычно относительно тихая и содержит разумное количество простых, отчетливых звуков.
Репозиторий GitHub для этого проекта можно найти здесь.
Запасы
- Микроконтроллер Arduino Leonardo с заголовками
- KEYESTUDIO 16x16 матричный светодиодный экран для Arduino
- Проволочная перемычка макетной платы
- Кабель Micro-USB - USB 2.0
-
Ноутбук с Jupyter Notebook (установка Anaconda)
Руководство для начинающих по Jupyter Notebook можно найти здесь
-
Значительное количество несоответствующих кубиков LEGO для корпуса системы
(Но на самом деле вы можете заменить их любым строительным материалом, который вам нравится!)
Шаг 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': звук ("TargetedSound", "ts")
Шаг 1.6: Когда все метки добавлены, оценка ячейки «Запись пробы» запускает процесс сбора пробы. В выходных данных ячейки вам будет предложено ввести сокращенный код, который вы связали с каждым звуком в метках (например, «ts» для TargetedSound). Пока не делай этого.
Шаг 1.7: Отнесите ноутбук на кухню и поместите его там, где вы, скорее всего, разместите готовую систему. Это место должно быть центральным для хорошей аудиоколлекции, сухим и удаленным от любых возможных утечек, чтобы защитить вашу электронику.
Шаг 1.8: Подготовьте свой первый целевой звук. Если это звуковой сигнал таймера духовки, вы можете установить таймер на одну минуту и подождать, пока он обратится до 20 секунд или около того, прежде чем переходить к следующему шагу.
Шаг 1.9: Введите код метки в приглашение (например, «ts») и нажмите Enter / Return.
Система начнет прослушивать звуковое событие, отличное от окружающего шума в комнате. Обнаружив это звуковое событие, он начнет запись до тех пор, пока не почувствует, что звук в комнате вернулся к окружающему уровню. Затем он сохранит звук в виде 16-битного файла WAV в каталоге, указанном в SAMPLES_LOCATION, в формате:
TargetedSound _ # _ захвачено.wav
Часть # этого файла соответствует количеству собранных вами сэмплов целевого звука. После сохранения файла WAV запрос повторится, что позволит вам собрать несколько сэмплов одного и того же звука за одно выполнение ячейки.
НЕ меняйте это имя файла. Это важно для следующего шага.
Шаг 1.10: Повторите шаги 1.8 и 1.9, пока не соберете 5-10 сэмплов каждого звука.
Шаг 1.11: Введите «x», когда закончите, чтобы выйти из выполнения.
ВНИМАНИЕ: Если не выйти из ячейки таким способом, это может привести к сбою ноутбука. В этом случае ядро Notebook должно быть сброшено, и каждая ячейка запускается заново сверху.
Шаг 1.11 (необязательно): проверьте данные WAV отдельных файлов в ячейке «Быстрая визуализация звука», чтобы убедиться, что вы собрали всю необходимую информацию.
Несколько советов:
- Записывайте, когда на вашей кухне тихо.
- Записывайте только один звук за раз. Система не может различать наложения звуков.
- Постарайтесь сделать каждую пробу звука максимально последовательной. Это повысит точность идентификации.
- Повторная оценка ячейки записи сбросит значение # в имени файла и перезапишет все существующие файлы, соответствующие этому #. Мы обнаружили, что проще всего записать все сэмплы одного звука сразу, а затем остановить ячейку записи.
- Если система не улавливает целевой звук, попробуйте снизить значение ПОРОГА (для запуска установите значение 30) и повторно оцените ячейку.
- Если запись запускается другими звуками за пределами целевого, попробуйте увеличить значение THRESHOLD (установите значение 30 для запуска) и повторно оцените ячейку.
Шаг 2: Подготовка дисплея Arduino / Matrix
Далее мы собираемся настроить систему визуализации с использованием точечного матричного дисплея Arduino Leonardo и KEYESTUDIO 16x16. Это необходимо для вывода предсказания классификационной модели обнаруженных звуков. Как и раньше, мы предоставили все необходимые файлы как здесь, так и в репозитории GitHub проекта.
Шаг 2.1: Подключите Arduino и светодиодную матрицу в соответствии со схемой выше. KEYESTUDIO включает в себя провода для подключения к матрице точек, но для подключения этих проводов к Arduino потребуются перемычки на макетной плате.
Шаг 2.2: Откройте «arduino_listener.ino» с помощью IDE Ardunio и загрузите его в Leonardo. При правильном подключении вы должны увидеть значок «прослушивание» (похожий на Wi-Fi), как показано на изображении выше.
Шаг 2.3: Подготовьте значки, которые вы хотите отображать для каждого из ваших целевых звуков. Чтобы узнать, какие светодиоды загорятся, значок должен быть отправлен из Arduino в матрицу в виде массива байтов. Например, наш значок чашки кофе (на изображении выше) отправляется в матрицу в следующем формате:
{
0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfx, 0xf7 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};
Мы нарисовали наши значки с помощью онлайн-инструмента Dot2Pic с 16 столбцами, 16 строками и «монохроматическим, 8 пикселей на байт, вертикальная настройка», выбранным в раскрывающемся меню. Наш можно найти в массиве 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: Запустите каждую ячейку одну за другой, обращая внимание на все примечания, которые мы предоставили в заголовках. Никаких выходных данных не ожидается. Остановитесь, когда дойдете до ячейки с названием «Загрузить данные обучения».
Шаг 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: Остановитесь, когда дойдете до ячейки «Сообщения Arduino». Определите последовательный порт, который ваш компьютер будет использовать для связи с Arduino, в переменной PORT_DEF. Его можно найти в среде разработки Arduino, выбрав «Инструменты»> «Порт».
Более подробную информацию можно найти здесь.
Шаг 3.8: Снова откройте IDE Arduino. В тех местах, где вы внесли изменения в значки, запишите букву рядом со значением массива, но НЕ меняйте ее. В приведенном ниже примере это «g».
// удаление мусораconst 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,};
Шаг 3.7: (Возврат к ячейке «Messaging Arduino» в Блокноте) Измените метки в словаре self.sounds, чтобы они соответствовали меткам, которые вы использовали при записи ваших образцов, убедившись, что каждая метка соответствует одной букве, которую вы отметили в предыдущем шаг. «Запись» и «Прослушивание» являются частью основных функций системы и не должны изменяться. НЕ меняйте вторую букву, если вы не уверены, что внесете несколько дополнительных изменений в код Arduino, иначе это испортит связь с Arduino / матрицей.
Шаг 3.8: Запустите основную функцию! Код будет захватывать обучающие данные, извлекать их ключевые функции, передавать их в конвейер, строить модель классификации, а затем начинать прослушивание звуковых событий. Когда он обнаружит один, вы увидите, что матрица изменилась на символ записи (квадрат с кругом внутри), и он сегментирует эти данные и вводит их в модель. Все, что предсказывает модель, появится на матричном дисплее через несколько секунд.
Вы можете следить за выводом ячейки ниже. Посмотрите, насколько точно вы это сможете получить!
Шаг 4: Создание корпуса LEGO
Это самое интересное! Вы выполнили все серьезные шаги по машинному обучению, настроили и запустили всю сквозную систему, и теперь вы можете поиграть с LEGO в качестве награды. Здесь не так много подробностей. Мы просто добавили блоки, которые нам понравились, не особо беспокоясь об общем дизайне, и в итоге остались довольны тем, как это получилось.
Позвольте нашим фотографиям послужить источником вдохновения для вашего собственного творческого жилья, уникального для вашей кухни. Мы поместили Arduino и большую часть проводки в полый корпус, а затем закрепили матричный дисплей наверху выступами. Мы добавили немного бумаги поверх дисплея, чтобы немного рассеять свет, что, по нашему мнению, сделало значки более четкими.
Рекомендуемые:
Индивидуальный календарь с серводвигателем: 4 шага
Настроенный календарь с сервомотором: людям иногда было скучно, сидя за столом. Если на столе будет что-то декоративное, это точно будет весело. Для этого проекта я буду создавать индивидуальный календарь. Помимо календаря, вы также можете добавить другие элементы, которые
Элли Мент Идентификатор Элемента: 4 Шага
Элли Мент Идентификатор элемента: Элли - робот Roomba, который был запрограммирован таким образом, чтобы он мог обнаруживать различные цвета с помощью камеры, определять, идет ли она со скалы, чтобы не упасть, и уйти с дороги. препятствия, когда ее бамперы что-то задевают
Как сделать индивидуальный чехол для IPad: 4 шага
Как сделать индивидуальный чехол для IPad: старое и новое сталкиваются и делают что-то еще лучше. Это объединяет две мои любимые вещи: комиксы и чехлы. Я был в восторге от этого, и мне нравится сочетание льна и бумаги в этом футляре. Это не так уж сложно, просто ботаник, ну
Индивидуальный и дешевый USB-штекер: 3 шага
Пользовательский и дешевый USB-штекер: Примечание: я знаю, что этого не должно быть в соревнованиях роботов, я пытался удалить его, но в часто задаваемых вопросах в значительной степени говорится, что единственное, что я могу сделать, это переждать. Штекер USB A (тот, который идет в комп / хаб) от веробо
Индивидуальный IPod - защитная «кожа»: 4 шага
Индивидуальный IPod - защитная «кожа»: я был удивлен, что не смог найти его здесь, возможно, я выглядел недостаточно хорошо. Это защитная крышка для блестящей задней части вашего iPod, которая предотвращает появление царапин и отпечатков пальцев, а также делает ваш iPod холоднее, чем