Съдържание:
- Консумативи
- Стъпка 1: Събиране на кухненски звукови проби
- Стъпка 2: Подготовка на дисплея Arduino/Matrix
- Стъпка 3: Изпълнение на класификатора и идентифициране на звуци
- Стъпка 4: Създаване на жилище LEGO
Видео: Персонализиран кухненски звуков идентификатор: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
За нашия окончателен проект в интерактивен системен курс тази пролет, ние създадохме система в реално време за идентифициране и визуализиране на обикновени звуци в кухнята, използвайки класификация на Support-Vector Machine. Системата се състои от лаптоп за аудио вземане на проби/класификация и дисплей с Arduino/матрица за визуализация. По -долу е ръководство за създаване на собствена версия на тази система за звуци от вашата кухня.
Нашият първоначален случай на използване беше като устройство за кухнята на глух и на уши индивид, но теоретично тази система можеше да се адаптира, за да идентифицира набор от звуци в различни контексти. Кухнята беше идеалното място за начало, тъй като има тенденция да бъде относително тиха и съдържа разумно количество прости, отделни звуци.
Хранилище на GitHub за този проект можете да намерите тук.
Консумативи
- Микроконтролер Arduino Leonardo с заглавки
- KEYESTUDIO 16x16 Dot Matrix LED дисплей за Arduino
- Тел за джъмпер от платка
- Кабел Micro-USB към USB 2.0
-
Лаптоп с преносим компютър Jupyter (инсталация на Anaconda)
Ръководство за начинаещи в Jupyter Notebook може да се намери тук
-
Значително количество несъответстващи LEGO тухли за корпуса на системата
(Но наистина можете да ги замените с всеки DIY строителен материал, който искате!)
Стъпка 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. В този случай ядрото на Notebook трябва да се нулира и всяка клетка да се стартира отново отгоре.
Стъпка 1.11 (По избор): Проверете WAV данните на отделни файлове в клетката „Бърза визуализация на звука“, за да се уверите, че сте заснели цялата желана информация.
Някои съвети:
- Записвайте, когато кухнята ви е тиха.
- Запишете само един звук наведнъж. Системата не може да различи припокриването на звуците.
- Опитайте се да направите всеки звуков опит възможно най -последователен. Това ще помогне за точността на идентификацията.
- Преоценката на клетката за запис ще нулира стойността # в името на файла и ще презапише всички съществуващи файлове, които съответстват на този #. Открихме, че е най -лесно да запишем всички проби от един звук наведнъж, след което да спрем клетката за запис.
- Ако системата не улавя целевия ви звук, опитайте да намалите стойността на THRESHOLD (зададена на 30 за стартиране) и преоценете клетката.
- Ако записът се задейства от други звуци извън целевия, опитайте да повишите стойността THRESHOLD (зададена на 30 за стартиране) и преоценете клетката.
Стъпка 2: Подготовка на дисплея Arduino/Matrix
След това ще настроим системата за визуализация, използвайки Arduino Leonardo и KEYESTUDIO 16x16 LED матричен дисплей. Това е за извеждане на прогнозата на класифицирания модел за открити звуци. Както и преди, ние предоставихме всички необходими файлове както тук, така и в хранилището на проекта GitHub.
Стъпка 2.1: Свържете Arduino и LED матрицата съгласно схемата по -горе. KEYESTUDIO включва проводници за свързване към тяхната матрица с точки, но ще са необходими кабели за джъмпер за свързване на тези проводници към Arduino
Стъпка 2.2: Отворете „arduino_listener.ino“с помощта на Ardunio IDE и го качете в 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, 0xb, 0xb 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 = "/Потребители/xxxx/Документи/KitchenSoundClassifier/MySamples/NewDir"
Сега бихте задали тези променливи на:
SAMPLES_LOCATION_ROOT = "/Потребители/xxxx/Документи/KitchenSoundClassifier/MySamples/" SAMPLES_DIR_NAME = "NewDir"
Направихме това, което позволи бързи промени в класификатора в случаи на неточности. Можете да превключвате между различни примерни колекции, за да настроите данните си.
Стъпка 3.4: Оценете клетката. Трябва да видите, че всяка колекция е заредена успешно.
Стъпка 3.5: Продължете да изпълнявате всяка клетка една по една, като обръщате внимание на всички бележки, които сме предоставили в заглавията.
Стъпка 3.6: Спрете, когато стигнете до клетката „Messaging Arduino“. Определете серийния порт, който вашият компютър ще използва за комуникация с Arduino в променливата PORT_DEF. Това може да се намери в IDE на Arduino и да отидете в Инструменти> Порт.
Повече информация можете да намерите тук.
Стъпка 3.8: Отворете отново вашата Arduino IDE. На места, където сте направили промени в иконите, отбележете буквата до стойността на масива, но НЕ я променяйте. В примера по -долу това е "g".
// контейнер за изхвърляне на боклук 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" на Notebook) Променете етикетите в речника на self.sounds, така че да съответстват на етикетите, които сте използвали при записването на вашите мостри, като се уверите, че всеки етикет съответства на единичната буква, която сте отбелязали в предишната стъпка. „Записът“и „Слушането“са част от основната функционалност на системата и не трябва да се променят. НЕ променяйте втората буква, освен ако не се чувствате уверени в извършването на няколко допълнителни промени в кода на Arduino, тъй като в противен случай това ще попречи на комуникацията с Arduino/матрицата.
Стъпка 3.8: Изпълнете основната функция! Кодът ще вземе данните за обучението, ще извлече основните му характеристики, ще ги въведе в тръбопровода, ще изгради модел за класификация, след което ще започне да слуша за звукови събития. Когато усети такъв, ще видите промяната на матрицата в символ за запис (квадрат с кръг вътре) и тя ще сегментира тези данни и ще ги подаде в модела. Всичко, което моделът предвижда, ще се появи няколко секунди по -късно на матричния дисплей.
Можете да следвате в изхода на клетката по -долу. Вижте колко точно можете да го получите!
Стъпка 4: Създаване на жилище LEGO
Това е забавната част! Направихте всички сериозни стъпки на машинно обучение и стартирахте цялата система от край до край и сега можете да играете с LEGO като награда. Тук няма много процес за детайлизиране. Просто добавихме блокове, които ни харесаха тук и там, без да се притесняваме твърде много за цялостния дизайн, и в крайна сметка останахме доволни от начина, по който се получи.
Позволете на нашите снимки да послужат като вдъхновение за вашите собствени творчески жилища, уникални за вашата кухня. Поставихме Arduino и по -голямата част от окабеляването в куха кутия, след което закрепихме матричния дисплей отгоре с надвеси. Добавихме малко хартия върху дисплея, за да разсеем леко светлината, която почувствахме, че прави иконите по -ясни.
Препоръчано:
Кухненски таймер: 4 стъпки
Кухненски таймер: Това включва gen4-uLCD-35DT, който ще се използва като вторичен дисплей за проект на Raspberry Pi, Кухненски таймер. Това е полезно приложение за повечето майки и любители на готвенето. Това може да се използва за наблюдение на времето при готвене
Смяна на вашите LED кухненски аспиратори LED: 4 стъпки
Подмяна на вашите LED кухненски аспиратори LED: Когато ремонтирахме къщата си, кухнята беше проектирана като наш централен елемент. Ние се радваме да имаме компания и кухнята ни винаги е била там, където всички са се мотали. Сигурен съм, че много хора могат да се свържат. Тъй като аз съм готвачът на семейството
Изтеглете платка с кухненски принадлежности: 6 стъпки (със снимки)
Издърпайте платка с кухненски принадлежности: Докато се занимавате с проекти за електроника, бързо ще разберете, че колкото по -сложни са те, толкова по -трудно се запояват заедно. Обикновено това означава създаване на гнездо на плъх от отделни проводници, което може да бъде обемисто и трудно да се отстранят неизправности
Направете кухненски таймер с MakerBit: 13 стъпки
Направете кухненски таймер с MakerBit: Този проект изследва как работи кухненски таймер - като направите такъв! Преди много време повечето полезни устройства бяха механични. Децата могат да разглобяват нещата, за да видят частите вътре и да изучават как се движат. Съвременните електронни джаджи като кухненски таймер са
Кухненски светлини за борба с Arduino: 3 стъпки
Светлини за кухненски плотове с помощта на Arduino: От известно време искам да потопя пръстите на краката си в домашната автоматизация. Реших да започна с прост проект. За съжаление не направих никакви снимки по време на процеса, но използвах протоборд, за да изпробвам идеите си първо, и само го запоявахме заедно