$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
Для преобразования речи в текст можно использовать сервис 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 сопровождающего книгу электронного архива (см. приложение).