Автономное распознавание голоса на ESP32 с использованием Edge Impulse |
||||||||||||||||||||||||||||||||||||||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2026-02-12 11:21 алгоритмы распознавания речи, распознавание образов, алгоритмы машинного обучения Распознавание голоса становится неотъемлемой частью Интернета вещей (IoT), позволяя нам управлять устройствами, отслеживать их состояние и взаимодействовать с ними без помощи рук. В основе работы ESP32 по преобразованию речи в текст лежит захват звука через микрофон, его обработка и преобразование в текст, понятный устройствам. Затем этот текст используется для запуска команд, подобно тому, как Alexa или Google Assistant реагируют на ваш голос. Интересно, что системы распознавания голоса ESP32 в автономном режиме часто используют сочетание периферийных и облачных вычислений, при этом часть обработки выполняется непосредственно на устройстве, а остальная часть — в облаке. Это подводит нас к сегодняшнему проекту, в котором мы создадим миниатюрный, но расширяемый голосовой помощник на базе ESP32 с использованием Edge Impulse, где ESP32 будет выступать в качестве основного микроконтроллера. Цель автономного (offline) распознавания речи на ESP32 — сохранить простоту, оставив при этом возможность для будущих улучшений. Итак, без дальнейших промедлений, давайте начнём!
Также на нашем сайте вы можете посмотреть и другие проекты по распознаванию голоса и преобразованию речи в текст: Компоненты для нашего проекта
Как видите, набор компонентов достаточно простой. Принципы работы проекта Основная цель этого проекта — реализовать распознавание речи на ESP32 в автономном режиме. В то время как большинство проектов в интернете полагаются на сторонние API, такие как Google TTS, здесь мы используем другой подход с помощью Edge Impulse. Вместо облачных решений мы реализуем модуль распознавания голоса на ESP32 с использованием Edge Impulse для машинного обучения непосредственно на устройстве. На самом деле, вы даже можете использовать TensorFlow Lite напрямую, если хотите, хотя это немного сложнее; мы рассмотрим это в другой статье. А пока давайте сосредоточимся на методе Edge Impulse. Этот подход гарантирует, что ваш голосовой помощник на ESP32 будет работать независимо, без подключения к интернету, что делает его идеальным для приложений, заботящихся о конфиденциальности, и удаленных развертываний IoT.
Основные характеристики системы преобразования речи в текст на базе ESP32 ? Полностью автономная работа — отсутствие зависимости от облака для распознавания голоса на ESP32 в автономном режиме. Пошаговый алгоритм работы распознавания голоса на ESP32 В этой конфигурации основную работу выполняет сервис 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. ![]() Здесь нажмите кнопку «Вход» [3] в правом верхнем углу. Для удобства я выбрал вариант « Продолжить с Google» [4]. После выполнения необходимых шагов вы должны попасть на главную страницу Edge Impulse. => Шаг 2: Инициализация проекта распознавания речи ESP32 ![]() Введите имя для вашего проекта [6]. Это имя будет использоваться до окончательного экспорта библиотеки Arduino. Тип проекта по умолчанию будет Personal («Личный»), а настройка — Private («Частный»). Наконец, нажмите Create New Project («Создать новый проект») [7]. После успешного создания проекта вы увидите его главную страницу. => Шаг 3: Настройка целевого устройства ESP32 для распознавания голоса ЕСТЬ ПРОТИВОПОКАЗАНИЯ.ПОСОВЕТУЙТЕСЬ С ВРАЧОМ На странице проекта первым делом необходимо настроить целевое устройство и бюджет приложения. Правильная настройка устройства обеспечит оптимальную производительность вашей модели преобразования речи в текст на ESP32. ![]() В правом верхнем углу вы увидите кнопку Target: Cortex-M4F 80 MHz («Цель: Cortex-M4F 80 МГц») [8]. Нажатие на нее открывает меню конфигурации. Первый шаг — выбор целевого устройства [9]. Из выпадающего меню выберите Espressif ESP-EYE (ESP32 240 МГц) [10], чтобы оптимизировать распознавание голоса ESP32 в автономном режиме. Наконец, нажмите кнопку «Сохранить» [11] в правом нижнем углу, чтобы подтвердить конфигурацию модуля распознавания голоса ESP32. => Шаг 4: Загрузка обучающих данных для распознавания речи ESP32 в автономном режиме
Нажмите кнопку «Добавить данные» [13]. Откроются три варианта: «Загрузить данные», «Импорт из проекта» и «Добавить хранилище». Этот интерфейс позволяет массово загружать аудиофайлы для обучения преобразования речи в текст на ESP32. Здесь нажмите «Загрузить данные» [14].
Появится новое меню с несколькими параметрами. Поскольку я правильно сохранил набор данных в отдельных папках, я использовал опцию Select Your Folder («Выберите свою папку») [15]. Затем я выбрал папку, используя Select Files («Выбрать файлы») [16][17][18]. После выбора папки появится сообщение с указанием количества выбранных файлов. Важный шаг: присвойте каждому набору данных соответствующую метку [20] (например, "noise", "marvin", "on", "off") для точного обучения модуля распознавания речи ESP32. Затем нажмите Upload («Загрузить») [19], чтобы завершить сбор данных для вашей модели распознавания речи ESP32 в автономном режиме. Самый важный шаг здесь — это маркировка данных. Поскольку я загружал наборы данных по отдельности, я сразу же маркировал их, чтобы сэкономить силы в дальнейшем. В параметрах маркировки я выбрал noise (шум) [20] для набора данных шума. Наконец, нажмите «Загрузить» [21], и данные будут успешно добавлены [22].
Аналогичным образом я добавил данные для 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]. Не беспокойтесь о параметрах; параметры по умолчанию работают нормально. ![]() После сохранения вы получите уведомление, подтверждающее успешное сохранение импульса. => Шаг 6: Создание признаков для автономной модели распознавания речи на ESP32 После сохранения импульса появится меню Parameters («Параметры»). Здесь пригодится опция Autotune Parameters («Автоматическая настройка параметров») [27], которая автоматически оптимизирует настройки вашего модуля распознавания голоса ESP32. Нажмите на нее, подождите немного, а затем нажмите «Сохранить параметры» [28]. ![]() Теперь нажмите Generate Features («Сгенерировать признаки») [29]. На изображении ниже вы можете увидеть, как набор данных представлен разными цветами. Чем более отчетливыми и разделенными будут цветовые кластеры, тем лучше будут результаты. ![]() В моем случае кластеры располагались довольно близко друг к другу, поэтому разделение было не очень четким. Кластеры, обозначенные разными цветами, представляют различные голосовые команды в вашей системе распознавания голоса на ESP32 в автономном режиме. Хорошо разделенные кластеры (различные цвета с минимальным перекрытием) указывают на высокое качество обучающих данных и предсказывают более высокую точность для вашего модуля распознавания голоса на ESP32. => Шаг 7: Обучение нейронной сети модуля распознавания речи ESP32 Далее вы перейдете на страницу настроек нейронной сети. Здесь вы можете настроить такие параметры, как циклы обучения [30], скорость обучения и т. д., чтобы оптимизировать производительность вашей модели распознавания речи ESP32 в автономном режиме. Большинство настроек по умолчанию работают нормально. ![]() Я оставил настройки по умолчанию и нажал Save & Train («Сохранить и обучить») [31]. Теперь расслабьтесь, это займет некоторое время, в зависимости от размера вашего набора данных. После завершения вы увидите результаты обучения модели. => Шаг 8: Проверка точности модели преобразования речи в текст на ESP32 В окне Test Model («Тестовая модель») просто нажмите кнопку Classify All («Классифицировать все») [32]. Это запустит тест для автоматической оценки вашего модуля распознавания речи ESP32 на зарезервированных тестовых данных. Этот этап проверки предоставляет объективные показатели точности для вашей системы распознавания речи ESP32 в автономном режиме. ![]() Как видите, мои результаты оказались приемлемыми, поэтому я перешёл к развертыванию. Для производственных приложений голосового помощника на базе ESP32 следует стремиться к точности 90% и выше. Показатели выше 85% приемлемы для прототипов и разработки. => Шаг 9: Разверните модель распознавания речи ESP32 в автономном режиме в качестве библиотеки Arduino. Перейдите в окно развертывания (Deployment). В строке поиска [33] введите Arduino Library («Библиотека Arduino») [34]. Затем нажмите кнопку Build («Сборка») [35], чтобы начать компиляцию вашего модуля распознавания голоса ESP32 в библиотеку, совместимую с Arduino.
После завершения сборки вам будет предложено сохранить библиотеку [36]. Библиотека будет загружена в виде .zip- файла. => Шаг 10: Установите библиотеку и настройте код голосового помощника ESP32 Откройте Arduino IDE и перейдите в Sketch -> Include Library -> Add .ZIP Library [37]. Выберите загруженную библиотеку [38] и нажмите Open [39], чтобы установить фреймворк модуля распознавания голоса ESP32.
Теперь перейдите в File -> Examples -> [Название вашего проекта]_Inferencing -> esp32 -> esp32_microphone, чтобы открыть пример программы [40]. Это код, который вы загрузите на плату ESP32. Этот предварительно настроенный скетч предоставляет полную отправную точку для вашего голосового помощника ESP32, включая код захвата звука, предварительной обработки и вывода, оптимизированный для преобразования речи в текст на ESP32. Теперь перейдём к аппаратной части! Сборка аппаратной части проекта Аппаратная часть этого проекта по распознаванию речи на ESP32 проста и требует минимального количества компонентов. Схема состоит из двух светодиодов, одного микрофона и основного модуля ESP32. Ниже представлена принципиальная схема, которую необходимо реализовать. Эта конфигурация создаст полностью функциональный голосовой помощник на ESP32, способный распознавать ключевые слова и выполнять команды. Необходимые компоненты для модуля распознавания голоса на основе ESP32 представлены в следующей таблице. ![]() Схема проекта имеет следующий вид. ![]() Распиновка микрофонного модуля INMP441 Здесь используются два светодиода, каждый из которых выполняет свою отдельную функцию. Один — это индикаторный светодиод [23] для обнаружения ключевого слова и состояния распознавания голоса. Другой — это управляющий светодиод [GPIO22], который можно включать и выключать с помощью команд. Микрофон INMP441 MEMS использует протокол I?S (Inter-IC Sound) для высококачественной передачи звука на ваш голосовой помощник ESP32. Два светодиода обеспечивают важную визуальную обратную связь для вашей системы распознавания речи ESP32 в автономном режиме. Правильное подключение контактов имеет решающее значение для надежного распознавания голоса ESP32 в автономном режиме: Основным компонентом является микрофонный модуль: высокоточный всенаправленный микрофонный модуль MEMS INMP441. Этот модуль имеет шесть контактов:
В библиотеке Arduino, загруженной с сайта Edge Impulse, по умолчанию используются следующие эти же самые контакты. Использование этих контактов по умолчанию позволяет программе-примеру работать без каких-либо изменений в коде. На схеме выше показаны контакты для нашего модифицированного кода, но изменить их легко, если вы хотите адаптировать программу под какой то другой проект. Схема подключений микрофонного модуля INMP441 к плате ESP32 представлена в следующей таблице. ![]() Выполнение кода преобразования речи в текст на ESP32 Прежде чем переходить к расширенным функциям, протестируйте базовую функциональность голосового помощника ESP32, используя пример программы Edge Impulse. Files -> Examples -> “[Название вашего проекта]”_Inferencing -> esp32 -> esp32_microphone[40]. Этот простой пример позволяет протестировать модель в реальном времени с вашим оборудованием. ![]() В коде вы найдете следующий фрагмент. Вы можете использовать его для соответствующей настройки вашей схемы или изменения контактов в коде, чтобы он заработал. Этот простой пример демонстрирует преобразование речи в текст в реальном времени с помощью ESP32. Последовательный монитор отображает уровни достоверности для каждого обученного слова, показывая, как ваша модель распознавания голоса ESP32 в автономном режиме интерпретирует аудиовход.
В мониторе последовательного порта можно наблюдать за процессом распознавания речи в режиме реального времени, где отображается уровень достоверности для каждого обученного слова. Такая гибкость позволяет адаптировать модуль распознавания речи ESP32 к конкретной схеме расположения контактов. Используя этот уровень достоверности, вы можете вносить изменения в код для добавления более сложных функций. Модифицированный код для проекта голосового управления на ESP32 Выше рассмотренный пример кода был изменен чтобы включить такие функции как распознавание ключевого слова для активации, управление светодиодами и многое другое. Давайте рассмотрим принципы работы этого модифицированного кода. Этот код предназначен для усовершенствованной системы управления светодиодами с помощью голоса, использующей ESP32 и машинное обучение Edge Impulse для распознавания ключевых слов («marvin») и команд («on»/«off»). Система использует два пороговых значения достоверности и обеспечивает исчерпывающую визуальную обратную связь. Усовершенствованный код преобразует базовый пример в готовую к использованию автономную систему распознавания речи на ESP32 с распознаванием ключевых слов, обработкой команд и визуальной обратной связью. Давайте рассмотрим ключевые компоненты, которые делают этого голосового помощника на ESP32 интеллектуальным и отзывчивым. Подключенные библиотеки
Структуры данных, константы и переменные конфигурации
Эта структура позволяет управлять кольцевым буфером для захвата звука в реальном времени и обработки машинным обучением. Эти библиотеки обеспечивают многозадачность для параллельного захвата звука и вывода результатов машинного обучения, что крайне важно для быстрого распознавания речи на ESP32 в автономном режиме. FreeRTOS гарантирует, что ваш голосовой помощник на ESP32 сможет одновременно записывать звук, обрабатывать речь и управлять выводом без блокировки. 2. Система двойного порога достоверности для точного распознавания речи на ESP32 в автономном режиме.
Порог уверенности команды (COMMAND_CONFIDENCE_THRESHOLD) используется для выполнения команд, а порог уверенности распознавания (RECOGNITION_CONFIDENCE_THRESHOLD) — только для индикации. Более высокие пороговые значения предотвращают ложное выполнение команд. 3. Настройка синхронизации
Это временной интервал после произнесения кодового слова, в течение которого принимаются команды. 4. Определение аппаратных контактов для преобразования речи в текст на ESP32
CONTROL_LED_PIN — это основной управляемый светодиод, а INDICATOR_LED_PIN обеспечивает обратную связь о состоянии. 5. Обработка звука
Это размер буфера I2S DMA для захвата звука. 6. Управление состоянием для автономного распознавания голоса на ESP32
Эти переменные управляют состоянием обнаружения, временем, режимом прослушивания, состоянием светодиода, состоянием записи, аудиобуфером и флагами отладки. Они отслеживают полное состояние вашей автономной системы распознавания речи на ESP32, управляя обнаружением ключевого слова, временем выполнения команды, состоянием светодиода и управлением аудиобуфером. Функция setup() 1. Последовательная связь Откройте последовательный монитор Arduino IDE (115200 бод), чтобы просмотреть данные, полученные в режиме реального времени от вашей системы распознавания речи на базе ESP32 в автономном режиме.
Настраивает последовательный интерфейс для отладки и мониторинга на скорости 115200 бод. 2. Конфигурация контактов оборудования
Настраивает контакты GPIO для управления светодиодами и инициализирует их в выключенном состоянии. 3. Инициализация аудиосистемы
Выделяет аудиобуфер, инициализирует микрофон I2S и запускает задачу захвата. Функция основного цикла Функция loop() работает непрерывно и выполняет три ключевые операции: 1. Захват звука
Ожидает заполнения аудиобуфера новыми сэмплами. 2. Вывод машинного обучения
Запускает классификатор Edge Impulse для распознавания речи и предоставляет уровни достоверности для каждого обученного слова. 3. Обработка команд
Обрабатывает результаты машинного обучения и выполняет соответствующие действия. 4. Отладочный вывод
Отображает время выполнения вычислений и показатели достоверности для всех классов. Пользовательские функции Существует четыре основные категории пользовательских функций: 1. Система визуальной обратной связи на основе светодиодов
Они управляют светодиодным индикатором, показывающим, что делает система. Например:
2. Функция обработки команд
Это «мозг» системы. Она находит слово с наивысшим показателем достоверности. Слова с показателем достоверности выше 50% мигают один раз в качестве обратной связи. Команды выполняются только в том случае, если достоверность превышает 80%. Обнаружение слова «marvin» запускает режим прослушивания, затем команды «on»/«off» управляют основным светодиодом. Этот двухэтапный процесс предотвращает случайные включения. 3. Функции системы захвата и обработки звука
Эти функции обрабатывают непрерывный аудиовход. Функция capture_samples работает в фоновом режиме, считывая аудио с микрофона I2S и усиливая его. Данные копируются в буфер, и когда он заполняется, отправляются на обработку. Функции преобразуют аудио в формат, необходимый для модели машинного обучения, и управляют памятью и фоновыми задачами. 4. Аппаратный интерфейс I2S
Эти параметры настраивают аппаратную часть I2S на ESP32. Функция i2s_init устанавливает частоту дискретизации (16 кГц), буферы DMA и контакты GPIO (26 для тактирования битов, 25 для выбора слова, 33 для ввода данных). Запись звука происходит непрерывно без нагрузки на процессор. Функция i2s_deinit корректно завершает работу I2S, хотя в этой постоянно включенной конфигурации она не используется. Благодаря этому объяснению у вас теперь есть чёткое представление о том, как работает код этого проекта. Далее мы рассмотрим его на практике. Тестирование системы распознавания речи на ESP32 в автономном режиме После успешной загрузки кода вы можете начать наблюдать за его работой в режиме голосового помощника ESP32. Принцип работы прост. Он использует кодовое слово «Marvin». После распознавания этого слова он будет ждать 10 секунд пока не будет распознано кодовое слово. Затем кодовое слово распознается и используется для выполнения определенных функций, например, включения или выключения света. Система работает по простой двухэтапной структуре команд, оптимизированной для надежного распознавания голоса ESP32 в автономном режиме. Таким образом, у вас должно сложиться четкое представление о проекте в целом. Вы можете добавлять любые функции, чтобы расширить этот проект в соответствии со своей фантазией — это всего лишь моя реализация. Одна из сложностей — найти подходящий набор данных; если он будет соответствовать вашим требованиям, все должно работать отлично. Репозиторий GitHub Посетите репозиторий GitHub, чтобы загрузить исходный код, внести изменения и без проблем развернуть проект. Источник: microkontroller.ru Комментарии: |
|||||||||||||||||||||||||||||||||||||