[Перевод] Распознавание речи при помощи Arduino Nano: пример простой системы

image

Разработчик по имени Питер, как и многие из нас, попал на долгое время в ловушку карантина. У него появилось свободное время, причем много, и Питер решил разработать систему распознавания речи на базе Arduino Nano.

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

Основные элементы системы


Главный аппаратный компонент — Arduino Nano. Контроллер используется для запуска алгоритма распознавания речи. Также есть микрофонный усилитель MAX9814 для захвата голосовых команд.

Что касается софта, то разработчик научил взаимодействовать написанный им софт для ПК и Arduino Nano. Обучение алгоритма выполняется на ПК, но реализация выполняется в реальном времени на Arduino Nano. В целом, это типичный подход для большинства систем машинного обучения, разворачиваемых на микроконтроллере. Чтобы записать образцы звуковых команд или высказываний, создатель системы сначала должен был оптимизировать АЦП Nano, чтобы он мог получить достаточную частоту дискретизации для обработки речи. Немного запрограммировав низкоуровневую систему, он достиг частоты дискретизации 9 кбит / с, чего уже вполне достаточно для обработки звука.

image

Чтобы проанализировать речь, он сначала разделил каждый образец на сегменты по 50 мс. Это необходимо для разделении одного произнесенного слова на разные слоги. Возьмем, например, слово «seven». Как анализировать «se-» в «семи» отдельно от »-ven»? Нужно определить сегменты, каждый из которых сможет уместить произнесенный слог. 50 мс, как посчитал разработчик — оптимальное время для сегмента. Затем он рассчитал энергию 5 различных частотных диапазонов для каждого сегмента каждого высказывания. Обычно это делается с помощью преобразования Фурье, но у Nano недостаточно вычислительной мощности для вычисления преобразования Фурье в реальном времени. Поэтому Питер попробовал другой подход: он реализовал 5 наборов цифровых полосовых фильтров, что позволило ему более легко вычислять энергию сигнала в каждой полосе частот.

Энергия каждой полосы частот для каждого сегмента затем отправляется на ПК, где специализированный софт создает «шаблоны» на основе образцовых высказываний, которые он генерирует. Суть его алгоритма заключается в сравнении того, насколько близка энергия каждой полосы частот для каждого высказывания (и для каждого сегмента) к шаблону. Программа для ПК создает файл .h, который можно скомпилировать прямо на Nano. Питер использует пример распознавания произнесенных чисел — от 0 до 9, но вы можете изменить эти команды, например, на «старт» или «стоп», если захотите.

Результат


Что получилось в итоге? Миниатюрная система распознавания отдельных команд. Конечно, все слова она распознавать не может, лишь те из них, что заданы изначально. На основе этой системы можно создать нечто более совершенное, но в качестве демонстрации возможностей систем распознавания речи этот проект неплох. Более подробно о проекте можно узнать по этой ссылке.

© Habrahabr.ru