Автономное распознавание голоса на ESP32 с использованием Edge Impulse

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Распознавание голоса становится неотъемлемой частью Интернета вещей (IoT), позволяя нам управлять устройствами, отслеживать их состояние и взаимодействовать с ними без помощи рук. В основе работы ESP32 по преобразованию речи в текст лежит захват звука через микрофон, его обработка и преобразование в текст, понятный устройствам. Затем этот текст используется для запуска команд, подобно тому, как Alexa или Google Assistant реагируют на ваш голос. Интересно, что системы распознавания голоса ESP32 в автономном режиме часто используют сочетание периферийных и облачных вычислений, при этом часть обработки выполняется непосредственно на устройстве, а остальная часть — в облаке. Это подводит нас к сегодняшнему проекту, в котором мы создадим миниатюрный, но расширяемый голосовой помощник на базе ESP32 с использованием Edge Impulse, где ESP32 будет выступать в качестве основного микроконтроллера. Цель автономного (offline) распознавания речи на ESP32 — сохранить простоту, оставив при этом возможность для будущих улучшений. Итак, без дальнейших промедлений, давайте начнём!

Автономное распознавание голоса на ESP32 с использованием Edge Impulse

Также на нашем сайте вы можете посмотреть и другие проекты по распознаванию голоса и преобразованию речи в текст:

Компоненты для нашего проекта

КомпонентСпецификацияНазначение
МикроконтроллерESP32 (240 МГц)Основной процессор для распознавания речи в автономном режиме
Микрофонный модульINMP441 MEMSВысокоточная аудиозапись
Платформа машинного обученияEdge ImpulseОбучение модели распознавания речи ESP32
Частота дискретизации16 кГцчастота дискретизации звука
Тип распознаванияАвтономный/ВстроенныйДля работы не требуется подключение к интернету

Как видите, набор компонентов достаточно простой.

Принципы работы проекта

Основная цель этого проекта — реализовать распознавание речи на ESP32 в автономном режиме. В то время как большинство проектов в интернете полагаются на сторонние API, такие как Google TTS, здесь мы используем другой подход с помощью Edge Impulse. Вместо облачных решений мы реализуем модуль распознавания голоса на ESP32 с использованием Edge Impulse для машинного обучения непосредственно на устройстве. На самом деле, вы даже можете использовать TensorFlow Lite напрямую, если хотите, хотя это немного сложнее; мы рассмотрим это в другой статье. А пока давайте сосредоточимся на методе Edge Impulse. Этот подход гарантирует, что ваш голосовой помощник на ESP32 будет работать независимо, без подключения к интернету, что делает его идеальным для приложений, заботящихся о конфиденциальности, и удаленных развертываний IoT.

Собранная на макетной плате конструкция нашего проекта

Основные характеристики системы преобразования речи в текст на базе ESP32

? Полностью автономная работа — отсутствие зависимости от облака для распознавания голоса на ESP32 в автономном режиме.
? Низкая задержка отклика — обработка на устройстве обеспечивает быстрое распознавание.
? Настраиваемое ключевое слово — обучите своего голосового помощника ESP32 с помощью пользовательских команд.
? Расширяемая архитектура — легко добавлять новые голосовые команды.
? Ориентация на конфиденциальность — аудио никогда не покидает ваше устройство.
? Экономичное решение — использует доступное оборудование ESP32.

Пошаговый алгоритм работы распознавания голоса на ESP32

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

Создание автономной системы распознавания речи на базе ESP32 включает в себя шесть простых шагов:

  • Сбор набора данных.
  • Обучение модели в Edge Impulse.
  • Экспорт ее как библиотеки Arduino из Edge Impulse.
  • Сборка схемы.
  • Внесение небольших изменений в код и загрузка его на ESP32.
  • Тестирование работы проекта в режиме реального времени.

Теперь перейдём к самому проекту, начнём со сбора набора данных.

Как собрать набор данных для автономного обучения системы распознавания речи на ESP32

Успешная автономная система распознавания голоса на ESP32 начинается с качественных обучающих данных. Существует множество методов сбора набора данных, влияющих на точность вашего модуля распознавания голоса на ESP32. Самый простой способ — использовать наборы данных с открытым исходным кодом. Все зависит от типа или категории необходимых вам данных. Для распространенных проектов обычно легко найти то, что вам нужно, и существует множество доступных вариантов. Есть два основных подхода: использование уже существующих наборов данных с открытым исходным кодом или создание пользовательских записей, адаптированных для вашего конкретного приложения голосового помощника на ESP32.

Для быстрого прототипирования вашей системы распознавания речи на ESP32 в автономном режиме эти тщательно подобранные наборы данных станут отличной отправной точкой:

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

В этом проекте мы использовали следующий набор данных: Google Speech Command Dataset V2.

Другой метод — самостоятельный сбор данных путем ручной записи коротких аудиофрагментов (1–3 секунды) необходимого звука с использованием различных голосов, тонов и скоростей. Чем больше данных вы соберете, тем лучше будут результаты обучения. Для специализированных приложений голосового помощника на базе ESP32 индивидуальная запись обеспечивает оптимальную производительность.

Обучение модуля распознавания голоса ESP32 в Edge Impulse

После того, как вы соберете набор данных для обучения, мы можем перейти к части, касающейся Edge Impulse. Edge Impulse предоставляет мощную платформу для обучения моделей распознавания речи на ESP32 в автономном режиме.  

Ниже вы найдете пошаговые инструкции, от создания нового проекта до экспорта обученной модели в виде библиотеки Arduino. Это пошаговое руководство проведет вас через процесс создания, обучения и развертывания вашей собственной модели голосового помощника ESP32.

=> Шаг 1: Создайте свою учетную запись Edge Impulse для преобразования речи в текст на ESP32.
Поиск Edge Impulse в Google [1] выдаст вам ссылку на сайт вверху [2]. Нажав на эту ссылку, вы попадете на главную страницу Edge Impulse. Здесь вы будете развивать интеллектуальные возможности вашего модуля распознавания речи ESP32.

Поиск Edge Impulse в Google и переход на главную страницу Edge Impulse

Здесь нажмите кнопку «Вход» [3] в правом верхнем углу. Для удобства я выбрал вариант « Продолжить с Google» [4]. После выполнения необходимых шагов вы должны попасть на главную страницу Edge Impulse.

=> Шаг 2: Инициализация проекта распознавания речи ESP32
На главной странице Edge Impulse нажмите кнопку Create New Project («Создать новый проект») [5] в правом верхнем углу чтобы начать настройку вашей системы распознавания речи ESP32 в автономном режиме.

Создание нового проекта в Edge Impulse

Введите имя для вашего проекта [6]. Это имя будет использоваться до окончательного экспорта библиотеки Arduino. Тип проекта по умолчанию будет Personal («Личный»), а настройка — Private («Частный»). Наконец, нажмите Create New Project («Создать новый проект») [7].

После успешного создания проекта вы увидите его главную страницу.

=> Шаг 3: Настройка целевого устройства ESP32 для распознавания голоса

ЕСТЬ ПРОТИВОПОКАЗАНИЯ.ПОСОВЕТУЙТЕСЬ С ВРАЧОМ

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

Настройка ESP32 для распознавания голоса

В правом верхнем углу вы увидите кнопку Target: Cortex-M4F 80 MHz («Цель: Cortex-M4F 80 МГц») [8]. Нажатие на нее открывает меню конфигурации. Первый шаг — выбор целевого устройства [9]. Из выпадающего меню выберите Espressif ESP-EYE (ESP32 240 МГц) [10], чтобы оптимизировать распознавание голоса ESP32 в автономном режиме. Наконец, нажмите кнопку «Сохранить» [11] в правом нижнем углу, чтобы подтвердить конфигурацию модуля распознавания голоса ESP32.

=> Шаг 4: Загрузка обучающих данных для распознавания речи ESP32 в автономном режиме
Теперь перейдем к следующему шагу рабочего процесса: сбор данных [12] голосового помощника ESP32.

Получение данных для распознавания голоса в Edge Impulse

Нажмите кнопку «Добавить данные» [13]. Откроются три варианта: «Загрузить данные», «Импорт из проекта» и «Добавить хранилище». Этот интерфейс позволяет массово загружать аудиофайлы для обучения преобразования речи в текст на ESP32.

Здесь нажмите «Загрузить данные» [14].

Загрузка данных для распознавания голоса в Edge Impulse

Появится новое меню с несколькими параметрами. Поскольку я правильно сохранил набор данных в отдельных папках, я использовал опцию Select Your Folder («Выберите свою папку») [15]. Затем я выбрал папку, используя Select Files («Выбрать файлы») [16][17][18]. После выбора папки появится сообщение с указанием количества выбранных файлов. Важный шаг: присвойте каждому набору данных соответствующую метку [20] (например, "noise", "marvin", "on", "off") для точного обучения модуля распознавания речи ESP32. Затем нажмите Upload («Загрузить») [19], чтобы завершить сбор данных для вашей модели распознавания речи ESP32 в автономном режиме.  

Самый важный шаг здесь — это маркировка данных. Поскольку я загружал наборы данных по отдельности, я сразу же маркировал их, чтобы сэкономить силы в дальнейшем. В параметрах маркировки я выбрал noise (шум) [20] для набора данных шума. Наконец, нажмите «Загрузить» [21], и данные будут успешно добавлены [22]. 

Окончание процесса загрузки данных для распознавания голоса в Edge Impulse

Аналогичным образом я добавил данные для Marvin, off и on, как показано на изображении выше. В этом проекте распознавания голоса в автономном режиме на ESP32 мы добавили наборы данных для: шума (фоновый звук), Marvin (кодовое слово активации), off и on (команды управления).

=> Шаг 5: Разработка архитектуры нейронной сети для голосового помощника ESP32

На левой панели вы увидите Impulse Design. Под ним нажмите Create Impulse [23]. Здесь выберите Processing Block [24] и Learning Block [25], затем нажмите Save Impulse [26] для вашей модели распознавания речи ESP32 в автономном режиме, а затем нажмите Save Impulse [26]. Не беспокойтесь о параметрах; параметры по умолчанию работают нормально. 

Разработка архитектуры нейронной сети для голосового помощника ESP32

После сохранения вы получите уведомление, подтверждающее успешное сохранение импульса.

=> Шаг 6: Создание признаков для автономной модели распознавания речи на ESP32

После сохранения импульса появится меню Parameters («Параметры»). Здесь пригодится опция Autotune Parameters («Автоматическая настройка параметров») [27], которая автоматически оптимизирует настройки вашего модуля распознавания голоса ESP32. Нажмите на нее, подождите немного, а затем нажмите «Сохранить параметры» [28].

Создание признаков для автономной модели распознавания речи на ESP32

Теперь нажмите Generate Features («Сгенерировать признаки») [29]. На изображении ниже вы можете увидеть, как набор данных представлен разными цветами. Чем более отчетливыми и разделенными будут цветовые кластеры, тем лучше будут результаты.

Генерация признаков для нашей модели распознавания голоса в Edge Impulse

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

=> Шаг 7: Обучение нейронной сети модуля распознавания речи ESP32

Далее вы перейдете на страницу настроек нейронной сети. Здесь вы можете настроить такие параметры, как циклы обучения [30], скорость обучения и т. д., чтобы оптимизировать производительность вашей модели распознавания речи ESP32 в автономном режиме. Большинство настроек по умолчанию работают нормально.

Обучение нейронной сети модуля распознавания речи ESP32

Я оставил настройки по умолчанию и нажал Save & Train («Сохранить и обучить») [31]. Теперь расслабьтесь, это займет некоторое время, в зависимости от размера вашего набора данных. После завершения вы увидите результаты обучения модели.

=> Шаг 8: Проверка точности модели преобразования речи в текст на ESP32

В окне Test Model («Тестовая модель») просто нажмите кнопку Classify All («Классифицировать все») [32]. Это запустит тест для автоматической оценки вашего модуля распознавания речи ESP32 на зарезервированных тестовых данных. Этот этап проверки предоставляет объективные показатели точности для вашей системы распознавания речи ESP32 в автономном режиме.

Проверка точности модели преобразования речи в текст на ESP32

Как видите, мои результаты оказались приемлемыми, поэтому я перешёл к развертыванию. Для производственных приложений голосового помощника на базе ESP32 следует стремиться к точности 90% и выше. Показатели выше 85% приемлемы для прототипов и разработки.

=> Шаг 9: Разверните модель распознавания речи ESP32 в автономном режиме в качестве библиотеки Arduino.

Перейдите в окно развертывания (Deployment). В строке поиска [33] введите Arduino Library («Библиотека Arduino») [34]. Затем нажмите кнопку Build («Сборка») [35], чтобы начать компиляцию вашего модуля распознавания голоса ESP32 в библиотеку, совместимую с Arduino.

Экспорт модели распознавания голоса в библиотеку Arduino

После завершения сборки вам будет предложено сохранить библиотеку [36]. Библиотека будет загружена в виде .zip- файла.

=> Шаг 10: Установите библиотеку и настройте код голосового помощника ESP32

Откройте Arduino IDE и перейдите в Sketch -> Include Library -> Add .ZIP Library [37]. Выберите загруженную библиотеку [38] и нажмите Open [39], чтобы установить фреймворк модуля распознавания голоса ESP32.

Установка библиотеки для распознавания голоса в Arduino IDE

Теперь перейдите в File -> Examples -> [Название вашего проекта]_Inferencing -> esp32 -> esp32_microphone, чтобы открыть пример программы [40]. Это код, который вы загрузите на плату ESP32. Этот предварительно настроенный скетч предоставляет полную отправную точку для вашего голосового помощника ESP32, включая код захвата звука, предварительной обработки и вывода, оптимизированный для преобразования речи в текст на ESP32.

Теперь перейдём к аппаратной части!

Сборка аппаратной части проекта

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

Необходимые компоненты для модуля распознавания голоса на основе ESP32 представлены в следующей таблице.

Необходимые компоненты для модуля распознавания голоса на основе ESP32

Схема проекта имеет следующий вид.

Схема проекта для автономного распознавания голоса на ESP32

Распиновка микрофонного модуля INMP441 

Здесь используются два светодиода, каждый из которых выполняет свою отдельную функцию. Один — это индикаторный светодиод [23] для обнаружения ключевого слова и состояния распознавания голоса. Другой — это управляющий светодиод [GPIO22], который можно включать и выключать с помощью команд. Микрофон INMP441 MEMS использует протокол I?S (Inter-IC Sound) для высококачественной передачи звука на ваш голосовой помощник ESP32. Два светодиода обеспечивают важную визуальную обратную связь для вашей системы распознавания речи ESP32 в автономном режиме. Правильное подключение контактов имеет решающее значение для надежного распознавания голоса ESP32 в автономном режиме: 

Основным компонентом является микрофонный модуль: высокоточный всенаправленный микрофонный модуль MEMS INMP441. Этот модуль имеет шесть контактов: 

  1. L/R [3V3]
  2. WS [25]
  3. SCK [26]
  4. SD [33]
  5. VDD [3V3]
  6. GND [GND]

В библиотеке Arduino, загруженной с сайта Edge Impulse, по умолчанию используются следующие эти же самые контакты. Использование этих контактов по умолчанию позволяет программе-примеру работать без каких-либо изменений в коде. На схеме выше показаны контакты для нашего модифицированного кода, но изменить их легко, если вы хотите адаптировать программу под какой то другой проект.

Схема подключений микрофонного модуля INMP441 к плате ESP32 представлена в следующей таблице.

Выполнение кода преобразования речи в текст на ESP32

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

Files -> Examples -> “[Название вашего проекта]”_Inferencing -> esp32 -> esp32_microphone[40]. Этот простой пример позволяет протестировать модель в реальном времени с вашим оборудованием.

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

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

i2s_pin_config_t pin_config = {

     .bck_io_num = 26,    // IIS_SCLK

     .ws_io_num = 32,     // IIS_LCLK

     .data_out_num = -1,  // IIS_DSIN

     .data_in_num = 33,   // IIS_DOUT

};

В мониторе последовательного порта можно наблюдать за процессом распознавания речи в режиме реального времени, где отображается уровень достоверности для каждого обученного слова. Такая гибкость позволяет адаптировать модуль распознавания речи ESP32 к конкретной схеме расположения контактов.

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

Модифицированный код для проекта голосового управления на ESP32

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

Этот код предназначен для усовершенствованной системы управления светодиодами с помощью голоса, использующей ESP32 и машинное обучение Edge Impulse для распознавания ключевых слов («marvin») и команд («on»/«off»). Система использует два пороговых значения достоверности и обеспечивает исчерпывающую визуальную обратную связь. Усовершенствованный код преобразует базовый пример в готовую к использованию автономную систему распознавания речи на ESP32 с распознаванием ключевых слов, обработкой команд и визуальной обратной связью. Давайте рассмотрим ключевые компоненты, которые делают этого голосового помощника на ESP32 интеллектуальным и отзывчивым.

Подключенные библиотеки

  1. ESP32_STT_Recognition_inferencing.h – библиотека развертывания Edge Impulse. В моем коде она называется ESP32_STT_Recognition_inferencing. В вашем случае это будет [Название вашего проекта]_inferencing. Вы можете проверить это, открыв пример программы из установленной библиотеки.
  2. freertos/FreeRTOS.h, freertos/task.h – Компоненты операционной системы реального времени, обеспечивающие многозадачность для параллельного захвата и обработки звука.
  3. driver/i2s.h – драйвер аудио I2S для ESP32, используемый для взаимодействия с цифровым MEMS-микрофоном для ввода звука.

Структуры данных, константы и переменные конфигурации

  1. Основные библиотеки для модуля распознавания голоса ESP32

typedef struct {

   int16_t *buffer;        // Audio sample storage

   uint8_t buf_ready;      // Flag: buffer ready for processing

   uint32_t buf_count;     // Current write position

   uint32_t n_samples;     // Total buffer capacity

} inference_t;

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

2. Система двойного порога достоверности для точного распознавания речи на ESP32 в автономном режиме.

const float COMMAND_CONFIDENCE_THRESHOLD = 0.80;

const float RECOGNITION_CONFIDENCE_THRESHOLD = 0.50;

Порог уверенности команды (COMMAND_CONFIDENCE_THRESHOLD) используется для выполнения команд, а порог уверенности распознавания (RECOGNITION_CONFIDENCE_THRESHOLD) — только для индикации. Более высокие пороговые значения предотвращают ложное выполнение команд.

3. Настройка синхронизации

const unsigned long LISTENING_DURATION_MS = 10000;

Это временной интервал после произнесения кодового слова, в течение которого принимаются команды.

4. Определение аппаратных контактов для преобразования речи в текст на ESP32

const int CONTROL_LED_PIN = 22;  

const int INDICATOR_LED_PIN = 23;

CONTROL_LED_PIN — это основной управляемый светодиод, а INDICATOR_LED_PIN обеспечивает обратную связь о состоянии.

5. Обработка звука

static const uint32_t sample_buffer_size = 2048;

Это размер буфера I2S DMA для захвата звука.

6. Управление состоянием для автономного распознавания голоса на ESP32

static bool wake_word_detected = false;

static unsigned long wake_word_timestamp = 0;

static bool listening_mode = false;      

static bool led_state = false;        

static inference_t inference;      

static signed short sampleBuffer[2048];        

static bool debug_nn = false;              

static bool record_status = true;

Эти переменные управляют состоянием обнаружения, временем, режимом прослушивания, состоянием светодиода, состоянием записи, аудиобуфером и флагами отладки. Они отслеживают полное состояние вашей автономной системы распознавания речи на ESP32, управляя обнаружением ключевого слова, временем выполнения команды, состоянием светодиода и управлением аудиобуфером.

Функция setup()

1. Последовательная связь

Откройте последовательный монитор Arduino IDE (115200 бод), чтобы просмотреть данные, полученные в режиме реального времени от вашей системы распознавания речи на базе ESP32 в автономном режиме.

Serial.begin(115200);

while (!Serial); // optional

Настраивает последовательный интерфейс для отладки и мониторинга на скорости 115200 бод.

2. Конфигурация контактов оборудования

pinMode(CONTROL_LED_PIN, OUTPUT);

digitalWrite(CONTROL_LED_PIN, LOW);

pinMode(INDICATOR_LED_PIN, OUTPUT);

digitalWrite(INDICATOR_LED_PIN, LOW);

Настраивает контакты GPIO для управления светодиодами и инициализирует их в выключенном состоянии.

3. Инициализация аудиосистемы

if (microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT) == false) {

   ei_printf("ERR: Could not allocate audio buffer ");

   Return;

}

Выделяет аудиобуфер, инициализирует микрофон I2S и запускает задачу захвата.

Функция основного цикла

Функция loop() работает непрерывно и выполняет три ключевые операции:

1. Захват звука

bool m = microphone_inference_record();

if (!m) {

   ei_printf("ERR: Failed to record audio... ");

   return;

}

Ожидает заполнения аудиобуфера новыми сэмплами.

2. Вывод машинного обучения

signal_t signal;

signal.total_length = EI_CLASSIFIER_RAW_SAMPLE_COUNT;

signal.get_data = &microphone_audio_signal_get_data;

EI_IMPULSE_ERROR r = run_classifier(&signal, &result, debug_nn);

Запускает классификатор Edge Impulse для распознавания речи и предоставляет уровни достоверности для каждого обученного слова.

3. Обработка команд

handle_wake_word_and_commands(result);v

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

4. Отладочный вывод

ei_printf("Predictions (DSP: %d ms., Classification: %d ms.): ", ...);

for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {

   ei_printf("    %s: %.2f ", result.classification[ix].label, ...);

}

Отображает время выполнения вычислений и показатели достоверности для всех классов.

Пользовательские функции

Существует четыре основные категории пользовательских функций:

1. Система визуальной обратной связи на основе светодиодов

show_wake_word_pattern()

show_listening_mode()

show_turning_on_pattern()

show_turning_off_pattern()

show_general_recognition_pattern()

stop_listening_mode()

Они управляют светодиодным индикатором, показывающим, что делает система. Например:

  • При произнесении слова "Marvin" светодиод быстро мигает два раза.
  • Светодиод остается включенным во время ожидания команды.
  • При произнесении слова «on» светодиод мигает, подтверждая действие.
  • Произнесение слова «off» создает эффект затухания.
  • Другие слова вызывают однократное быстрое моргание.
  • Функция stop_listening_mode() отключает индикатор по завершении окна прослушивания.

2. Функция обработки команд

handle_wake_word_and_commands(ei_impulse_result_t &result)

Это «мозг» системы. Она находит слово с наивысшим показателем достоверности. Слова с показателем достоверности выше 50% мигают один раз в качестве обратной связи. Команды выполняются только в том случае, если достоверность превышает 80%. Обнаружение слова «marvin» запускает режим прослушивания, затем команды «on»/«off» управляют основным светодиодом. Этот двухэтапный процесс предотвращает случайные включения.

3. Функции системы захвата и обработки звука

audio_inference_callback(uint32_t n_bytes)

capture_samples(void* arg)

microphone_inference_start(uint32_t n_samples)

microphone_inference_record(void)

microphone_audio_signal_get_data(size_t offset, size_t length, float *out_ptr)

microphone_inference_end(void)

Эти функции обрабатывают непрерывный аудиовход. Функция capture_samples работает в фоновом режиме, считывая аудио с микрофона I2S и усиливая его. Данные копируются в буфер, и когда он заполняется, отправляются на обработку. Функции преобразуют аудио в формат, необходимый для модели машинного обучения, и управляют памятью и фоновыми задачами.

4. Аппаратный интерфейс I2S

i2s_init(uint32_t sampling_rate)

i2s_deinit(void)

Эти параметры настраивают аппаратную часть I2S на ESP32. Функция i2s_init устанавливает частоту дискретизации (16 кГц), буферы DMA и контакты GPIO (26 для тактирования битов, 25 для выбора слова, 33 для ввода данных). Запись звука происходит непрерывно без нагрузки на процессор. Функция i2s_deinit корректно завершает работу I2S, хотя в этой постоянно включенной конфигурации она не используется.

Благодаря этому объяснению у вас теперь есть чёткое представление о том, как работает код этого проекта. Далее мы рассмотрим его на практике.

Тестирование системы распознавания речи на ESP32 в автономном режиме

После успешной загрузки кода вы можете начать наблюдать за его работой в режиме голосового помощника ESP32. Принцип работы прост. Он использует кодовое слово «Marvin». После распознавания этого слова он будет ждать 10 секунд пока не будет распознано кодовое слово. Затем кодовое слово распознается и используется для выполнения определенных функций, например, включения или выключения света. Система работает по простой двухэтапной структуре команд, оптимизированной для надежного распознавания голоса ESP32 в автономном режиме.

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

Репозиторий GitHub 

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

Схема и код проекта распознавания голоса на ESP32


Источник: microkontroller.ru

Комментарии: