Робо-голова
  • Общая информация
  • Технические характеристики
  • Комплект поставки
  • Полезные ссылки
  • Быстрый старт
  • Настройка и обслуживание
    • Подключение к Робоголове по сети
      • Настройка подключения к Сети
      • Подключение по SSH к Робоголове
      • Подключение по SFTP
      • Подключение через VSCode
    • Смена данных устройства
    • Выключение головы
    • Возврат к заводским настройкам
    • Ubuntu-сервис
    • Подключение аккумулятора
    • Зарядка батареи
    • Подключение сервоприводов к плате расширения
  • Интеграция с роботом TurtleBro
  • Устройство головы
    • Аппаратная конфигурация
    • Программное обеспечение
    • ROS-пакеты
      • robohead_controller
      • display_driver
      • neck_driver
      • ears_driver
      • speakers_driver
      • respeaker_driver
      • voice_recognizer_pocketsphinx
        • ROS-нода ~kws_recognizer
        • ROS-нода ~cmds_recognizer
        • Настройка собственных команд и ключевых слов для распознавания
      • sensor_driver
      • usb_cam
  • Кейсы взаимодействия
    • 1. Смена ресурс-пака стандартных действий
    • 2. Внесение изменений в стандартные действия
    • 3. Написание своего действия для robohead_controller
    • 4. Создание своих сценариев взаимодействия без использования robohead_controller
    • 5. Создание ROS-пакета со своим сценарием взаимодействия и его автозагрузка
Powered by GitBook
On this page
  • Настройка распознавания ключевого слова (фразы) "Слушай, Робот!"
  • Настройка распознавания команд
  • Создание фонетического словаря
  • Настройка распознавания ключевой фразы
  1. Устройство головы
  2. ROS-пакеты
  3. voice_recognizer_pocketsphinx

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

PreviousROS-нода ~cmds_recognizerNextsensor_driver

Last updated 2 days ago

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


Ниже приведен пример, который позволяет настроить движок pocketsphinx для распознавания ключевой фразы "Слушай, Робот!" и двух команд: "покажи левое ухо" и "покажи правое ухо".


Настройка распознавания ключевого слова (фразы) "Слушай, Робот!"

В файл voice_recognizer_pocketsphinx/config/kwslist.txt впишите то ключевое слово (или слова), которое вы хотите распознавать. В нашем случае, получится:

слушайробот/1e-40/

Значение 1e-40 - это пороговое значение срабатывания.

Ключевое слово (фраза) пишется без пробелов.

Для лучшего распознавания в ключевом слове должно быть 3-4 слога, вспоминте "Алиса", "Эй, Сири", "Окей, Гугл", "Слушай, Робот!".


Настройка распознавания команд

Файл voice_recognizer_pocketsphinx/config/gram.txt - здесь содержится описание , на основе которой происходит распознавание команд.

Пакет использует регулярную грамматику FSG. То есть все предложения (команды), которые пакет должен уметь распознавать, строго определены.

Для задания FSG-грамматик в PocketSphinx используются файлы формата (Java Speech Grammar Format).

Например, научим пакет распознавать команды "покажи левое ухо" и "покажи правое ухо", в файл voice_recognizer_pocketsphinx/config/gram.txt запишем следующее:

#JSGF V1.0;

grammar robohead_cmds;

public <commands> = <command> ;

<command> = <command_1> | <command_2> ;

<command_1> = покажи левое ухо ;
<command_2> = покажи правое ухо ;

Или, 2-й вариант:

#JSGF V1.0;

grammar robohead_cmds;

public <commands> = <command> ;

<command> = <command_1> ;

<command_1> = покажи ( левое | правое ) ухо ;

Грамматика сформирована!

Обратите внимание, robohead_cmds - это поле grammar_name в файле конфигурации, а commands - поле rule_name.


Создание фонетического словаря

Теперь необходимо сформировать словарь произношений слов, которые должны распознаваться.

Файл voice_recognizer_pocketsphinx/config/dictionary.txt - список вообще всех слов, которые должен распознавать пакет. В этот файл впишите все слова (и ключевые слова, и слова, входящие в состав команд), которые должен распознавать пакет. В частности, для нашего примера из двух команд ("покажи левое ухо" и "покажи правое ухо") и одного ключевого слова ("слушайробот"), имеем:

слушайробот
покажи
левое
правое
ухо

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

Для этого используйте следующую команду:

~/robohead_ws/src/ru4sphinx/text2dict/dict2transcript.pl ~/robohead_ws/src/robohead/voice_recognizer_pocketsphinx/config/dictionary.txt ~/robohead_ws/src/robohead/voice_recognizer_pocketsphinx/config/dictionary.dict

Первый путь: ~/robohead_ws/src/robohead/voice_recognizer_pocketsphinx/config/dictionary.txt - это путь до файла, в котором лежит просто набор слов, которые необходимо распознавать.

Второй путь: ~/robohead_ws/src/robohead/voice_recognizer_pocketsphinx/config/dictionary.dict - это путь, куда будет сохранён фонетический словарь (произошения слов).

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

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

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

# dictionary.dict.accent
левое л+евое
покажи покаж+и
правое пр+авое
слушайробот сл+ушайробот
ухо +ухо
# dictionary.dict
левое ll je v ay i
покажи p ay k a zh yy
правое p r aa v ay i
слушайробот s l uu sh ay j r ay b ay t
ухо uu h ay

Файл dictionary.dict.accent содержит ударения в словах - просто промежуточный файл для генерации dictionary.dict. Его редактирование ни к чему не приведет. Файл dictionary.dict содержит последовательность фонем.

Если автоматическая генерация произношения вас не устраивает, вы можете вручную отредактировать файл dictionary.dict. Кроме того, можно добавить несколько вариантов произонешния для одного и того же слова.

Приведем отредактированный файл dictionary.dict для нашего примера из двух команд:

левое ll je v ay i
левое(2) ll je v oo je
покажи p ay k a zh yy
покажи(2) p oo k a zh yy
правое p r aa v ay i
правое(2) p r aa v oo je
слушайробот s l uu sh ay j r oo b ay t
ухо uu h ay
ухо(2) uu h oo

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

Настройка распознавания ключевой фразы

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

Для этого необходимо отредактировать файл robohead_ws/src/robohead/robohead_controller/config/robohead_controller.yaml :

nano ~/robohead_ws/src/robohead/robohead_controller/config/robohead_controller.yaml

На строчке 9 замените стандартное ключевое слово, на то, которое вы установили:

low_voltage_threshold: 3.3
low_voltage_hysteresis: 0.2

camera_topic_name: "~usb_cam/image_raw"

robohead_controller_actions_match: { # сопоставление голововой команды из voice_recognizer_pocketsphinx/gram.txt и файла, запускаемого на исполнение
  "wait_action" : "robohead_controller_actions.std_wait.action",
  "low_bat_action" : "robohead_controller_actions.std_low_bat.action",
  "вашаключеваяфраза" : "robohead_controller_actions.std_attention.action",
  "покажи левое ухо": "robohead_controller_actions.std_left_ear.action",
  "покажи правое ухо": "robohead_controller_actions.std_right_ear.action",
  "покажи уши" : "robohead_controller_actions.std_ears.action",
  "сделай фото": "robohead_controller_actions.std_make_photo.action",
  "поздоровайся": "robohead_controller_actions.std_greeting.action",
  "следи за шариком": "robohead_controller_actions.std_ball_tracker.action",
}

Сохраните файл и перезагрузите Робо-Голову.

Настройка параметров распознавания ключевой фразы

В случаях, если Робо-Голова плохо распознает ключевую фразу или наоборот, слышит её тогда, когда ничего не произносилось можно попробовать отредактировать некоторые параметры распознования.

  1. В файле robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/kwslist.txt

ключеваяфраза/1e-40/

значение 1e-40 - это пороговое значение срабатывания. Для улучшения распознавания попробуйте уменьшать число 40 , для ухудшения наоборот увеличивать.

  1. Файл robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/voice_recognizer_pocketsphinx_kws.yaml

buffer_size: 10 # Количество фреймов, которые подаются на вход модели распознавания

Для улучшения распознавания попробуйте уменьшать число 10 , для ухудшения наоборот увеличивать.

см. конфигурационный файл

ROS-нода ~kws_recognizer
ROS-нода ~cmds_recognizer
формальной грамматики
JSGF
ROS-нода ~cmds_recognizer
Вывод на экран после формирования фонетического словаря