Настройка собственных команд и ключевых слов для распознавания
Last updated
Last updated
Распознаванием ключевых слов занимается . Распознаванием команд занимается . После внесения изменений ниже, нужно перезагрузить весь пакет voice_recognizer_pocketspinx целиком, чтобы изменения вступили в силу.
Ниже приведен пример, который позволяет настроить движок pocketsphinx для распознавания ключевой фразы "Слушай, Робот!" и двух команд: "покажи левое ухо" и "покажи правое ухо".
В файл voice_recognizer_pocketsphinx/config/kwslist.txt
впишите то ключевое слово (или слова), которое вы хотите распознавать. В нашем случае, получится:
Значение 1e-40 - это пороговое значение срабатывания.
Файл voice_recognizer_pocketsphinx/config/gram.txt
- здесь содержится описание , на основе которой происходит распознавание команд.
Пакет использует регулярную грамматику FSG. То есть все предложения (команды), которые пакет должен уметь распознавать, строго определены.
Для задания FSG-грамматик в PocketSphinx используются файлы формата (Java Speech Grammar Format).
Например, научим пакет распознавать команды "покажи левое ухо" и "покажи правое ухо", в файл voice_recognizer_pocketsphinx/config/gram.txt
запишем следующее:
Или, 2-й вариант:
Грамматика сформирована!
Теперь необходимо сформировать словарь произношений слов, которые должны распознаваться.
Файл voice_recognizer_pocketsphinx/config/dictionary.txt
- список вообще всех слов, которые должен распознавать пакет.
В этот файл впишите все слова (и ключевые слова, и слова, входящие в состав команд), которые должен распознавать пакет. В частности, для нашего примера из двух команд ("покажи левое ухо" и "покажи правое ухо") и одного ключевого слова ("слушайробот"), имеем:
Далее этот файл dictionary.txt необходимо преобразовать в фонетический словарь dictionary.dict
Для этого используйте следующую команду:
Дождитесь формирования фонетического словаря - это займёт около минуты.
Скрипт сгенерирует два файла dictionary.dict.accent
и dictionary.dict
(названия могут отличаться, если вы ввели другое название файла во втором пути скрипта).
Файл dictionary.dict.accent
содержит ударения в словах - просто промежуточный файл для генерации dictionary.dict. Его редактирование ни к чему не приведет.
Файл dictionary.dict
содержит последовательность фонем.
Если автоматическая генерация произношения вас не устраивает, вы можете вручную отредактировать файл dictionary.dict. Кроме того, можно добавить несколько вариантов произонешния для одного и того же слова.
Приведем отредактированный файл dictionary.dict для нашего примера из двух команд:
После создания всех вышеперечисленных файлов необходимо перезагрузить пакет и распознавание будет работать на новых данных.
Помимо того, что ключевую фразу нужно добавить в фонетический словарь, также нужно отразить, что именно по этой фразе будет происходить переход в стандартное действие std_attention
для ожидания получения команды к выполнению.
Для этого необходимо отредактировать файл robohead_ws/src/robohead/robohead_controller/config/robohead_controller.yaml
:
На строчке 9 замените стандартное ключевое слово, на то, которое вы установили:
Сохраните файл и перезагрузите Робо-Голову.
В случаях, если Робо-Голова плохо распознает ключевую фразу или наоборот, слышит её тогда, когда ничего не произносилось можно попробовать отредактировать некоторые параметры распознования.
В файле robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/kwslist.txt
значение 1e-40 - это пороговое значение срабатывания. Для улучшения распознавания попробуйте уменьшать число 40 , для ухудшения наоборот увеличивать.
Файл robohead_ws/src/robohead/robohead_controller/config/voice_recognizer_pocketsphinx/voice_recognizer_pocketsphinx_kws.yaml
Для улучшения распознавания попробуйте уменьшать число 10 , для ухудшения наоборот увеличивать.
см. конфигурационный файл