Смена ключевой фразы

Смена ключевой фразы
Распознаванием ключевых слов занимается ROS-нода ~kws_recognizer. Далее будет приведен пример смены ключевой фразы по умолчанию Слушай, Робот!
на Эй, Голова!
Шаг 1. Остановка всех запущенных пакетов
Прежде чем вносить изменения, остановим текущий сервис, чтобы избежать неожиданных сбоев:
sudo systemctl stop robohead.service
Подсказка: Вы можете проверить статус сервиса командой
sudo systemctl status robohead.service
. Если всё остановилось корректно, увидите статусinactive
.
Шаг 2. Изменение списка ключевых фраз
Откройте файл со списком фраз:
robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/kwslist.txt
Найдите строку с вашей старой фразой и замените её на новую:
эйголова /1e-40/
Совет по порогу чувствительности (/1e-40/):
Меньше значение (например,
1e-45
) — робот будет менее «слуховым», распознаёт только чёткие команды.Большее значение (например,
1e-35
) — более чувствительный, но может реагировать на случайные звуки.
Обратите внимание: ключевую фразу нужно писать без пробелов, а сама фраза должна состоять из 3–4 слогов для надёжного распознавания (например, «Алиса», «Эй, Сири», «Окей, Гугл»).
Шаг 3: Обновление фонетического словаря
Чтобы система правильно «понимала», как звучат слова, необходимо обновить фонетический словарь
Файл robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt
- список вообще всех слов, которые должен распознавать пакет.
В этот файл необходимо вписывать все слова (и ключевые слова, и слова, входящие в состав команд), которые должен распознавать пакет.
Откройте
dictionary.txt
, он находится по пути:robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt
Вместо текущей ключевой фразы впишите новую ключевую фразу:
# dictionary.txt эйголова покажи уши левое правое поздоровайся сделай фото следи за шариком
Сгенерируйте файл с фонетическими записями командой:
~/robohead_ws/src/ru4sphinx/text2dict/dict2transcript.pl \ ~/robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.txt \ ~/robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/dictionary.dict
- Утилита `ru4sphinx` сгенерирует два файла `dictionary.dict.accent` и `dictionary.dict`.
- Файл `dictionary.dict.accent` содержит ударения в словах, по сути, это просто промежуточный файл для генерации `dictionary.dict`. Его дополнительное редактирование ни к чему не приведет.
- **Совет:** откройте `dictionary.dict` и, если необходимо, добавьте альтернативные варианты произношения для сложных слов.
Пример того, как могут выглядеть записи:
# dictionary.dict
эйголова y j g ay l a v aa
эйголова(2) y j g o l o v aa
эйголова(3) ay j g o l a v aa
Шаг 4: Настройка соответствий команд
Помимо того, что ключевую фразу нужно добавить в фонетический словарь, также нужно отразить, что именно по этой фразе будет происходить переход в стандартное действие std_attention
для ожидания получения команды к выполнению.
Для этого необходимо отредактировать файл robohead_ws/src/robohead/robohead_controller/config/robohead_controller.yaml
:
Откройте файл:
robohead_ws/src/robohead/robohead_controller/config/robohead_controller.yaml
Найдите блок
robohead_controller_actions_match
и новую ключевую фразуэйголова
для действияstd_attention
:robohead_controller_actions_match: "эйголова": "robohead_controller_actions.std_attention.action" # остальные соответствия...
Полный пример блока для наглядности:
robohead_controller_actions_match: "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"
Шаг 5. Перезапуск сервиса
После всех изменений перезапустите сервис, чтобы робот «подхватил» новую конфигурацию:
sudo systemctl restart robohead.service
Проверка: снова используйте
sudo systemctl status robohead.service
и убедитесь, что статус —active
.
Часто возникающие вопросы и рекомендации
Робот не реагирует на «Эй, Голова!»
Проверьте, правильно ли указана фраза без пробелов.
Попробуйте изменить порог чувствительности (секцию
/1e-40/
).
Робот реагирует на неожиданные звуки
Увеличьте порог (например, до
1e-45
), чтобы отфильтровать фоновые шумы.
Фразы распознаются некорректно
Добавьте более подробные фонетические варианты в
dictionary.dict
.
Last updated