voice_recognizer

Описание работы с пакетом respeaker_controller.

Данный пакет занимается распознаванием команд из потокового аудио сигнала, публикуемого в топик /head/audio пакетом respeaker_controller.

В качестве внутреннего движка распознавания речи используется pocketsphinx.

Запуск пакета через CLI:

roslaunch voice_recognizer voice_recognizer.launch

Перед запуском убедитесь, что запущен пакет respeaker_controller!

После запуска будут созданы две ROS-ноды: /asr_control и /kws_control


ROS-нода /kws_control

Получает весь входной поток аудио-сигнала и ищет в нём ключевые слова - key words.

Ключевое слово по умолчанию "Слушай, Морс!"

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

Обработка ключевых слов возобновляется после публикации любого сообщения в топик /head/voice_recognizer/grammar_not_found. Сообщения в этот топик публикует нода /asr_control

Распознанные ключевые слова публикуются в топик /head/kws_data


ROS-нода /asr_control

Осуществляет распознавание слов в потоке аудиосигнала.

Для распознавания использует данные топика /head/voice_recognizer/grammar_audio. Данные в этот топик публикует нода /kws_control.

Распознанные команды публикуются в топик /head/cmd_from_voice

После окончания распознавания (в независимости от того, было ли распознано хоть что-нибудь) публикуется пустое сообщение в топик /head/voice_recognizer/grammar_not_found, тем самым передавая управление ноде /kws_control для повторного распознавания ключевых слов.


Настройка собственных команд для распознавания

  • Файл voice_recognizer/config/kwslist.kwslist - здесь содержится список ключевых слов, распознаваемых нодой /kws_control В этот файл просто впишите требуемое ключевое слово и укажите пороговое значение для его определения. Обратите внимание: для лучшего распознавания в ключевом слове должно быть 3-4 слога, вспоминте "Алиса", "Эй, Сири", "Окей, Гугл", "Слушай, Морс".

# voice_recognizer/config/kwslist.kwslist

слушайморс /1e-50/
  • Файл voice_recognizer/config/gram.gram - здесь содержится описание формальной грамматики, на основе которой происходит распознавание команд. Пакет использует регулярную грамматику FSG. То есть все предложения (команды), которые пакет должен уметь распознавать, строго определены. Для задания FSG-грамматик в PocketSphinx используются файлы формата JSGF (Java Speech Grammar Format). В этом файле нужно четко задать команды, которые должен распознавать пакет.

# voice_recognizer/config/gram.gram

grammar robot_cmd;

public <commands> = <command> ;

<command> = <command_1> | <command_2> | <command_3> | <command_4> | <command_5> | <command_6> | <command_7>;

<command_1> = голос ;
<command_2> = дай ( другую | левую | правую ) лапу ;
<command_3> = сидеть ;
<command_4> = лежать ;
<command_5> = проснись ;
<command_6> = усни ;
<command_7> = что видишь ;

  • Файл voice_recognizer/config/dictionary.txt - список вообще всех слов, которые должен распознавать пакет. В этот файл впишите все слова, которые должен распознавать пакет

# voice_recognizer/config/dictionary.txt

слушайморс
голос
дай
левую
правую
другую
лапу
сидеть
лежать
проснись
усни
что
видишь

Далее этот файл dictionary.txt необходимо преобразовать в фонетический словарь.

Перейдите в директорию voice_recognizer/config/ru4sphinx-master/text2dict

Внутри этой директории запустите скрипт dict2transcript.pl с указанием двух путей. Первый путь — это путь до нашего текстового файла с выписанными словами, то есть dictionary.txt. Второй путь — это путь, куда сохранить файл с готовым словарём. Файл словаря имеет расширение .dic. Лучше указывать абсолютные пути до файлов.

Пример вызова через CLI (находясь в директории со скриптом):

./dict2transcript.pl /home/user/mors_ws/src/voice_recognizer/config/dictionary.txt /home/user/mors_ws/src/voice_recognizer/config/dictionary.dic

Дождитесь формирования фонетического словаря - это займёт около минуты.

Скрипт сгенерирует два файла dictionary.dic.accent и dictionary.dic (названия могут отличаться, если вы ввели другое название файла во втором пути скрипта).

# dictionary.dic.accent

видишь в+идишь
голос г+олос
дай д+ай
другую друг+ую
лапу л+апу
левую л+евую
лежать леж+ать
правую пр+авую
проснись пр+оснись
сидеть сид+еть
слушайморс сл+ушайморс
усни усн+и
что чт+о
что(2) шт+о
# dictionary.dic

видишь vv ii dd i sh
голос g oo l ay s
дай d aa j
другую d r u g uu uj
лапу l aa p u
левую ll je v u uj
лежать ll je zh aa tt
правую p r aa v u uj
проснись p r ay s nn i ss
сидеть ss i dd je tt
слушайморс s l uu sh ay j m oo r s
усни u s nn ii
что ch t oo
что(2) sh t oo

Файл dictionary.dic.accent содержит ударения в словах. Файл dictionary.dic содержит последовательность фонем.

При необходимости можно вручную отредактировать эти файлы. Например, в ключевом слове "слушайморс" заменена транскрипция "s l uu sh ay j m ay r s" на "s l uu sh ay j m oo r s"

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


Запуск пакета через CLI:

roslaunch voice_recognizer voice_recognizer.launch

Убедитесь, что также запущен пакет для работы с микрофонным модулем - respeaker_controller

Last updated