Движок распознавания речи Julius


Предыдущая | Следующая

Для преобразования речи в текст можно использовать сервис Google Speech. Но здесь есть свои минусы:

* требуется подключение к Интернету;

* процент распознавания не очень высок (хотя при использовании Google Speech API с планшета распознавание производится гораздо лучше);

* задержка с получением ответа 3-5 секунд.

Так что лучше мы воспользуемся движком распознавания речи японского происхождения Julius. Для работы с Julius требуются предварительно обученные грамма­тическая и акустическая модели. Акустическая модель строится путем обработки звуковых файлов (с начитанными человеком фрагментами текстов) специальными программами. Наиболее правильно самому наговорить эти фрагменты и, таким об­разом, научить движок распознавать именно свой голос (в том числе интонацию и ошибки произношения) и словосочетания, которые нужны именно вам. Тогда про­цент правильного распознавания будет стремиться к значению 100. Однако все это сложно, требует определенной подготовки и времени, поэтому здесь мы ограни­чимся акустической моделью, распространяемой с сайта http://www.voxforge.org. Приемлемая акустическая модель имеется там только для английского языка, для русского модели пока нет. Но для нашей задачи достаточно распознавания англий­ской речи.

Итак, приступим к установке Julius.

Сначала доустановим необходимые пакеты:

sudo apt-get install alsa-tools alsa-oss flex zliblg-dev libc-bin libc-dev-bin python-pexpect libasound2 libasound2-dev cvs

Сделаем тестовую проверку записи на микрофон и воспроизведения:

arecord -d 10 -D plughw:1,0 test.wav aplay test.wav

Установим пакет Julius из SNV:

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4

Определим переменные окружения:

export CFLAGS="-O2 -mcpu=arm117 6jzf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit- frame-pointer"

Далее конфигурирование, компиляция и построение пакета:

cd julius4

./configure —with-mictype=alsa make

sudo make install

Здесь надо отметить, что конфигурирование с параметром —with-mictype=alsa не проходило, и было сделано без него:

./configure

make

sudo make install

Этот процесс достаточно долгий...

Теперь скачаем упомянутую ранее английскую акустическую модель:

http://www.repository.voxforge1.org/downloads/Main/Tags/Releases/0_1_1- build726/Julius_AcousticModels_8kHz-16bit_MFCC_O_D_(0_1_1-build726) (1).zip

и распакуем ее в папку julius_model2.

Затем можно приступить к настройке, которая фактически включает в себя только процесс создания словаря: списка слов, который должен уметь распознавать дви­жок, и объяснение того, как эти слова могут между собой сопоставляться. Нужно это для двух целей: во-первых, движок должен знать произношение слов и пони­мать их, а, во-вторых, сократив словарь всего до нескольких фраз, мы значительно повысим качество распознавания.

Нам необходимо поменять содержимое следующих файлов:

* sample.voca — содержит совсем небольшой список слов, а также их фонетиче­ское представление (что-то вроде транскрипции);

* sample.grammar — содержит правила, в каких комбинациях эти слова могут быть использованы.

Возможностями Julius можно воспользоваться, например, для управления роботом с помощью голосовых команд. Соответственно, составим и словарь.

Сначала определимся со списком слов для голосовых команд управления роботом:

* выбор объекта, к которому обращены команды: "Robert" — сам робот;

* команды приветствия: "Hi", "Buy", "Thanks", "Sleep";

* команды выбора действия: "On", "Off", "Forward", "Back", "Left", "Right", "Turn" (поворот), "Dance" (набор предопределенных движений), "Base" (на базу);

* команды — численные параметры выбора действия: "One"-"Nine" (1-9) — ско­рость движения (или номер танца);

* команды — относительные параметры выбора действия: "Slow", "Fast" — быст­рее, медленнее (для скорости).

Содержимое файла sample.voca представлено в листинге 4.4.

Листинг 4.4. Файл sample.voca

% NS_B 
<s> sil 
% NS_E 
</s> sil 
% NAME 
ROBERT r ow b er t 
% HELLO 
HI hh ay 
BUY b ay 
THANKS th ae ng k s 
SLEEP s l iy p 
% DO 
ON ao n 
OFF ao f 
BASE b ey s 
FORWARD f ao r w aa r d 
BACK b eh k 
LEFT l eh f t 
RIGHT r ay t 
TURN t er n 
DANCE d aa n s 
% DIGIT 
ONE w ah n 
TWO t uw 
THREE th r iy 
FOUR f ao r 

FIVE f ay v 
SIX s ih k s 
SEVEN s eh v ax n 
EIGHT ey t 
NINE n ay n 
% SPEED 
FAST f aa s t 
SLOW s l ow 

Фонетическое представление слов содержится в файле beep-1.0, который находится в папке Glava_04\julius сопровождающего книгу электронного архива (см. приложение).

Содержимое файла sample.grammar с правилами, определяющими в каких комбинациях слова команд могут быть использованы, представлено в листинге 4.5.

Листинг 4.5. Файл sample.grammar

S : NS_B FRAZA NS_E 
FRAZA: NAME HELLO 
FRAZA: NAME DO 
FRAZA: NAME DO DIGIT 
FRAZA: NAME DO SPEED 
FRAZA: HELLO 
FRAZA: DO 
FRAZA: DIGIT 
FRAZA: SPEED 

Выполняем команду для генерации файлов sample.dfa, sample.term и sample.dict:

mkdfa sample

Теперь можно приступать к проверке работы языковой модели. Настроим ALSEDEV для записи голоса с микрофона:

julius -input mic -C julius.jconf

Затем произносим фразы и смотрим результат распознавания (рис. 4.33).

Как можно видеть, распознавание осуществляется хуже, чем на нетбуке с системой Ubuntu 11.10, и совсем не распознаются фразы... Впрочем, поупражнявшись с произношением, можно прийти к приемлемому результату.

Напишем скрипт на Python, выделяющий распознаваемое слово из скрипта распознавания. Нас интересует слово в строке, начинающейся со слова sentence1 между тегами <s> и <s>.

Первый скрипт — julius_init.py — запускает скрипт распознования Julius и передает результат скрипту julius_to_text.py для выделения распознаваемого слова. Содержимое этих скриптов представлено в листингах 4.6 и 4.7 соответственно.

Листинг 4.6. Скрипт julius_init.py

Листинг 4.7. Скрипт julius_to_text.py

Примечание

Коды всех листингов этого раздела вы найдете в папке glava_04\julius сопровождающе­го книгу электронного архива (см. приложение).