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

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

Внешний вид проекта распознавания речи на основе платы Arduino 33 BLE Sense

Ранее на нашем сайте мы уже рассматривали преобразование текста в речь на основе 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 поскольку она имеет точно такую же распиновку.

Схема проекта распознавания речи на основе платы Arduino Nano 33 BLE Sense

Положительный контакт светодиода подключен к цифровому контакту 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’ (подключить новое устройство).

Подключение нового устройства в Edge Impulse

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

Подключение мобильного телефона в Edge Impulse

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

Мобильный телефон подключен к Edge Impulse studio

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

Настройка записи образцов звуков в Edge Impulse studio

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

Собранные нами образцы звуков в Edge Impulse Studio

Собранные нами образцы звуков нужны для обучения (тренировки) модуля, далее нам необходимо еще собрать тестовые данные (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’ (сохранить импульс).

Создание нового Impulse в Edge Impulse Studio

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

Настройка параметров обучения модели в Edge Impulse Studio

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

Настройка параметров нейронной сети в Edge Impulse Studio

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

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

Результаты обучения нашей модели в Edge Impulse Studio

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

Тестирование нашей модели в Edge Impulse Studio

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

Тестирование работы модели с помощью мобильного телефона

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

Создание библиотеки Arduino в Edge Impulse

После этого добавьте данную библиотеку в вашу 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 бод.

Вид работы проекта в окне монитора последовательной связи

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

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

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

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

(Проголосуй первым!)
Загрузка...
314 просмотров

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

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