Рубрики
Схемы на Arduino

Распознавание речи на Arduino Nano 33 BLE Sense

Технология распознавания речи чрезвычайно полезна в различных системах автоматизации – она не только позволяет управлять устройствами не используя для этого руки (hands free), но также повышает безопасность системы. Также эта технология применяется во многих современных электронных гаджетах и оказывает неоценимую помощью людям с некоторыми тяжелыми заболеваниями.

Ранее на нашем сайте мы уже рассматривали преобразование текста в речь на основе Arduino, в этом же проекте мы будем использовать машинное обучение для тренировки (настройки) модели распознавания речи в Edge Impulse Studio. Мы будем тренировать нашу систему на три команды: ‘LIGHT ON’ (включить свет), ‘LIGHT OFF’ (выключить свет) и ‘NOISE’ (шум). Edge Impulse – это онлайн платформа машинного обучения, которая позволяет разработчикам создавать (проектировать) следующее поколение высоко интеллектуальных устройств со встроенным в них машинным обучением (Machine Learning).

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Nano 33 BLE Sense.
  2. Светодиод (купить на AliExpress).
  3. Соединительные провода.

Программное обеспечение

  1. Edge Impulse Studio.
  2. Arduino IDE.

Схема проекта

Схема проекта распознавания речи на основе платы Arduino Nano 33 BLE Sense представлена на следующем рисунке. К сожалению, в программе Fritzing, которую мы использовали для рисования схемы, нет платы Arduino 33 BLE Sense, поэтому вместо нее на схеме мы использовали плату Arduino Nano поскольку она имеет точно такую же распиновку.

Положительный контакт светодиода подключен к цифровому контакту 5 платы Arduino Nano 33 BLE sense, а отрицательный контакт светодиода подключен к контакту GND платы Arduino.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Создание набора данных для системы распознавания речи

В нашем проекте мы будем использовать Edge Impulse Studio для тренировки (настройки) нашей модели распознавания речи. Тренировка (настройка) модели в Edge Impulse Studio очень похожа на тренировку моделей машинного обучения в других подобных системах. Для тренировки (настройки) модели машинного обучения первым шагом нам необходимо собрать набор данных (dataset), который будет содержать отсчеты/образцы (сэмплы) данных, которые мы хотим распознавать.

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

Мы создадим набор данных (dataset) с тремя классами — “LED ON”, “LED OFF” и “noise”. Для создания этого набора данных необходимо создать себе аккаунт в Edge Impulse, верифицировать его и затем создать в нем новый проект. Вы можете загрузить в него образцы (samples) звуков, используя ваш смартфон, плату Arduino или другое устройство, с помощью которого можно импортировать образцы звуков в ваш аккаунт на Edge Impulse. Самый простой способ загрузить образцы звуков в аккаунт Edge Impulse – это использовать мобильный телефон (смартфон). Для этого соедините ваш смартфон с Edge Impulse. Чтобы сделать это кликните в аккаунте Edge Impulse на ‘Devices’, а затем на ‘Connect a New Device’ (подключить новое устройство).

В окне, которое появится после этого, нажмите на ‘Use your Mobile Phone’ (использовать ваш мобильный телефон), после чего появится QR код. Отсканируйте этот QR код вашим мобильным телефоном или введите URL, показанный на этом QR коде.

После этого ваш телефон будет подключен к Edge Impulse studio.

Когда ваш телефон подключен к Edge Impulse Studio вы можете загружать в него ваши образцы звуков. Чтобы сделать это кликните на ‘Data acquisition’. После этого на странице получения данных (Data acquisition page) введите номер метки, выберите микрофон в качестве датчика и ведите длину образца звука (sample length). Затем нажмите на ‘Start sampling’ и ваше устройство запишет образец звука длительностью 2 секунды. Запишите от 10 до 12 образцов звука в различных условиях.

После загрузки образцов звука (samples) для первого класса измените метку и соберите также образцы звуков для классов ‘light off’ и ‘noise’

Собранные нами образцы звуков нужны для обучения (тренировки) модуля, далее нам необходимо еще собрать тестовые данные (Test Data). Эти данные должны составлять, по меньшей мере, 30% от тренировочных данных, поэтому нам нужно еще собрать 4 образца шума (‘noise’) и 4 или 5 образцов для звуков ‘light on’ и ‘light off’.

Тренировка (обучение) модели

Когда наш набор данных будет готов, мы можем создать импульс (impulse) для данных. Для этого вам нужно перейти на страницу ‘Create impulse’. Измените на ней настройки по умолчанию Window size (размер окна) с 1000 ms на 1200ms, а параметр Window increase измените с 500 ms до 58 ms. Эти настройки будут означать, что наши данные будут обрабатываться по времени 1,2 секунды, стартуя каждые 58ms.

После этого на странице ‘Create impulse’ нажмите на ‘Add a processing block’ (добавить блок обработки). В следующем окне выберите Audio (MFCC) block. После этого нажмите на ‘Add a learning block’ (добавить обучающий блок) и выберите в новом окне Neural Network (Keras) block (блок нейронной сети). Затем нажмите на ‘Save Impulse’ (сохранить импульс).

После этого перейдите на страницу MFCC и нажмите на ‘Generate Features’. В результате этого будут сгенерированы MFCC блоки для всех наших окон с аудио.

После этого перейдите на страницу ‘NN Classifier’ и нажмите там на три точки в правом верхнем углу напротив надписи ‘Neural Network settings’ (настройки нейронной сети), после чего выберите пункт ‘Switch to Keras (expert) mode’ как показано на следующем рисунке.

Замените оригинал следующим фрагментом кода и измените ‘Minimum confidence rating’ (минимальный доверительный интервал) на ‘0.70’. Затем нажмите на кнопку ‘Start training’ (начать обучение). После этого начнется обучение (тренировка) вашей модели.

После обучения модели будет показан результат обучения. В нашем случае точность составила 81.1%, а коэффициент потерь — 0.45. Это не является идеальным результатом обучения, но мы можем продолжать работать в этом направлении. Вы можете улучшить производительность модели при помощи создания более обширного набора данных.

Теперь, когда наша модель распознавания речи (Speech Recognition model) готова, мы можем разместить эту модель в библиотеке Arduino. Перед загрузкой модели в библиотеку вы можете протестировать ее производительность (функциональность) на странице ‘Live Classification’. На этой странице можно протестировать модель как с помощью существующего набора тестовых данных, так и в режиме реального времени, транслируя аудио данные с вашего мобильного телефона.

Чтобы протестировать данные с помощью мобильного телефона, выберите пункт ‘Switch to Classification Mode’ (переключиться в режим классификации) на вашем телефоне.

Теперь, чтобы загрузить модель в библиотеку Arduino, перейдите на страницу ‘Deployment’ и выберите на ней ‘Arduino Library’. Пролистайте страницу вниз и нажмите на ‘Build’ чтобы начать процесс. При завершении этого процесса будет создана библиотека Arduino для вашего проекта.

После этого добавьте данную библиотеку в вашу Arduino IDE выбрав в ней пункт меню Sketch > Include Library > Add.ZIP library.

Затем загрузите пример по адресу File > Examples > Your project name — Edge Impulse > nano_ble33_sense_microphone.

Объяснение кода программы распознавания речи для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Мы в программе будет управлять состояние светодиода (включен/выключен) в зависимости от поступающих голосовых команд.

Мы внесем некоторые изменения в функцию void loop() открытого нами примера в месте, где происходит вывод вероятностей команд на экран. В оригинальном коде выводятся все метки и их значения вместе.

Чтобы управлять светодиодом нам необходимо сохранить все вероятности команды в трех различных переменных таким образом, чтобы мы могли записать дополнительные условия для них. Таким образом, в соответствии с новым кодом, если вероятность команды ‘light on’ (включить светодиод) будет больше чем 0.50, то мы будем включать светодиод, а если вероятность команды ‘light off’ будет больше чем 0.50, мы будем выключать светодиод.

После внесения описанных изменений загрузите код программы в плату Arduino. Откройте монитор последовательного порта (serial monitor), скорость – 115200 бод.

Произнося команды вы сможете наблюдать как меняется информация в окне монитора последовательной связи. Более подробно все описанные в данной статье процессы вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

4 ответа к “Распознавание речи на Arduino Nano 33 BLE Sense”

Чтобы речь распознавать с использованием камеры, а не микрофона?

всё понял кроме одного….. после того как всё сделал, загрузил в ардуино — с помощью какого микрофона он распознает речь? ни на схеме, ни на видео не показан где микрофон. куда говорить то? га плату ардуино?????????

Посмотрите описание платы Arduino Nano 33 BLE Sense (например, здесь — wiki.amperka.ru/products:arduino-nano-33-ble-sense) и вы увидите что в ее составе есть микрофон MP34DT05

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *