Raspberry + espeak , festival

  • Автор
Идея сделать робота пришла давно, и не какого-то
примитивного объезжающего препятствия и моргающего светодиодами, а более менее,
приближенного к человеческому функционалу. Проще говоря, он должен говорить,
понимать, видеть и может быть ездить. Для начала решили научить его разговаривать, ниже небольшая
шпаргалка как это сделать:



Пробуем установить синтезаторы речи, espeak.

Espeak работает быстро, но на английском, русский там очень безобразный, если достаточно английского языка , то на нем можно остановиться и festival не ставить:
pi@raspberry:#apt-get install espeak


Запуск воспроизведения.
pi@raspberry:#espeak –v en –s 100 “Hello my darling”


если услышали что то в динамиках значит все ОК, в противном случае анализируем ошибки. Ниже вариант на русском языке:
pi@raspberry:#espeak –v ru –s 100 “привет дорогой друг”


Вариант чтения из файла:
pi@raspberry:#espeak –v ru –s 100 ./text_file.txt

В командной строке много различных параметров можно пробовать различные варианты. Задержка порядка 3-5 секунд, после чего
начинается воспроизведение.
Установка festival: pi@raspberry:#apt-get install alsa-utils festival festvox-ru speech-tools
пакет festvox-ru занимаетпочти 200 мб , поэтому придется запастись терпением. После этого запускаем:

pi@raspberry:#echo “Привет дорог+ой друг” | festival–tts –language Russian

Вот в вышеупомянутом варианте запуска проходит порядка 50-60 секунд прежде, чем начнется воспроизведение. Хочу заметить что плюсик перед буквой +о означает ударение

Вот вариант из текстового файла:
pi@raspberry:#festival
–tts –language russian ./text_file.txt

Существует вариант работы через сервер festival , в этом случае задержка составляет от 20 до 30 секунд.
Старт сервера:
pi@raspberry:#festival–server –language russian

Клиент:
pi@raspberry:#/usr/bin/festival_client --ttw ./text_file.txt | aplay


Другой вариант:
pi@raspberry:# echo "Привет " | /usr/bin/festival_client --ttw | aplay


Вышеупомянутые варианты работы с festival удобны для работы с меняющимися текстами, к примеру сообщением даты и времени через crontab. Если имеют место повторяющиеся фразы, например «Внимание» или «Тревога», то лучше создать архив .wav файлов
и потом их использовать:
pi@raspberry:#cat /home/pi/wav/txt_file.txt | text2wav –otype wav –eval(‘language-russian’) –o /home/pi/wav/alarm.wav


В файле пишем типа «Внимание сработала сигнализация».
Тогда: pi@raspberry:#aplay /home/pi/wav_rep/alarm.wav работает просто мгновенно.

Ниже я привел текст простого скрипта, сообщающего дату и время. Работает как кукушка, каждый час, если дни недели и месяцы не нужны, можно их убрать:
#!/bin/sh 
stime_M=$(date +%M)
stime_H=$(date +%H)
stime_Mn=$(date +%m)
stime_D=$(date +%_d)
stime_W=$(date +%w)
MN=$stime_Mn
WW=$stime_W
if [ $WW = 1 ] then week="Понедельник" fi
if [ $WW = 2 ] then week="Вторник" fi
if [ $WW = 3 ] then week="Среда" fi
if [ $WW = 4 ] then week="четверг" fi
if [ $WW = 5 ] then week="пятница" fi
if [ $WW = 6 ] then week="суббота" fi
if [ $WW = 0 ] then week="воскресенье" fi
if [ $MN = 01 ] then mon="января" fi
if [ $MN = 02 ] then mon="февраля"
fi if [ $MN = 03 ] then mon="марта"
fi if [ $MN = 04 ] then mon="апреля"
fi if [ $MN = 05 ] then mon="мая"
fi if [ $MN = 06 ] then mon="июня"
fi if [ $MN = 07 ] then mon="июля"
fi if [ $MN = 08 ] then mon="августа" fi
if [ $MN = 09 ] then mon="сентября" fi
if [ $MN = 10 ] then mon="октября"
fi if [ $MN = 11 ] then mon="ноября" fi
if [ $MN = 12 ] then mon="декабря" fi
echo "Сегодня" $stime_D $mon $week "Время в системе" $stime_H "часов" $stime_M "минут" | festival --tts --language russian


В следующий раз опишем , как мы его научили транслировать видео.

Комментарии:

M_C
Да, Festival отличный Text-To-Speech движок.
Круто, что под Raspbian'ом легко заводится
RomanNV5
Здорово! Вобще не слышал ранее об этом пакете.
Мы с сыном собрались его радиоуправляемый вездеход в автономного робота на базе RPi превратить. А теперь он ещё и говорить сможет!
foxter6
Отличный движок! Лучший из тех что пробовал. Как-то учил разговаривать свой домашний сервак, утром проговаривал прогноз погоды) Иногда неправильно ставит ударение, можно для исправления попробовать поставить 2 гласные подряд(говорил холОдно, если написать хоолодно, то произнесет хОлодно)
JackM10
С ударением проблема легко решается:
#echo “Привет дорог+ой друг” | festival –tts –language Russian
гласная после + и есть ударная гласная
RomanNV5
Научить бы её разговаривать голосом GlaDOS из Портала...
JackM10
Сегодня дописал скрипт распознавания речи на движке google API , работает четко. Осталось создать диалоговую базу и подключить микрофон, жаль у нас такие не продаются. Тогда можно будет проводить беседу с роботом.
Как все сделаю выложу скрипты , может кому нибудь интересно будет.
Kornell
жаль, что google сильно ограничил использование — 50 запросов в день
M_C
>>Как все сделаю выложу скрипты , может кому нибудь интересно будет

Да интересно. Лучше даже с видео, интересно, насколько качественно Google может распознавать русскую речь
kspitfire8
Да, видео с результатом — было бы здорово! )

Для написания комментариев необходимо зарегистрироваться