No Image

Arduino модуль распознавания речи

СОДЕРЖАНИЕ
679 просмотров
10 марта 2020

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

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

В данной статье рассмотрим один из самых простых способов научить Arduino понимать голосовые команды — Elechouse Voice Recognition Module. В качестве примера будем управлять светодиодом. Голосовой командой мы сможем его включить, выключить или заставить мигать.

Для работы нам потребуется:

Устройство собиралось на макетной плате MB-102 с джамперами.

Подключение

Подключение модуля очень простое. Всего два пина: TX и RX. Их надо подключить к выходам Arduino 2 и 3 соответственно. Запитать модуль следует от 5V.

Обучение командам

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

Откройте проект vr_simple_train, поставляем в комплекте с библиотекой VoiceRecognitionV3.

Файл — Примеры — VoiceReocgnitionV3 — vr_simple_train

Залейте этот скетч в Arduino и откройте Монитор порта (СервисМонитор порта или нажмите Ctrl + Shift + M на клавиатуре)

Обязательно надо выставить скорость обмена (baud rate) 115200 и отправку по новой строке.

Перед нами интерфейс управления голосовыми командами. Введите в верхнее поле settings и нажмите кнопку "Послать".

Модуль ответит нам своими текущими настройками. Это значит, что все хорошо и можно приступать непосредственно к обучению команд.

За обучение командам отвечает функция sigtrain.

Введите в поле команду sigtrain 0 On и нажмите на кнопку "Послать". Команда означает, что в ячейку памяти мы хотим записать команду с сигнатурой On. Сигнатура это некий уникальный ярлык, который описывает вашу команду.

Когда в окне появится фраза "Speak now", то следует проговорить в микрофон нашу команду "Зажгись".

После появления фразы "Speak again", проговорите фразу еще раз.

Если оба слова совпали, то модуль выдаст Success: 1, что означает, что мы только успешно записали команду On.

Если же модуль не смог сопоставить две голосовых команды (например, было шумно в помещении или вы произносили просто разные слова), то модуль ответит фразой "Cann’t match" и предложит начать процесс записи команды еще раз до тех пор, пока не будут предоставлены верные данные.

То же самое надо проделать и с другими нашими командами "Выключись" и "Мигай", но использовать надо другие ячейки памяти (1 и 2) и другие сигнатуры (Off и Blink)

Делай, что я говорю!

Модуль настроен и знает целых три команды. Залейте в Arduino следующий скетч:

Скетч ожидает от модуля голосовую команду и исполняет ее.

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

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

В данной статье рассмотрим один из самых простых способов научить Arduino понимать голосовые команды — Elechouse Voice Recognition Module. В качестве примера будем управлять светодиодом. Голосовой командой мы сможем его включить, выключить или заставить мигать.

Для работы нам потребуется:

Устройство собиралось на макетной плате MB-102 с джамперами.

Подключение

Подключение модуля очень простое. Всего два пина: TX и RX. Их надо подключить к выходам Arduino 2 и 3 соответственно. Запитать модуль следует от 5V.

Обучение командам

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

Откройте проект vr_simple_train, поставляем в комплекте с библиотекой VoiceRecognitionV3.

Файл — Примеры — VoiceReocgnitionV3 — vr_simple_train

Залейте этот скетч в Arduino и откройте Монитор порта (СервисМонитор порта или нажмите Ctrl + Shift + M на клавиатуре)

Обязательно надо выставить скорость обмена (baud rate) 115200 и отправку по новой строке.

Перед нами интерфейс управления голосовыми командами. Введите в верхнее поле settings и нажмите кнопку "Послать".

Модуль ответит нам своими текущими настройками. Это значит, что все хорошо и можно приступать непосредственно к обучению команд.

За обучение командам отвечает функция sigtrain.

Введите в поле команду sigtrain 0 On и нажмите на кнопку "Послать". Команда означает, что в ячейку памяти мы хотим записать команду с сигнатурой On. Сигнатура это некий уникальный ярлык, который описывает вашу команду.

Когда в окне появится фраза "Speak now", то следует проговорить в микрофон нашу команду "Зажгись".

После появления фразы "Speak again", проговорите фразу еще раз.

Если оба слова совпали, то модуль выдаст Success: 1, что означает, что мы только успешно записали команду On.

Читайте также:  Чем открыть video ts на windows 10

Если же модуль не смог сопоставить две голосовых команды (например, было шумно в помещении или вы произносили просто разные слова), то модуль ответит фразой "Cann’t match" и предложит начать процесс записи команды еще раз до тех пор, пока не будут предоставлены верные данные.

То же самое надо проделать и с другими нашими командами "Выключись" и "Мигай", но использовать надо другие ячейки памяти (1 и 2) и другие сигнатуры (Off и Blink)

Делай, что я говорю!

Модуль настроен и знает целых три команды. Залейте в Arduino следующий скетч:

Скетч ожидает от модуля голосовую команду и исполняет ее.

А помните, как несколько лет назад (а может быть и сейчас) была популярна идея управления светом в комнате при помощи хлопков в ладоши? А, ведь, это очень удобно, лежишь в постели, лень встать и хлопком в ладоши выключается свет или заходим домой, темно, нащупать выключатель долго, а тут с самого порога хлопок или два и свет уже горит. Мне кажется, что эта концепция актуальна до сих пор, но к ней можно применить уже более высокие технологии по сравнению с теми, что были 5 лет, 10 лет назад. Теперь за сравнительно небольшую сумму можно купить несколько деталей и запрограммировать конструкцию на подобные функции, о чем пойдет речь ниже.

Сегодня рассмотрим модуль, предназначенный для распознавания голосовых команд (в том числе и просто голоса в рамках записанной голосовой команды) – Voice recognition module V3.1 (V3) или часто встречающуюся кодировку название FZ0475.

В комплект поставки входит сам модуль (печатная плата очень хорошего качества), микрофон на гибкой ножке с разъемом 3,5 мм jack и угловые PLS контакты с шагом 2,56 мм для платы модуля (их можно не использовать, если подключаться к контактам модуля другим способом).

На сегодняшний день существует несколько видов модулей с аналогичным функционалом разных производителей и разработчиков или исполнений. Данный модуль распознавания голоса, на мой взгляд, имеет некий баланс между стоимостью, функционалом, удобством. Более мощным и существенно более дорогим будет модуль EasyVR. Более дешевыми и неудобными будут модули на базе LD3320 (неудобные как минимум потому, что нормальное описания на них найти не просто, а в остальном это уже субъективно).

Характеристики модуля Voice recognition module V3.1 (V3):

  • Напряжение питания – 5 вольт
  • Потребляемый ток – до 40 мА
  • Интерфейсы – UART, GPIO
  • Точность распознавания – 99% (в идеальных условиях)
  • Дальность действия – зависит от используемого микрофона, для штатного микрофона из комплекта дальность составляет 0,5 – 1 метр максимального расстояния при достаточно громком голосе, если же голос тихий, то придется подносить микрофон поближе ко рту

Модуль представляет собой небольшую аккуратную плату, на которой расположены главный микроконтроллер (черная клякса), разъем jack 3,5 мм для подключения микрофона, микросхема flash памяти, контакты GPIO, UART и питания, пара светодиодов и остальной необходимый обвес, необходимый для работы схемы – резисторы, конденсаторы, кварц. Компактный размер платы позволит без особых трудностей встраивать модуль в собственные разработки. Для увеличения дальности работы голосовых команд предположительно необходимо использовать микрофон с усилителем. При достижении приемлемой дальности модуль пригоден для использования в системах умного дома. Без доработок по улучшению дальности работы модуль можно использовать в настольных системах управления, а также в системах охраны (контроля и ограничения доступа). Со штатным микрофоном из-за небольшой дальности надежнее всего использовать модуль распознавания голоса как гарнитуру и беспроводным способом передавать команды контроллеру, который чем-то управляет, используя аккумулятор и беспроводные модули (например, HC-05 или HC-12 или подходящие любые другие). Модуль способен работать без внешнего микроконтроллера, так как производителем заложена функциональная самостоятельность, необходимо лишь однократно записать голосовые команды и задать настройки для самостоятельной работы при помощи внешнего устройства (ПК или МК).

Итак, чтобы начать работу с модулем распознавания голоса нам необходимо подключить его или к компьютеру (нужен USB-UART переходник), или к микроконтроллеру (необходимо разрабатывать программный код для управления модулем).

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

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

Читайте также:  Вес и рост в футах

Для функционирования и конфигурации модуля используется система команд. Общий вид кадра выглядит следующим образом:

Первые четыре команды 00, 01, 02, 03 используются для проверки состояния модуля и его настроек. Следующие шесть команд 10, 11, 12, 13, 14, 15 используются для изменения настроек модуля, среди которых управление портами вывода и настройки автостарта (auto load). Далее три команды 20,21, 22 используются для записи голосовых команд. Следующие три команды 30,31,32 используются для управления распознаванием голосовых команд. Команды 0A, 0D, FF используются только при возвращении данных самим модулем. Команд на самом деле не много и все это не так страшно, как кажется на первый взгляд в документации на модуль. Рассмотрим команды, необходимые для работы с модулем распознавания голоса. Не все из существующих команд несут практический характер.

Примечательно то, что модуль может работать без внешнего управляющего микроконтроллера, а также самостоятельно управлять чем-нибудь своими портами вывода. Для этого необходимо их настроить (команды 12, 13, 14).

Команда 12 – настроить порты вывода. Этой командой настраивается режим работы портов вывода модуля распознавания голоса.

Формат: | AA | 03 | 12 | MODE | 0A |

Где MODE может принимать четыре значения: 0 – импульсный режим (при срабатывании голосовой команды соответствующий команде вывод изменит свое состояние на время, устанавливаемое командой 13), 1 – режим переключателя (toggle или flip) (при каждом срабатывании голосовой команды вывод, соответствующий голосовой команде инвертируется), 2 – режим включения (при срабатывании голосовой команды вывод перейдет в состояние логической единицы и больше не перейдет в состояние логического нуля, сброс осуществляется командой 14), 3 – режим выключения (аналогично режиму включения только, наоборот, при срабатывании голосовой команды вывод переходит в состояние логического нуля).

Наиболее практичным является режим переключателя, не требующий лишних команд. Импульсный режим был бы хорош, но логика этого режима такова, что при срабатывании голосовой команды он однократно выдает логическую единицу, на время от 10 мс до 1 с. Это мало. Хотя, смотря какие требования к этому режиму, может быть полезно. Режимы включения и выключения реализованы неудобно, так как требуют исполнение дополнительных команд.

Команда 13 – задание длительности импульса соответствующего режима.

Формат: | AA | 03 | 13 | LEVEL | 0A |

Где LEVEL принимает значение от 00 до 0F (соответствует длительности от 10 мс до 1 с).

LEVEL длительность
0x00 10 мс
0x01 15 мс
0x02 20 мс
0x03 25 мс
0x04 30 мс
0x05 35 мс
0x06 40 мс
0x07 45 мс
0x08 50 мс
0x09 75 мс
0x0A 100 мс
0x0B 200 мс
0x0C 300 мс
0x0D 400 мс
0x0E 500 мс
0x0F 1 с

Команда 14 – сброс портов вывод до состояния заданного режимами включения или выключения.

Формат: | AA| 03 | 14 | FF | 0A | – сброс всех портов вывода

| AA| 03+n | 14 | IO0 | . | IOn | 0A | – сброс выбранных портов вывода

Где n – количество выводов, которые сбрасываются выборочно, IO0…IOn – перечисление этих выводов в кадре отправки данных.

Далее чтобы голосовые команды выполнялись их необходимо записать в модуль (обучить модуль). Здесь есть ограничение. Одновременно распознаваться могут только семь команд, хотя записать их можно значительно больше. Для того чтобы расширить диапазон голосовых команд, которые будут распознаваться используется система группировки (команда 32), которая управляется портами ввода модуля. Устанавливая конфигурацию сигналов на этих контактах, осуществляется выбор группы команд, которая будет распознаваться. Это обусловлено ограниченностью производительности используемого голосового контроллера модуля.

Итак, для того, чтобы записать голосовую команду необходимо воспользоваться командой 20 или 21 и при необходимости 22.

Команда 20 – запись одной или нескольких голосовых команд.

Формат: | AA| 03+n | 20 | R0 | . | Rn | 0A |

Где n – это количество записываемых голосовых команд (если записывается одна команда n=0, две команды n=1 и так далее в соответствии с общим форматом передачи команд Lenght – длина), R0. Rn номера голосовых команд (AA 03 20 03 0A – команда для записи третьей голосовой команды).

Команда 21 – запись одной голосовой команды и установка для нее подписи.

Формат: | AA| 03+SIGLEN | 21 | RECORD | SIG | 0A |

Где RECORD – номер голосовой команды, SIG – подпись (может состоять из нескольких байт, таким образом, что каждый байт может соответствовать кодировке символа алфавита при необходимости), SIGLEN – количество байт, из которых состоит подпись.

Команда 22 – добавление или удаление подписи для выбранной голосовой команды.

Формат: | AA | 03+SIGLEN | 22 | RECORD | SIG | 0A | – добавление подписи

| AA | 03 | 22 | RECORD | 0A | – удаление подписи

Где RECORD – номер голосовой команды, SIG – подпись, SIGLEN – количество байт, из которых состоит подпись

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

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

Читайте также:  Office web apps 2010

После того, как в модуле записаны голосовые команды ничего происходить не будет до тех пор, пока эти команды не поместить в "распознаватель" (Recognizer) модуля. Для этого необходимо воспользоваться командой 30. После выполнения этой команды модуль начнет ожидать совпадения голосовой команды с сохраненными образцами. Одновременно распознавать можно лишь сем команд. При этом будет медленно моргать желтый (оранжевый) светодиод на плате модуля.

Команда 30 – загрузить записи в "распознаватель" (Recognizer) модуля.

Формат: | AA| 2+n | 30 | R0 | . | Rn | 0A |

Где R0. Rn – сохраненные голосовые команды, n – количество голосовых команд (не может быть больше 7).

Если будет произнесена голосовая команда и модуль ее распознает по UART будут отправлены данные с командой 0D и информацией о распознанной команде.

Формат ответа следующий: | AA | 07 | 0D | 00 | GRPM | R | RI | SIGLEN | SIG | 0A |

Где GRPM – информация о группе, к которой относится команда (если используется), R – распознанная голосовая команда (по этим данным можно различать команда между собой если не используются подписи), RI – индекс команды в распознавателе, SIGLEN – длина подписи в байтах, SIG – подпись (если используется).

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

Команда 15 – установка автозапуска распознавателя при включении.

Формат: | AA| 03 | 15 | 00 | 0A | – отключение функции автозапуска

| AA| 03+n | 15 | BITMAP | R0 | . | Rn | 0A | – установка функции автозапуска

Где BITMAP – метка количества голосовых команд, помещаемых в распознаватель, R0. Rn – сохраненные голосовые команды, помещаемые в распознаватель, n – количество команд.

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

Таким образом, при помощи системы команд можно достаточно гибко настраивать модуль распознавания голоса для использования в различных целях. Если же простого управления портами вывода модуля недостаточно, то модуль распознавания голоса можно подключать к другим устройствам посредством UART или GPIO. Для беспроводного подключения можно использовать ранее рассмотренные модули HC-12.

При помощи беспроводных модулей можно подключать модуль распознавания голоса к любым устройствам, где это необходимо. Например, подключим его к микроконтроллеру, который относительно получаемых данные о распознавании голосовых команд будет управлять светодиодами. Беспроводные модули HC-12 позволяют передавать данные в двух направлениях, поэтому при необходимости для микроконтроллера можно написать код инициализации голосового модуля и записи голосовых команд. В нашем случае под управлением ПК в модуле уже записано несколько голосовых команд и настроен автозапуск распознавания при включении питания, поэтому для микроконтроллера пропишем только прием данных и управление светодиодами относительно этих данных. Микроконтроллер STM32F103C8T6 использует USART1 для приема данных и контакты PB10. PB15, настроенные на выход, которыми управляет светодиодами. Исходный код расположен в приложения в конце статьи.

Немного о результатах

Распознавание голоса идет не совсем точное. Это зависит от выбранных команд и голоса пользователя. При тестировании мною было обнаружено несколько отрицательных моментов. При обучении командам модуля были выбраны голосовые команды «раз» и «два». Команда «два» проходила всегда четко, а вот команда «раз» достаточно часто определялась как команда «два» и соответственно выполнялся код второй команды. Далее при попытке отдавать голосовые команды по-английски (а они не записывались в голосовой модуль) практически всегда команда «one» определялась как «два». Возможно, все дело в произношении, интонации и прочих аспектах человеческого голоса, заложенных в алгоритм кодировки голосового модуля произносимых команд. Однако эти секреты производители в открытом доступе не дают. Кроме этого на качество распознавания влияют внешние шумовые условия – гул с улицы, шум вентилятора, случайные звуки и прочее. Производитель заостряет внимание на то, что высокий уровень точности распознавания имеет место в идеальных условиях. Идея использования микрофона с усилителем, конечно, увеличит дальность работы устройства, но так же увеличит вероятность и ошибки, так как усиление голоса будет происходить и с усилением шумов.

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

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

Комментировать
679 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector