Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Детектор языка TinyML на основе Edge Impulse и Arduino

Компоненты и расходные материалы

Arduino Nano 33 BLE Sense
× 1
National Control Devices PCA9685 8-канальный 8-канальный пропорциональный клапан с драйвером на полевых транзисторах 12 В, 8 Вт Контроллер с интерфейсом I2C
× 1
Микро-серводвигатель SG90
× 3
Зажим для батареи 9 В
× 1

Необходимые инструменты и машины

3D-принтер (общий)
Паяльник (общий)

Приложения и онлайн-сервисы

Edge Impulse Studio
IDE Arduino
Autodesk Fusion 360

Об этом проекте

Обзор

Идея этого проекта заключается в создании языковой классификатора с использованием нейронных сетей / глубокого обучения, реализованных в микроконтроллере. Устройство определит одно слово для языков итальянского, английского и французского. Распознаваемые слова:" si "для итальянцев", oui "для французов и" да "для английского языка. Устройство постоянно слушает, и как только одно из трех слов распознается, появляется флаг соответствующего языка.

Проект основан на двух основных компонентах:микроконтроллере Arduino Nano 33 BLE Sense и платформе разработки Edge Impulse Studio.

Реализация проекта проходила в следующих этапах:

  • Выборка / создание набора данных
  • Разработайте модель.
  • Обучение модели
  • Тестирование модели
  • Настроить для оборудования
  • Развертывание модели и ее настройка
  • Соберите последнее устройство (оборудование вокруг модели).

Выборка / создание набора данных

Набор данных состоит из записи трех слов (ну, си, да) общей продолжительностью около 30 минут (по 10 минут на каждое слово).

Для каждого слова был создан непрерывный звуковой файл, в котором одно и то же слово непрерывно повторялось, затем с помощью приложения Audacity файл был разделен на несколько файлов, каждый из которых длился одну секунду. Каждый файл содержит пример слова.

Затем эти файлы были загружены в Edge Impulse и помечены в соответствии со словом.

В дополнение к этим файлам был загружен еще один набор файлов записи продолжительностью 1 секунда, помеченных как фоновый шум.

В целом данные обучения составляли 33 минуты (10 минут для каждого слова и 3 минуты для фонового шума)

Разработайте модель

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

Первым шагом к созданию модели является преобразование звука во временной ряд. Затем временной ряд разбивается на части с заранее заданным размером временного окна.

(Это первое преобразование показано на красной стороне рисунка ниже).

На втором этапе используется техника обработки сигналов, в данном случае MFCC (частотные кепстральные коэффициенты Mel), для извлечения характеристик из временного ряда, которые наилучшим образом характеризуют каждый из 4 классов (3 слова + фон).

Ниже пример преобразования MFCC и его коэффициентов.

Свертка временного ряда и коэффициентов используется для питания нейронных сетей. Наконец, выходные данные нейронных сетей обеспечивают вероятность принадлежности для каждого класса.

Ниже представлен обзор реализации нейронной сети и ее классификационных характеристик.

Обучение - настройка для Arduino Nano 33 BLE Sense

Для обучения и окончательной настройки модели в Edge Impulse Studio доступна новая опция под названием « EON Tuner ". Он позволяет выбрать оптимальную архитектуру для встраиваемого приложения с машинным обучением.

Он запускает множество экземпляров возможных моделей параллельно, каждый экземпляр с разной конфигурацией (разные методы цифрового сигнала и разные архитектуры нейронных сетей).

Для запуска этой опции требуется всего пара информации:

  • " Цель ", который представляет тип модели (в данном случае" Определение ключевых слов ")
  • Оборудование, на котором работает приложение (в данном случае « Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

Для каждого экземпляра он дает несколько показателей эффективности классификации, время, необходимое для вычислений, объем оперативной памяти и пространство файловой системы, используемое в файловой системе микроконтроллера.

Для этого проекта мы выбрали 5 лучших экземпляров по точности классификации и из них выбрали самый быстрый.

Тестирование

Тестирование проводилось путем сбора нового набора файлов рекордера и проверки качества классификации.

Однажды было подтверждено, что классификация была точной. Мы перешли к следующему этапу реализации, окончательному развертыванию.

Развертывание

Развертывание с помощью Edge-Impulse Studio было довольно простым делом.

Из вариантов развертывания был выбран вариант библиотеки Arduino. Это дает стандартный файл модели C для Arduino, который можно настроить для наших нужд.

После завершения строительства с помощью Edge-Impulse создается и загружается на локальный компьютер zip-файл, и его просто нужно импортировать в Arduino Ide для окончательной настройки.

Код

Код доступен по ссылке. Код основан на коде, загруженном из edge-impulse, с небольшими настройками, перечисленными ниже.

1. Добавлена ​​библиотека Adafruit_PWMServoDriver.h для управления сервоприводами, прикрепленными к флажкам.

2. Определена функция servos_selector для координации сервоприводов в соответствии с результатами классификации.

  void servos_selector (int iter) {
time_now =millis ();
delta =time_now - time_was;
if (delta> 2000) {
time_was =time_now;
переключатель (итерация) {
case 0:
pwm.setPWM (0, 0, 350);
задержка (500);
pwm.setPWM ( 0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
break;
case 1:
pwm.setPWM (1, 0, 350);
Serial.println ("2222");
задержка (500);
pwm.setPWM (0, 0, 200 );
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
break;
case 2:
pwm .setPWM (2, 0, 350);
Serial.println ("333");
задержка (500);
pwm.setPWM (0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
break;
}
}
}

3. Наконец, было добавлено условие IF, которое вызывает servos_select функция на основе " result.classification "объект.

  for (size_t ix =0; ix  ei_printf ("% s:% .5f \ n", result.classification [ix] .label, 
result.classification [ix] .value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf ("оценка аномалии:% .3f \ n", result.anomaly);
#endif
print_results =0;
}
if (result.classification [1] .value> 0.80) {
servos_selector (0);
}
else if (result.classification [2] .value> 0.80) {
servos_selector (1);
}
else if (result.classification [3] .value> 0.80) {
servos_selector (2);
}
}

Электрические схемы

Электрическая схема основана на микроконтроллере Arduino Nano 33 BLE Sense и использует PCA9685 для управления 3 сервоприводами.

Рабочая нагрузка PCA9685 поддерживается внешней батареей на 9 В.

Это все.

Код

код
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

Изготовленные на заказ детали и корпуса

Схема

languagedetection_9RxXhRX5sj.fzz

Производственный процесс

  1. Игра с гироскопом Arduino с MPU-6050
  2. Цифровые игральные кости Arduino
  3. Железный человек
  4. Найди меня
  5. Управление увлажнителем Arduino
  6. Сонар с использованием Arduino и отображение при обработке IDE
  7. MobBob:самостоятельный робот Arduino, управляемый смартфоном Android
  8. Реактивный настольный светильник для звука Arduino
  9. NeoMatrix Arduino Pong
  10. Джойстик Arduino