Модуль распознавания голоса

Распознавание голоса на Arduino или “Do You Know What I Am Saying?”

Фразы “О’кей, 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 следующий скетч:

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


Управление голосовыми командами на базе модуля распознавания голоса FZ0475

А помните, как несколько лет назад (а может быть и сейчас) была популярна идея управления светом в комнате при помощи хлопков в ладоши? А, ведь, это очень удобно, лежишь в постели, лень встать и хлопком в ладоши выключается свет или заходим домой, темно, нащупать выключатель долго, а тут с самого порога хлопок или два и свет уже горит. Мне кажется, что эта концепция актуальна до сих пор, но к ней можно применить уже более высокие технологии по сравнению с теми, что были 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длительность
0x0010 мс
0x0115 мс
0x0220 мс
0x0325 мс
0x0430 мс
0x0535 мс
0x0640 мс
0x0745 мс
0x0850 мс
0x0975 мс
0x0A100 мс
0x0B200 мс
0x0C300 мс
0x0D400 мс
0x0E500 мс
0x0F1 с

Команда 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 – количество байт, из которых состоит подпись

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

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

Читайте также:  Позистор и термистор, в чем отличие?

После того, как в модуле записаны голосовые команды ничего происходить не будет до тех пор, пока эти команды не поместить в “распознаватель” (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» определялась как «два». Возможно, все дело в произношении, интонации и прочих аспектах человеческого голоса, заложенных в алгоритм кодировки голосового модуля произносимых команд. Однако эти секреты производители в открытом доступе не дают. Кроме этого на качество распознавания влияют внешние шумовые условия – гул с улицы, шум вентилятора, случайные звуки и прочее. Производитель заостряет внимание на то, что высокий уровень точности распознавания имеет место в идеальных условиях. Идея использования микрофона с усилителем, конечно, увеличит дальность работы устройства, но так же увеличит вероятность и ошибки, так как усиление голоса будет происходить и с усилением шумов.

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

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

Все о модуле распознавания голоса EasyVR (ex VRbot)


Сегодня я наконец возьму и эпически сорву покрова с этих самых модулей EasyVR, так как тема сисек, ящитаю, практически не раскрыта. Покрова буду «срывать полностью, полностью буду срывать», так что готовьтесь 🙂

Итак, дело началось с того, что мне захотелось добавить управление голосом в автомобиль (систему комфота) и в комнату дома. Хотя, больше, конечно, хотелось «поиграться» и посмотреть, что из этого получится. Про VRBot я уже где-то слышал, но в руках не держал, так что уже знал, что какие-то готовые решения есть.

Копание в интернетах показало, что как таковых VRBot’ов уже не существует и вывело меня на сайт их производителя и переемника VeeaR. Переемником VRBot стал модуль, практически не отличающийся от своего предшественника — EasyVR. Также, появилась более «крутая» его версия — SmartVR, которая позволяла писать аж свои приложения для какой-то там встроенной виртуальной машины. Но для SmartVR необходимо было допиливать хоть и немного, но внешний обвес (либо покупать дорогую плату разработчика), по этому для начала, ничтоже сумняшеся, я заказал пару EasyVR на «поковырять», даже и не думая, что мои ковыряния потом зайдут так далеко…

После того, как модули мне пришли, я начал с ними играться. Поставил штатный софт, подключил, пообучал, посмотрел возможности. Конечно, функционал этих модулей из коробки достаточно узок — распознавание некоторого количества команд управления роботом (больше они, ИМХО, ни для чего не годятся), зашитых намертво в прошивку на нескольких европейских языках + возможность добавить до 32-х своих собственных команд (то, ради чего модули и заказывались). Также, была очень заманчивая возможность сделать «избу-говорильню» — прошить в модуль наборы звуков, которые потом можно было бы воспроизводить через него как ответы.
Распознавание зашитых команд было «человеконезависимое», т.е., по факту, модулю было все равно кто и каким голосом называет команды — он их уверенно распознавал (только нужно было обеспечить правильное произношение). Пользовательские же команды требовали сначала обучения под конкретного пользователя. Еще существовала возможность распознавания конкретного человека по характеристикам голоса — «голосовой пароль», что вполне неплохо работало и тоже было достаточно интересной фишкой.

Все вроде было замечательно, но меня очень сильно будоражил вопрос: «почему для SmartVR можно писать свои собственные программы, а для EasyVR нельзя?» И черт меня дернул раскопать всю эту кухню глубже.
Начал я с того, что выяснил такой момент — оба модуля работают на абсолютно одинаковых чипах, RSC-4128 компании Sensory. Что-то из услышанного когда-то давно подсказывало мне, что чип хороший, годный, стабильный и использовался в куче всяких роботизированных игрушек типа Furby. Так оно и оказалось.
На сайте разработчика с большим трудом были найдены и выкачаны разные доки — даташит на чип, описание технологических библиотек, СДК, примеры и много-много другого барахла. После изучения всего добра я влюбился в этот чип 🙂 Его возможности, фактически, оказались уникальны: других специализированных однокристальных решений (кроме более старшего семейства этой же фирмы) как-бы и не существовало. Итак, по порядку.

RSC-4128

Чип представляет собой специализированный микроконтроллер на совместимом с 8051 ядре, который несет на себе периферию для записи и воспроизведения звука (микрофонный преамп с АЦП, ЦАП с ШИМ для динамика, аудио-компараторы, фильтры). На чипе есть немного оперативки (4.8 килобайт) и РОМ, размер которого означается последними цифрами названия чипа (в данном случае 128 килобайт). Ядро работает на частоте 14 с лишним мегагерц от внешнего резонатора с PLL. Доступно 5 таймеров (3 обычных, 1 тик-таймер, 1 ватчдог), 8 источников прерываний (от таймеров и от пинов), интерфейс подключения внешней памяти, ускоритель векторной математики. На чипе нет аппаратной периферии связи — UART, SPI, I2C. Есть только GPIO с прерываниями от некоторых пинов, но вопрос этот вполне неплохо решается софт-драйверами. Хорошо работает подсистема энергосбережения (все-таки, чип рассчитан на батарейное питание). С регистрами все очень просто и понятно, никаких заморочек. Чип может считывать программу либо полностью из внутреннего рома, либо полностью из внешнего (адресуя до 1 мегабайта без изъебств), в зависимости от состояния пина nXM. Также существуют механизмы доступа к разного рода навесной памяти, которые, в общем-то, не очень сильно нужны (ИМХО).
Основная же соль чипа — софт-библиотека FluentChip, которая и реализует все возможности по распознаванию и синтезу, а также много других полезных функций.

FluentChip

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

  • Воспроизведение звука: с помощью специальной программы QuickSynthesys можно подготавливать библиотеки звуков, слов и предложений из них; музыку для встроенного MIDI-секвенсора. С помощью простых библиотечных функций можно воспроизводить звуки, слова, мидишки со своими инструментами и даже со словами поверх музыки; можно воспроизводить DTMF, пищать и посылать токены SonicNet в любой комбинации. Присутствует очень хорошее сжатие для речи — SX.
  • Запись звука: собственно, запись звука с последующим воспроизведением. Нам не актуально, т.к. для этого нужна особая навесная оперативка или флэшка приличного объема, которую к модулям никак не подключить.
  • Распознавание речи: отдельный разговор. Об этом функционале поговорим ниже.
  • SonicNet: позволяет посылать через динамик и слушать микрофоном специальные посылки-токены, не слышимые человеком и таким образом общаться нескольким устройствам между собой.
  • «Анимация»: набор функций для интерактивной обратной связи. Детектор и предсказатель ритма, детектор высоты тона или ноты, «синхронизатор движения губ» как для заранее зашитых звуковых библиотек, так и работающий в реальном времени с микрофона.
  • SoundSource: используя немного обвеса, возможно соорудить «электронные уши», детектировать положение источника звука и, например, поворачивать устройство или его «голову» к говорящему. Нам, к сожалению, прелестями воспользоваться не удастся ввиду ограниченного числа выведенных GPIO на модуле.
  • Утилитарные функции, типа функций настройки таймеров, доступа к буферам в оперативке, управления питанием, генерации задержек и проч. Есть готовый софтовый драйвер UART.

Теперь поговорим о распознавании речи. Библиотека умеет выполнять два принципиально разных метода распознавания: T2SI (text-to-speaker-independent, «человеко-независимый», говорящим может быть кто угодно) и SD (speaker-dependent, говорить должен тот, кто обучал систему).

T2SI использует достаточно сложный и интересный подход. Сначала на компьютере в специальной программе (QuickT2SI) формируются словари путем вбивания нужных слов или фраз с клавиатуры. Затем программа, в зависимости от выбранной языковой модели проводит преобразование этих слов и фраз к фонемам (при необходимости результат можно корректировать, вплоть до ручного набора слов фонемами IPA). После этого можно произвести тонкую настройку распознавания и сформировать объектные файлы с данными для вашего набора слов, которые должны быть включены в программу. Таких наборов может быть очень много, а нужный просто выбирается при вызове библиотечной функции распознавания.
Этот метод сложен технически, использует акустические модели фонем для разных языков, нейросети для их распознавания и скрытую марковскую модель (HMM) для статистического анализа и угадывания слов. Соль в том, что самая сложная работа — построение и обучение нейросети и формирование скрытой марковской модели — происходит на компьютере, а в устройство зашивается уже готовая нейросеть (в библиотеке на чипе есть софтовый нейропроцессор и анализатор HMM). Готовая нейросеть и модель содержит в себе только нужные состояния и фонемы для набора, поэтому получается очень компактная и быстрая.
Результат работы этого метода, конечно, впечатляет. Получается очень точное распознавание даже на больших словарях и с разными «говорителями». Но у метода есть для нас один очень большой недостаток. Нет модели русского языка 🙁 Причем, принципиально нет никаких ограничений, чтобы ее сделать, но разработчику, походу, это не особо нужно. Тем не менее, есть возможность использовать более-менее похожие модели испанского/итальянского с некоторыми ограничениями и набирать нужные слова сразу фонемами, но это не так удобно, хотя качество распознавания русских слов, запиленных таким образом, достаточно неплохое.

Читайте также:  Батарея 12В/100А на суперконденсаторах

Второй метод — SD — основан на высчитывании огибающих слова/фразы и, возможно еще какой-то информации, типа FFT и генерации «паттерна» — отпечатка, соответствующего этому слову или фразе. По всей видимости, это какой-то векторный массив, наподобие паттернов, описывающих отпечаток пальца после векторного анализа. Только здесь, в качестве исходной информации выступает не картина папиллярного узора, а захваченная звуковая информация. Каждый паттерн занимает в памяти строго определенное количество байт — 256. Из нескольких паттернов в процессе обучения комбинируется «шаблон» (тоже 256 байт), который затем сохраняется в памяти, присваивается к какому-либо словарю и в дальнейшем можно запустить по этому словарю распознавание.
На практике же, при небольшом словаре с разными по произношению словами, система способна точно распознавать слова, даже если их говорит другой человек, что есть очень и очень хорошо!
На этом же принципе построена и SV — верификация говорящего, «голосовой пароль». Только разница в том, что информация векторизуется по другим признакам, и большее внимание уделяется конкретным характеристикам голоса говорящего. По этому и получается «пароль». А технически оно работает точно так же, как и SD.
Возможно запускать одновременно T2SI и SD/SV распознавание по разным наборам. Библиотечные функции достаточно просты и понятны, есть куча примеров, вполне читабельный хелп и аппноуты. Не утонете.
Для сохранения шаблонов требуется какая-то память. В комплекте библиотеки идет несколько модулей для работы с разными типами навесной памяти. Их достаточно просто подключить и настроить в конфигурационном файле, а библиотека возьмет на себя все остальное. На наших модулях установлена для этих целей I2C память 24LC64, которая как раз и позволяет хранить 32 шаблона. Драйвер для I2C памяти в поставке библиотеки есть. Даже с исходником. Примеры работы тоже есть.

Учтите, что библиотека занимает кучу ресурсов МК, так что оперативки остается порядка 250-300 байт (+ 256 байт RAMY буфера, которые используются для хранения паттернов при обучении SD и работе SD, но их можно использовать под свои нужды, на то есть библиотечные функции). При работе библиотечных функций практически не остается и процессорного времени, так что будьте аккуратны в прерываниях. Некоторым процессам (распознаванию, например) похеру и они просто будут работать дольше, а некоторым (воспроизведению звука) не похеру, и звук может начать трещать или вообще функция осыпется и вернет ошибку, что «недостаточно свободных циклов». Подробнее описано в документации (там такая большая таблица со всеми цифрами потребления). Но это все мелочи и решаются они просто грамотным программированием.
Да. Все программы из комплекта библиотек бесплатны. Кроме QuickT2SI, которая стоит $3500 в полном варианте. Жадность программы лечится скачиванием мною пропатченой версии по ссылкам во вложении к статье — «link.txt».

Среда разработки

Конечно же, к чему весь этот разговор и должен был привести. Собственно, «где и в чем писАть?». Вариантов тут совсем не много. Точнее говоря, по факту, всего один — решение от Phyton под названием Project-SE. Есть еще компилятор от mikroElektronik’и, но он уже снят с производства и поддержки, да и при этом косой очень. Так что, пользоваться придется Phyton’ом.
Среда очень корявая в плане интерфейса (IAR после нее покажется вам просто каким-то Эклипсом), но к ней за пару дней привыкаешь. Можно даже все настроить под свои нужды (кнопочки всякие, панели).
Никаких тонкостей и особенностей нет — среда заточена конкретно под этот камень. Создаем проект, настраиваем, подключаем библиотеки и всякие сгенерированные объектники со звуками и нейросетями и вперед — пишем на C или ASM. Примеров, опять же повторюсь, очень много. Все предельно просто и понятно.
Единственный, пожалуй, нюанс — конфигурационный файл, который должен быть подключен к каждому проекту — «config.mca». Там описываются настройки библиотек — пины, память, и прочее. Для нашего модуля я написал свой правильный конфиг, который можно скачать по ссылкам из вложения к этой статье.
Да. Продукт Project-SE работает после установки 14 дней в триальном режиме. Триальный режим по сути ничем не отличается от нормального. Просто напросто, по истечении времени продукт начинает жадничать и перестает компилировать. Жадность пропадает после запуска моего специального батника, который сбрасывает этот самый период. Батник можно скачать, опять же, по ссылкам во вложении к этой статье.

Модуль EasyVR


Модуль — штука самодостаточная. На нем установлен весь необходимый обвес, от стабилизатора питания, до памяти и преобразователя уровней напряжения (для UART). Изначально, общение с модулем происходит по UART, также есть разъем для микрофона (с микрофоном в комплекте), разъем для динамика (выход PWM, без динамика в комплекте) и колодка с тремя дополнительно выведенными GPIO + выводы nXM и RST. На модуле установлена флешка в 1 мегабайт максимально адресуемого пространства (на ней изначально хранится прошивка и звуки) и EEPROM 24LC64 для хранения шаблонов SD или какой-нибудь своей информации, типа конфигурации.


24LC64 совершенно спокойно перепаивается в 24LC256 и становится возможным хранить уже 128 шаблонов. 24LC512 к сожалению шире корпусом и на плату не влезает 🙂

Питается модуль от 3 до 5 вольт. На пинах, которые используются под UART стоит микросхема-преобразователь уровней (чтоб можно было шпарить до 5 вольт). На остальные пины подавать больше 3 вольт НЕЛЬЗЯ! Спалите пины или чип! Это вам не AVR!
А теперь самое главное, ради чего все затевалось! Разработчики модуля не афишируют эту возможность, но тем не менее, в модуль можно зашить абсолютно любой код! Устроено все так: в РОМе самого чипа сидит загрузчик, с которым может общаться программка «VeeLoader.exe» от VeeaR (из комплекта оригинального софта). А во флешке, которая на 1 мегабайт, собственно и лежит прошивка. Т.к. чип может работать либо со встроенным РОМом, либо с внешним флэшом, то вот и получается наша картина: подцепляем nXM на 3 вольта и чип стартует с вшитого по маске загрузчика, который может спокойно читать и писать флэшку без всяких ограничений или защит через UART. А если мы оставим висеть nXM свободно (на самом деле pull-down внутри чипа на несколько килоом), то чип будет стартовать с внешней флэшки. Таким образом, достаточно просто скормить HEX-файл своей программы VeeLoader’у и, вуаля, он зашьет ее во флэш! Делов-то 🙂

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

Во вложении вы найдете ссылку на архив со всем необходимым (архив с софтом и пилюлями уникален и больше вы его нигде не достанете):
1. Инструментарий Sensory последних версий: QuickT2SI 3.1.7 (с лечивом), QuickSynthesis 5.2.1, библиотеки FluentChip 3.1.6 с примерами и всей документацией, в том числе на чип и железо.
2. Инструментарий Phyton: Project-SE 1.22.00 (с лечивом)
3. Инструментарий VeeaR: VeeLoader.exe и последняя прошивка EasyVR, если захочется вернуть штатный функционал

Все вопросы и пожелания пишите в комментах. Чем смогу — помогу 🙂

Распознавания голоса на Arduino

Тема распознавания голоса микроконтроллером довольно интересна и нова, поэтому я решил представить вам схему устройства распознавания голоса на микроконтроллере, а точнее на Arduino. Распознавание голоса довольно непростая задача, а реализовать это на микроконтроллере еще сложнее, в силу ограниченности его ресурсов. В нашем случае реализация распознавания голоса будет на микроконтроллере ATmega328P, работающего на частоте 16МГц.

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

В моей схеме распознавания голоса на микроконтроллере была использована uSpeech в силу своей автономности и малых размеров. Хотя у неё есть недостаток, такой как ограниченность распознавания. Эта библиотека позволяет распознавать только фонемы, т.е. отдельные звуки, но для многих схем и устройств этого более чем достаточно. Ниже приведен список используемых фонем (звуков):

Фонема (звук)Соответствующая ей буква (может быть несколько)
“е”е
“х”х, ш, щ, дж, ж, з
“в”в, может срабатывать на з
“ф”ф
“с”с
“о”о, а, ш, л, м, н, у, ю
” “слишком тихий звук

В качестве микрофона используется электретный микрофон (ссылка на статью на Wikipedia), обычно он выглядит так:

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

Либо можно купить готовый микрофон с усилителем на eBay или AliExpress, найти можно по запросу «Mic amplifier arduino» или «Микрофонный усилитель Arduino». Выглядит он так:

Микрофон с микрофонным усилителем желательно подключить к микроконтроллеру через резистор 470…2К и разделительный конденсатор (он уже есть в самих схемах усилителей, а также на готовых платах), который убирает постоянную составляющую.

Схема подключения микрофона и усилителя к Arduino следующая: микрофон через усилитель подключается к аналоговому порту Ардуино A0, три светодиода через резисторы подключаются к цифровым выходам 5,6,7 (схему можно изменить, внеся соответствующие, небольшие правки в исходный код программы).

В качестве индикаторов распознанных команд были использованы три светодиода разных цветов.

В исходном примере библиотеки uSpeech сравнивались одиночные фонемы (звуки). Пример позволял распознать 6 фонем (звуков): «ф», «е», «о», «в», «с», «х» (f, e, o, v, s, h). Мной был использован массив байт, который содержал паттерны, распознаваемых слов, что позволило в конечном итоге распознавать не отдельные фонемы (звуки), а целые слова, состоящие из распознаваемых фонем. Массив полученных звуков сравнивается с заранее прописанным массивом байт (паттерном слова), и в случае совпадения, с учетом заданного порога чувствительности, делается вывод о том, какое слово было произнесено.

Например, заранее прописанные паттерны для английских слов green,orange и white были следующие “vvvoeeeeeeeofff”, “hhhhhvoovvvvf”, “hooooooffffffff”. Для нахождения наиболее ближайшего эквивалента произносимом слову необходимо находить минимальное редакционное расстояние (расстояние Левенштейна). Для повышения точности и игнорирования нерелевантных паттернов при распозновании использовалась константа LOWEST_COST_MAX_THREASHOLD, определяющая уровень достоверности. Подбирая её значение можно добиться высокой точности распознавания.

Скомпилированный скетч занимает около 20% FLASH-памяти микроконтроллера и около 500 байт, т.е. 25% ОЗУ. Библиотеку для распознавания голосовых команд на Ардуино – uSpeech можно скачать здесь (необходимо нажать зеленую кнопку “Clone or download”). Установка библиотеки стандартная – необходимо распаковать архив и поместить папку в “C:/Users/ /Documents/Arduino/libraries”.

Скачать архив с исходником скетча для Arduino и самой библиотекой.

Модуль распознования речи Elechouse Voice Recognition Module v3.1 и подключение его к Arduino

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

В данной статье мы разберем один способ как управлять голосом устройствами. Для этого нам понадобится модуль распознавания речи Voice recognition module V3.1 .

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

Данный модуль может работать как в паре с микроконтроллером, так и автономно от него.

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

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

На данный модуль есть datasheet в котором подробно описано, как управлять и работать с данным модулем. Ссылка на даташит: https://yadi.sk/i/nbj8jyfz3WxQyy

В данном даташите описано несколько способов программирования данного модуля. В данной статье мы рассмотрим только один, способ программирования с помощью arduino.

Для начала нам нужно подключить модуль к arduino по такой схеме:

Данное подключение используется потому, что мы будем использовать serialsoftware.

После того как мы все правильно подключили, необходимо скачать библиотеку по ссылке: https://github.com/elechouse/VoiceRecognitionV3/archive/master.zip

После того как мы скачаем библиотеку и установим ее, нам понадобится пример vr_sample_train который можно найти перейдя в (файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_train)

Читайте также:  Управление нагрузкой одним нажатием

Выбрав данный пример, загрузим его в ардуино. После загрузки откроем монитор порта:

  1. В открывшемся мониторе порта, нужно выбрать обязательно. скорость порта 115200, и меню NL ( новая строка) Newline или NL & CR.
  2. После появившейся таблицы в мониторе порта нужно вписать команду “ settings” для того чтоб определить, отвечает ли модуль на команды и все ли подключено правильно.
  3. Далее нужно будет ввести команду “ sigtrain 0 On” где команда “sigtrain” отвечает за запись команды, “0” это идентификатор команды, “On” это описание нашей команды оно может быть произвольной. После ввода данной команды в мониторе порта появится команда”Speak now”, которая сигнализирует нам о том, что началась запись команды, и нужно проговорить в микрофон нужную команду которую мы хотим использовать. Затем появится команда “Speak again”,которая просит нас повторить команду еще раз. Если команды правильные и совпадают, то высветится команда”Success”, и “record 0” . Но если команда не верная или же присутствовали посторонние шумы, то высветится команда “Cann’t matched” что символизирует о том что команда не записалась и просит проговорить еще раз ее.
  4. Если хотим записать еще одну команду, например первая была “On” на включение, а следующую хотим записать на выключение, то следует нам вписать следующую команду “ sigtrain 1 Off ”
  5. После записи команд, нам нужно их записать в память контроллера, чтоб он мог данные команды использовать. За это отвечает команда “load”. Нам нужно записать в модуль две команды с идентификаторами “0” и “1” тогда следует ввести команду “ load 0 1″
    После записи можно будет проговорить наши команды и если команды распознаются то в мониторе порта будут появляться вот такие строки
    Теперь позле записи команд давайте попробуем по управлять голосом светодиодами. Для этого откроем пример vr_sample_control_led(Файл -> Примеры -> VoiceRecognitionV3 -> vr_sample_control_led) и загрузим его в ардуино.

И подключив светодиод к 13 пину, мы можем увидеть как по записанным нашим командам светодиод включается и выключается.

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

Ну и собственно демонстрация работы в видео:

Модуль распознавания голоса EasyVR 3 Plus Shield

  • Офис находится в 5 минутах ходьбы от м. Таганская, по адресу Большой Дровяной переулок, дом 6.
  • При оформлении до 15:00 в будний день заказ можно забрать после 17:00 в тот же день, иначе — на следующий будний день после 17:00. Мы позвоним и подтвердим готовность заказа.
  • Получить заказ можно с 10:00 до 21:00 без выходных после его готовности. Заказ будет ждать вас 3 рабочих дня. Если хотите продлить срок хранения, просто напишите или позвоните.
  • Запишите номер своего заказа перед визитом. Он необходим при получении.
  • Чтобы к нам пройти, предъявите на проходной паспорт, скажите, что вы в Амперку, и поднимитесь на лифте на 3-й этаж.
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • бесплатно

Доставка курьером по Москве

  • Доставляем на следующий день при заказе до 20:00, иначе — через день.
  • Курьеры работают с понедельника по субботу, с 10:00 до 22:00.
  • При согласовании заказа можно выбрать трёхчасовой интервал доставки (самое раннее — с 12:00 до 15:00).
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • 250 ₽

Доставка в пункт самовывоза

  • Доставка в пункт самовывоза — современный, удобный и быстрый способ получить свой заказ без звонков и ловли курьеров.
  • Пункт самовывоза — это киоск с человеком или массив железных ящичков. Их ставят в супермаркетах, офисных центрах и других популярных местах. Ваш заказ окажется в том пункте, который выберите.
  • Ближайший к себе пункт вы можете найти на карте PickPoint.
  • Срок доставки — от 1 до 8 дней в зависимости от города. Например, в Москве это 1–2 дня; в Петербурге — 2—3 дня.
  • Когда заказ прибудет в пункт выдачи, вы получите SMS с кодом для его получения.
  • В любое удобное время в течение трёх дней вы можете прийти в пункт и с помощью кода из SMS получить заказ.
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • Стоимость доставки — от 240 руб в зависимости от города и габаритов заказа. Она рассчитывается автоматически во время оформления заказа.
  • Доставляем через день при заказе до 20:00, иначе — через два дня.
  • Курьеры работают с понедельника по субботу, с 11:00 до 22:00.
  • При согласовании заказа можно выбрать трёхчасовой интервал доставки (самое раннее — с 12:00 до 15:00).
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • 350 ₽

Доставка в пункт самовывоза

  • Доставка в пункт самовывоза — современный, удобный и быстрый способ получить свой заказ без звонков и ловли курьеров.
  • Пункт самовывоза — это киоск с человеком или массив железных ящичков. Их ставят в супермаркетах, офисных центрах и других популярных местах. Ваш заказ окажется в том пункте, который выберите.
  • Ближайший к себе пункт вы можете найти на карте PickPoint.
  • Срок доставки — от 1 до 8 дней в зависимости от города. Например, в Москве это 1–2 дня; в Петербурге — 2—3 дня.
  • Когда заказ прибудет в пункт выдачи, вы получите SMS с кодом для его получения.
  • В любое удобное время в течение трёх дней вы можете прийти в пункт и с помощью кода из SMS получить заказ.
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • Стоимость доставки — от 240 руб в зависимости от города и габаритов заказа. Она рассчитывается автоматически во время оформления заказа.
  • Доставка в пункт самовывоза — современный, удобный и быстрый способ получить свой заказ без звонков и ловли курьеров.
  • Пункт самовывоза — это киоск с человеком или массив железных ящичков. Их ставят в супермаркетах, офисных центрах и других популярных местах. Ваш заказ окажется в том пункте, который выберите.
  • Ближайший к себе пункт вы можете найти на карте PickPoint.
  • Срок доставки — от 1 до 8 дней в зависимости от города. Например, в Москве это 1–2 дня; в Петербурге — 2—3 дня.
  • Когда заказ прибудет в пункт выдачи, вы получите SMS с кодом для его получения.
  • В любое удобное время в течение трёх дней вы можете прийти в пункт и с помощью кода из SMS получить заказ.
  • Оплатить заказ можно наличными при получении или же онлайн при оформлении заказа.
  • Стоимость доставки — от 240 руб в зависимости от города и габаритов заказа. Она рассчитывается автоматически во время оформления заказа.
  • Доставка осуществляется до ближайшего почтового отделения в любом населённом пункте России.
  • Тариф и сроки доставки диктует «Почта России». В среднем, время ожидания составляет 2 недели.
  • Мы передаём заказ Почте России в течение двух рабочих дней.
  • Оплатить заказ можно наличными при получении (наложенный платёж) или же онлайн при оформлении заказа.
  • Стоимость рассчитывается автоматически во время заказа и в среднем должна составить около 400 рублей.
  • Служба «EMS Почта России» работает быстрее и надёжнее обычной почты и доставляет до двери покупателя.
  • Тариф и сроки доставки диктует служба EMS. В среднем по России время ожидания составляет 4–5 дней.
  • Мы передаём заказ в EMS в течение двух рабочих дней.
  • Оплатить заказ можно только онлайн при оформлении заказа.
  • Стоимость рассчитывается автоматически во время оформления заказа и в среднем должна составить 400–800 рублей для России и 1500–2000 рублей для стран СНГ.
  • Служба «EMS Почта России» работает быстрее и надёжнее обычной почты и доставляет до двери покупателя.
  • Тариф и сроки доставки диктует служба EMS. В среднем по России время ожидания составляет 4–5 дней.
  • Мы передаём заказ в EMS в течение двух рабочих дней.
  • Оплатить заказ можно только онлайн при оформлении заказа.
  • Стоимость рассчитывается автоматически во время оформления заказа и в среднем должна составить 400–800 рублей для России и 1500–2000 рублей для стран СНГ.

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

Офис находится в 5 минутах ходьбы от м. Таганская, по адресу Большой Дровяной переулок, дом 6.

Товары из магазина-мастерской нельзя заказать через интернет или забронировать. Можно только прийти, схватить и бежать. Доступное количество актуально на момент загрузки страницы.

Магазин-мастерская находится в трёх минутах пешком от метро Лиговский Проспект, на территории пространства «Лофт Проект Этажи», по адресу Лиговский проспект 74Д.

Хотите общаться с контроллером и отдавать команды голосом? «Окей, Ардуино, мигни светодиодом на 13-м пине!» Звучит круто, но программное распознавание голоса — слишком сложная задача для ардуинки и инженера-любителя. Модуль EasyVR 3 Plus Shield — готовое решение для распознавания голосовых команд, чтобы управлять умным домом или своими роботами.

EasyVR расшифровывается как «Easy Voice Recognition» и позволяет записать перечень команд через микрофон, а потом определить, фразу с каким номером вы произносите. Получив номер команды, микроконтроллер выполняет заложенное в неё действие: включает-выключает свет в комнате, открывает дверь хозяину или подаёт чашечку кофе. Также устройство умеет проигрывать в ответ заранее записанные аудиофрагменты, чтобы поддерживать диалог.

Принцип действия

EasyVR 3 Plus использует два метода распознавания голоса для различных сценариев применения.

  • Speaker-independent (SI) — фонетический алгоритм распознавания речи, который работает с отдельным языком. Тут заготовлено 26 базовых команд и 6 словарей: английский, итальянский, немецкий, французский, испанский и японский. В этом случае учитываются фонетические особенности, которые образуют разные слова, а индивидуальность голоса пользователя не имеет значения. Предустановленные команды включают в себя направления движения (влево-вправо, вперёд-назад, вниз-вверх), несколько ключевых действий (двигаться, стоять и т. д.), а также арифметические числа от 0 до 10.
  • Speaker-dependent (SD) — точный алгоритм, который отличает речевые характеристики разных людей. То есть, устройство реагирует только на тех, чей голос звучит в оригинале команды. В этом кроются плюсы и минусы метода: с одной стороны, круг доверенных пользователей становится ограничен, с другой стороны — алгоритм не привязан к какому-либо языку и точно распознаёт хозяина. Метод распознавания SD включает в себя дополнительный режим Speaker-verification (SV) для создания «голосового пароля», который идентифицирует говорящего человека по индивидуальным характеристикам голоса.

Несмотря на то, что устройство формально не поддерживает русский язык из коробки, оно запросто будет понимать ваши русскоязычные команды в режиме Speaker-dependent (SD).

Возможности

  • Распознавание пользовательских речевых команд по алгоритму SD (до 256 фраз на любом языке).
  • Распознавание предустановленных речевых команд по алгоритму SI на 6 языках (26 базовых фраз).
  • Заливка и воспроизведение звуковых ответов, задаваемых пользователем.
  • Синтез тональных телефонных сигналов DTMF для управления модулями умного дома или охранной системы.
  • Общение с другими звуковыми устройствами с помощью технологии SonicNet, которая передаёт данные по воздуху звуковыми импульсами.

Начинка

Модуль EasyVR 3 Plus сделан на базе чипа Sensory RSC-4128 — проверенного решения для распознавания речи, которое также используется в интерактивных игрушках Furby и прочих роботизированных штучках с голосовым управлением.

Система на кристалле RSC-4128 объединяет в себе 8-битный микроконтроллер с интегрированным АЦП, ЦАП, предусилителем, ОЗУ и специализированными блоками обработки звука. Именно они отвечают за быстрое распознавание голосовой информации на лету.

Подключение и настройка

Работа с EasyVR 3 Plus Shield делится на два этапа. Сначала в модуль необходимо записать референсные команды через управляющую плату и родную программу EasyVR Commander для Windows, а затем устройство в штатном режиме будет считывать голосовые команды и выдавать контроллеру управляющие сигналы. Подробный алгоритм начала работы приведён в нашей инструкции на Wiki.

Микрофон и внешний динамик подключаются к плате через JST-разъёмы. Обратите внимание, что сопротивление громкоговорителя должно быть не ниже 8 Ом. Аудиовыход 3,5 мм рассчитан на наушники сопротивлением 16–32 Ома и способен работать в качестве линейного выхода.

Комплектация

  • 1× Модуль EasyVR 3 Plus
  • 1× Плата расширения для EasyVR 3 Plus
  • 1× Микрофон
  • 1× Провод для динамика
  • 1× Набор штырьковых соединителей

Обратите внимание, что плата поставляется с невпаянными штырьковыми соединителями. Чтобы начать работу с модулем, вам понадобится спаять контактные колодки самому. Смотрите наше руководство по пайке для начинающих, а также запаситесь паяльником, припоем и флюсом.

Ссылка на основную публикацию