Главная » Автоматика в быту
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

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

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

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

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

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

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

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК STM32
STM32F103C8
1 Поиск в FivelВ блокнот
VR1 Линейный регулятор
AMS1117-3.3
1 Поиск в FivelВ блокнот
MOD1, MOD3 Модуль беспроводной связиHC-122 Поиск в FivelВ блокнот
MOD2 Модуль распознавания голосаVR3.11 Поиск в FivelВ блокнот
Z1 Кварц8 МГц1 Поиск в FivelВ блокнот
S1 Тактовая кнопка1 Поиск в FivelВ блокнот
R1 Резистор
100 Ом
1 Поиск в FivelВ блокнот
R2-R4 Резистор
10 кОм
3 Поиск в FivelВ блокнот
R5-R10 Резистор
1 кОм
6 Поиск в FivelВ блокнот
C1, C3 Конденсатор22 пФ2 Поиск в FivelВ блокнот
C2, C5-C7, C9, C10 Конденсатор100 нФ6 Поиск в FivelВ блокнот
C4 Электролитический конденсатор220 мкФ1 Поиск в FivelВ блокнот
C8 Электролитический конденсатор100 мкФ1 Поиск в FivelВ блокнот
HL1-HL6 Светодиод6 Поиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 4
Я собрал 0 4
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 4 чел.

Комментарии (12) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
StrannikM #
1600+ руб. за просто поиграться - пожалуй дороговато.
Вы пишете, что распознавание команд не достаточно чёткое, и говорить надо прямо в микрофон.
Весной купили племяннику китайскую собачку, реагирующую на команды по-русски. Уверенно распознаёт не меньше 10 команд. Не зависимо от голоса. "Слышит" с 2-3 метров.
Думаю, в ней контроллер не дороже этого. Значит код лучше заточен под русский?
Ответить
0

[Автор]
Gauss #
Ну почему поиграться, в каких-то ситуациях может быть полезно.
Этот модуль распознает больше 10 команд, но не одновременно - нужно управлять группами команд. С английским голосовыми командами не игрался, но русский распознает, но присутствует доля ошибок.
Я не в коем случае не говорю, что это отличный модуль, напротив, я от него ожидал более стабильного результата. Для этого модуля можно использовать микрофон с усилителем и "слышать" он будет и на 5, и на 10 метров, но опять же от доли ошибок избавиться не получится.
Вообще же, я думаю, что русское, английское произношение тут не при чем, возможно, обработка голоса идет по принципу выделения из аналогового сигнала голоса закономерностей, типа длительности и амплитуд, а фонетики модуль не знает, поэтому ему все-равно на каком языке говорить
Ответить
0
StrannikM #
Думаю, ошибки возникают при коротких словах типа "раз", "два". Надо было придумать что-то вроде "красный", "зелёный", "налево", "направо". Там больше простор для распознавания.
В инструкции к китайской собачке команды: "голос", "спой песенку", "расскажи сказку"...
Ответить
0

[Автор]
Gauss #
Ну вообще, думаю, вы правы - попробую и отпишусь насколько лучше ситуация с более длинными словами.
Ответить
+1

[Автор]
Gauss #
"поговорил" еще с модулем - вцелом и общем ситуация с более длинными словами примерно такая же. Использовал команды вверх, вниз, налево, направо, вперед, назад, идти. Все вполне нормально распознается за исключением того, что налево часто определяется как вверх.Это означает тот факт, что для модуля желательно подбирать совместимые между собой голосовые команды в рамках одной распознаваемой группы, то есть такие команды, которые не будут подобным образом путаться при распознавании. В остальном при совместимых командах распознавание идет неплохое, единственно еще нужно попробовать с более чувствительными микрофонами для увеличения дальности.
Ответить
0
Wyx #
Думаю он производит БПФ, создаёт массив частот от времени и потом сравнивает входные данные с массивами
Ответить
0

[Автор]
Gauss #
Возможно и так - что-то такое универсальное - поэтому и разные слова могут определиться одинаково. Просто - не значит еще хорошо...
Ответить
0
Hork112 #
Как оно распознает фразы из нескольких слов и распознает ли?
Ответить
0

[Автор]
Gauss #
Команды записываются по одному слову, сразу какую-то фразу нельзя записать, но несколько отдельных слов образуют фразу и если произносить комбинацию этих слов, то каждое из них должно определиться, то есть последует несколько ответов от модуля о распознавании команды - сколько слов в распознанной фразе, столько ответов даст модуль
Ответить
0
StrannikM #
Gauss
Бегло ознакомился с фирменной документацией.
У модуля есть входы для выбора группы команд.
И выходы, назначаем командам.
Если их правильно перемкнуть, то можно создать из команд как бы вложенные меню.
Например для робота: движение, манипулятор, камера...
Ответить
+1

[Автор]
Gauss #
На самом модуле, завязанном по собственным выходам на входы, это не совсем получится, т.к. одновременно распознается 7 команд, связанных с 7 выводами модуля. Входов у модуля только 3 и связать комбинации бит на эти 3 вывода проблема, поэтому тут нужно добавить внешний минимальный МК для обработки данных и управления группами распознаваемых команд, организовав даже голосовое меню - с внешним МК это очень просто сделать полноценно.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Радиореле 220В
Радиореле 220В
Автомобильный GPS-трекер с GSM/GPRS и дистанционным управлением Набор для сборки - LED лампа
вверх