Оглавление:
- Запасы
- Шаг 1: Принципиальная схема
- Шаг 2: Создание набора данных для машины обнаружения кашля
- Шаг 3. Подключитесь к мобильному телефону
- Шаг 4:
- Шаг 5: Обучение модели и настройка кода
- Шаг 6:
- Шаг 7: Код
Видео: Карманный детектор кашля: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
COVID19 - действительно историческая пандемия, которая очень сильно затронула весь мир, и люди создают множество новых устройств для борьбы с ней. Мы также построили автоматическую дезинфицирующую машину и термопистолет для бесконтактного контроля температуры. Сегодня мы создадим еще одно устройство, которое поможет бороться с коронавирусом. Это система обнаружения кашля, которая может различать шум и звук кашля и может помочь найти подозреваемого в коронавирусе. Для этого он будет использовать методы машинного обучения.
В этом руководстве мы собираемся создать систему обнаружения кашля с использованием Arduino 33 BLE Sense и Edge Impulse Studio. Он может различать нормальный фоновый шум и кашель в звуке в реальном времени. Мы использовали Edge Impulse Studio для обучения набора данных образцов кашля и фонового шума и построения оптимизированной модели TInyML, которая может обнаруживать звук кашля в реальном времени.
Запасы
Аппаратное обеспечение
- Arduino 33 BLE Sense
- Светодиодный джемпер
- Провода
Программное обеспечение
- Edge Impulse Studio
- IDE Arduino
Шаг 1: Принципиальная схема
Принципиальная схема обнаружения кашля с использованием Arduino 33 BLE Sense приведена выше. Деталь Fritzing для Arduino 33 BLE не была доступна, поэтому я использовал Arduino Nano, так как у них одинаковая распиновка.
Положительный вывод светодиода подключается к цифровому выводу 4 датчика BLE Arduino 33, а отрицательный вывод подключается к выводу GND на Arduino.
Шаг 2: Создание набора данных для машины обнаружения кашля
Как упоминалось ранее, мы используем Edge Impulse Studio для обучения нашей модели обнаружения кашля. Для этого нам нужно собрать набор данных, содержащий образцы данных, которые мы хотели бы распознавать на нашем Arduino. Поскольку цель состоит в том, чтобы обнаружить кашель, вам необходимо собрать несколько образцов этого и некоторых других образцов шума, чтобы он мог отличить кашель от других шумов. Мы создадим набор данных с двумя классами «кашель» и «шум». Чтобы создать набор данных, создайте учетную запись Edge Impulse, подтвердите свою учетную запись и затем начните новый проект. Вы можете загрузить образцы с помощью своего мобильного телефона, платы Arduino или импортировать набор данных в свою учетную запись Edge Impulse. Самый простой способ загрузить образцы в свою учетную запись - использовать мобильный телефон. Для этого вам необходимо подключить свой мобильный телефон к Edge Impulse. Чтобы подключить свой мобильный телефон, нажмите «Устройства», а затем нажмите «Подключить новое устройство».
Шаг 3. Подключитесь к мобильному телефону
Теперь в следующем окне нажмите «Использовать свой мобильный телефон», и появится QR-код. Отсканируйте QR-код на свой мобильный телефон с помощью Google Lens или другого приложения для сканирования QR-кодов.
Это подключит ваш телефон к студии Edge Impulse.
Теперь, когда ваш телефон подключен к Edge Impulse Studio, вы можете загружать свои сэмплы. Чтобы загрузить образцы, нажмите «Сбор данных». Теперь на странице сбора данных введите название метки, выберите микрофон в качестве датчика и введите длину выборки. Нажмите «Начать выборку», чтобы начать выборку 40-секундной выборки. Вместо того, чтобы заставлять себя кашлять, вы можете использовать онлайн-образцы от кашля разной длины. Запишите в общей сложности от 10 до 12 образцов кашля разной длины.
Шаг 4:
После загрузки образцов кашля установите метку «шум» и соберите еще 10–12 образцов шума.
Эти образцы предназначены для обучения модуля, на следующих шагах мы соберем тестовые данные. Тестовые данные должны составлять не менее 30% данных обучения, поэтому соберите 3 образца «шума» и от 4 до 5 образцов «кашель». Вместо того, чтобы собирать свои данные, вы можете импортировать наш набор данных в свою учетную запись Edge Impulse с помощью Edge Impulse CLI Uploader. Чтобы установить CLI Uploader, сначала загрузите и установите Node.js на свой ноутбук. После этого откройте командную строку и введите следующую команду:
npm install -g edge-impulse-cli
Теперь загрузите набор данных (ссылка на набор данных) и извлеките файл в папку проекта. Откройте командную строку, перейдите к местоположению набора данных и выполните следующие команды:
edge-impulse-uploader --cleanedge-impulse-uploader --category training training / *. json
edge-impulse-uploader - категория обучение обучение / *. cbor
edge-impulse-uploader --category testing testing / *. json edge-impulse-uploader --category testing testing / *. cbor
Шаг 5: Обучение модели и настройка кода
Поскольку набор данных готов, теперь мы создадим импульс для данных. Для этого перейдите на страницу «Создать импульс».
Теперь на странице «Создать импульс» нажмите «Добавить блок обработки». В следующем окне выберите блок Audio (MFCC). После этого нажмите «Добавить обучающий блок» и выберите блок нейронной сети (Keras). Затем нажмите «Сохранить импульс».
На следующем этапе перейдите на страницу MFCC и нажмите «Создать компоненты». Он будет генерировать блоки MFCC для всех наших окон аудио.
После этого перейдите на страницу «Классификатор NN», нажмите на три точки в правом верхнем углу «Настройки нейронной сети» и выберите «Перейти в режим Keras (эксперт)».
Замените оригинал следующим кодом и измените «Минимальный рейтинг достоверности» на «0,70». Затем нажмите кнопку «Начать обучение». Начнется обучение вашей модели.
импортировать тензорный поток как tffrom tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D из tensorflow.keras.optimizers импортировать Adam от tenorflow.keras.optimizers импортировать Adam от tenorflow. MaxNorm # архитектура модели model = Sequential () model.add (InputLayer (input_shape = (X_train.shape [1],), name = 'x_input')) model.add (Reshape ((int (X_train.shape [1] / 13), 13, 1), input_shape = (X_train.shape [1],))) model.add (Conv2D (10, kernel_size = 5, Activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Conv2D (5, kernel_size = 5, Activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'same')) model.add (Flatten ()) model.add (Dense (классы, активация = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # это контролирует скорость обучения opt = Adam (lr = 0.005, beta_ 1 = 0.9, beta_2 = 0.999) # обучение нейронной сети model.compile (loss = 'category_crossentropy', optimizer = opt, metrics = ['precision']) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)
Шаг 6:
После тренировки модель покажет тренировочную производительность. Для меня точность составила 96,5%, а потери составили 0,10, что неплохо для продолжения.
Теперь, когда наша модель обнаружения кашля готова, мы развернем эту модель как библиотеку Arduino. Перед загрузкой модели в виде библиотеки вы можете протестировать производительность, перейдя на страницу «Живая классификация». Перейдите на страницу «Развертывание» и выберите «Библиотека Arduino». Теперь прокрутите вниз и нажмите «Build», чтобы начать процесс. Это создаст библиотеку Arduino для вашего проекта.
Теперь добавьте библиотеку в вашу Arduino IDE. Для этого откройте IDE Arduino и нажмите Sketch> Include Library> Add. ZIP library. Затем загрузите пример, перейдя в Файл> Примеры> Имя вашего проекта - Edge Impulse> nano_ble33_sense_microphone. Мы внесем некоторые изменения в код, чтобы мы могли издавать звуковой сигнал, когда Arduino обнаруживает кашель. Для этого к Arduino подключен зуммер, и всякий раз, когда он обнаруживает кашель, светодиод мигает три раза. Изменения внесены в функции void loop (), которые выводят значения шума и кашля. В исходном коде метки и их значения печатаются вместе. for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f / n", result.classification [ix].label, result.classification [ix].value); } Мы собираемся сохранить значения шума и кашля в разных переменных и сравнить значения шума. Если значение шума опускается ниже 0,50, это означает, что значение кашля больше 0,50, и он будет издавать звук. Замените исходный код for loop () следующим: for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification [ix].value); float Data = result.classification [ix].value; if (Данные <0,50) {Serial.print («Обнаружен кашель»); тревога(); }} После внесения изменений загрузите код в ваш Arduino. Откройте монитор последовательного порта на скорости 115200 бод.
Вот как можно построить машину для обнаружения кашля, это не очень эффективный метод для поиска любого подозреваемого в COVID19, но он может хорошо работать в некоторых людных местах.
Шаг 7: Код
Вы можете найти в прикрепленном файле, И если вам понравилось, не забудьте проголосовать за меня в конкурсе ниже.
Рекомендуемые:
Карманный компьютер BASIC: 6 шагов (с изображениями)
Карманный компьютер BASIC: в этом руководстве описывается мой процесс создания небольшого карманного компьютера, работающего на BASIC. Компьютер построен на базе микросхемы AVR ATmega 1284P, которая также послужила источником глупого названия для компьютера (HAL 1284). Эта сборка ТЯЖЕЛА вдохновлена
Карманный измеритель напряжения постоянного тока DIY: 5 шагов
Карманный измеритель напряжения постоянного тока DIY: в этой инструкции я покажу вам, как сделать самодельный карманный измеритель напряжения постоянного тока с пьезозуммером для проверки цепи самостоятельно. Все, что вам нужно, это базовые знания в области электроники и немного времени. Если у вас есть какие-либо вопросы или проблемы, вы можете
Карманный визуализатор сигналов (карманный осциллограф): 10 шагов (с изображениями)
Карманный визуализатор сигналов (карманный осциллограф): Привет всем! Мы все делаем так много вещей каждый день. Для каждой работы нужны инструменты. Это для изготовления, измерения, отделки и т. Д. Таким образом, работникам электроники нужны такие инструменты, как паяльник, мультиметр, осциллограф и т. Д
Карманный детектор CO (угарного газа): 5 шагов
Карманный детектор CO (угарного газа): как следует из названия, это карманный детектор CO, который используется для обнаружения окиси углерода в воздухе, нашей целью было сделать это устройство портативным и поместиться в карманный размер. проблема загрязнения воздуха в связи с индустриализацией ev
Самый крутой USB L.E.D. Карманный светильник (карманный вход): 6 ступеней
Самый крутой USB L.E.D. Карманный фонарь (карманный вход): в этой инструкции я покажу вам, как сделать L.E.D. с питанием от USB. свет, который можно сложить до размеров жестяной коробки X-it Mints и легко уместить в кармане. Если он вам понравился, обязательно поставьте + и проголосуйте за меня в конкурсе! Материалы и