Оглавление:

Индивидуальный звуковой идентификатор кухни: 4 шага
Индивидуальный звуковой идентификатор кухни: 4 шага

Видео: Индивидуальный звуковой идентификатор кухни: 4 шага

Видео: Индивидуальный звуковой идентификатор кухни: 4 шага
Видео: Адская Кухня | 4 Серия | 14 сезон | Hell's Kitchen S14E04 2024, Ноябрь
Anonim
Image
Image
Пользовательский звуковой идентификатор кухни
Пользовательский звуковой идентификатор кухни

Для нашего последнего проекта в курсе интерактивных систем этой весной мы создали систему в реальном времени для идентификации и визуализации обычных звуков на кухне с использованием классификации машин опорных векторов. Система состоит из портативного компьютера для дискретизации / классификации звука и матричного дисплея 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 / Matrix
Подготовка дисплея Arduino / Matrix
Подготовка дисплея Arduino / Matrix
Подготовка дисплея Arduino / Matrix
Подготовка дисплея Arduino / Matrix
Подготовка дисплея 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
Создание корпуса LEGO
Создание корпуса LEGO
Создание корпуса LEGO
Создание корпуса LEGO
Создание корпуса LEGO

Это самое интересное! Вы выполнили все серьезные шаги по машинному обучению, настроили и запустили всю сквозную систему, и теперь вы можете поиграть с LEGO в качестве награды. Здесь не так много подробностей. Мы просто добавили блоки, которые нам понравились, не особо беспокоясь об общем дизайне, и в итоге остались довольны тем, как это получилось.

Позвольте нашим фотографиям послужить источником вдохновения для вашего собственного творческого жилья, уникального для вашей кухни. Мы поместили Arduino и большую часть проводки в полый корпус, а затем закрепили матричный дисплей наверху выступами. Мы добавили немного бумаги поверх дисплея, чтобы немного рассеять свет, что, по нашему мнению, сделало значки более четкими.

Рекомендуемые: