Оглавление:

Карманный детектор кашля: 7 шагов
Карманный детектор кашля: 7 шагов

Видео: Карманный детектор кашля: 7 шагов

Видео: Карманный детектор кашля: 7 шагов
Видео: 😱Хакерская SDR Прослушка На Xiaomi 🔥 2024, Ноябрь
Anonim
Карманный детектор кашля
Карманный детектор кашля

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: Код

Вы можете найти в прикрепленном файле, И если вам понравилось, не забудьте проголосовать за меня в конкурсе ниже.

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