voice_recognizer
Описание работы с пакетом respeaker_controller.
Данный пакет занимается распознаванием команд из потокового аудио сигнала, публикуемого в топик /head/audio пакетом respeaker_controller.
В качестве внутреннего движка распознавания речи используется pocketsphinx.
Запуск пакета через CLI:
Перед запуском убедитесь, что запущен пакет 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/gram.gram
- здесь содержится описание формальной грамматики, на основе которой происходит распознавание команд. Пакет использует регулярную грамматику FSG. То есть все предложения (команды), которые пакет должен уметь распознавать, строго определены. Для задания FSG-грамматик в PocketSphinx используются файлы формата JSGF (Java Speech Grammar Format). В этом файле нужно четко задать команды, которые должен распознавать пакет.
Файл
voice_recognizer/config/dictionary.txt
- список вообще всех слов, которые должен распознавать пакет. В этот файл впишите все слова, которые должен распознавать пакет
Далее этот файл dictionary.txt необходимо преобразовать в фонетический словарь.
Перейдите в директорию voice_recognizer/config/ru4sphinx-master/text2dict
Внутри этой директории запустите скрипт dict2transcript.pl
с указанием двух путей.
Первый путь — это путь до нашего текстового файла с выписанными словами, то есть dictionary.txt
.
Второй путь — это путь, куда сохранить файл с готовым словарём. Файл словаря имеет расширение .dic. Лучше указывать абсолютные пути до файлов.
Пример вызова через CLI (находясь в директории со скриптом):
Дождитесь формирования фонетического словаря - это займёт около минуты.
Скрипт сгенерирует два файла dictionary.dic.accent
и dictionary.dic
(названия могут отличаться, если вы ввели другое название файла во втором пути скрипта).
Файл 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:
Убедитесь, что также запущен пакет для работы с микрофонным модулем - respeaker_controller
Last updated