Синтез мови на Raspberry Pi
Рейтинг статті: / 13
НайгіршеНайкраще 
Перерахуємо тільки безкоштовне та відкрите програмне забезпечення для перетворення тексту в мову. Перш, ніж починати встановлення програм, переконайтеся, що ваша система повністю оновлена.
Перед виконанням перетворення тексту в мову рекомендується виконати конфігурування звукової карти на Raspberry Pi:
1. Додайте модуль із ядра Linux:
echo 'snd-bcm2835' >> /etc/modules
sudo modprobe snd-bcm2835
2. Встановіть програвач та необхідне програмне забезпечення:
sudo apt-get install mplayer alsa-base alsa-utils pulseaudio mpg123
3. Встановіть використання кодеку mpg123 в MPlayer замість використовуваного за замовчуванням ffmp3float:
echo "afm=mp3lib" >> ~/.mplayer/config
Розглянемо деякі варіанти двигунів синтезу мови.
Програмне забезпечення для перетворення тексту в мову (TTS - Text To Speech)
eSpeak - компактне програмне забезпечення синтезатора мови з відкритим вихідним кодом для Linux, Windows та інших платформ.
Переваги: Використовується метод формант-синтезу, надаючи безліч розмовних мов в невеликому розмірі. Також, це дуже точне і просте для розуміння рішення.
Недоліки: Має деякі дивні залежності від X11, змушуючи іноді заїкатися. Також значно більша бібліотека у порівнянні з іншими.
Інструкція з установки:
1. Встановіть програмне забезпечення eSpeak:
sudo apt-get install espeak
2. Щоб сказати, що хочете, в eSpeak:
espeak "Hello world"
3. Щоб прочитати з файлу в eSpeak:
espeak -f <file>
4. Якщо нервують повідомлення, які виводяться на монітор, запустіть eSpeak в такому вигляді:
sudo espeak "Hello world" 2>/dev/null
Festival - загальна багатомовна система синтезу мови.
Переваги: Система призначена для підтримки декількох мов. Може використовувати проект Festvox, метою якого є зробити процес створення нових синтетичних голосів більш систематичним і краще документованим, роблячи його доступним для тих, хто будує новий голос.
Недоліки: Написано на C++. має велику базу коду, тому важке для розуміння і використання.
Інструкція з установки:
1. Встановіть програмне забезпечення Festival:
sudo apt-get install festival festival-freebsoft-utils
2. Для запуску Festival, передайте йому текст або файл, який хочете, щоб він прочитав:
echo  "Hello world" | festival --tts
Flite – двигун синтезу мови з малим часом запуску походить від Festival та проекту Festvox.
Переваги: В процесі постійного розвитку в Університеті Карнегі-Меллона. Дуже маленький двигун в порівнянні з іншими. Він також має менший базовий код, так що легше зрозуміти його. На цьому двигуну синтезу мови легко будувати і виправляти свої помилки. Він має всього кілька залежностей.
Недоліки: Саме виведення мови не завжди точне. Мова має дуже металевий відтінок, що відсутнє в голосі людини (більше, ніж в інших двигунах). Не підтримує дуже багато мов.
Інструкція з установки:
1. Встановіть програмне забезпечення Flite:
sudo apt-get install flite
2. Для запуску Flite введіть:
flite -t "text that you want flite to say"
GoogleTTS – онлайновий сервіс з відмінною якістю звучання.
Переваги: Відмінна якість звучання і підтримка багатьох мов.
Недоліки: Як у всякого онлайнового сервісу, необхідно мати доступ в Інтернет. Затримка при відтворенні. Обмеження довжини тексту, який перетворюється, приблизно 100 символами.
Інструкція з установки:
1. Встановіть MPlayer (якщо він встановлений, то даний крок можна пропустити):
sudo apt-get install mplayer
2. Створіть простий сценарій Bash і збережіть його під назвою “text2speech.sh“ – він завантажуватиме файли MP3 через URL і пограватиме їх. Текст сценарію для копіювання:
#!/bin/bash
say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=en&q=$*"; }
say $*
3. Зробіть сценарій виконуваним:
chmod +x text2speech.sh
4. Виконайте тестування за допомогою команди:
./text2speech.sh "I love my microcomputer Raspberry Pi"
Щоб обійти обмеження довжини перетворюваного тексту, наводимо змінений Bash-сценарій “text2speech.sh“, в якому текст розбивається на кілька частин так, щоб кожна частина мала не більше 100 символів і всі вони могли успішно відтворюватись.
#!/bin/bash

INPUT=$*
STRINGNUM=0
ary=($INPUT)
for key in "${!ary[@]}"
do
SHORTTMP[$STRINGNUM]="${SHORTTMP[$STRINGNUM]} ${ary[$key]}"
LENGTH=$(echo ${#SHORTTMP[$STRINGNUM]})

if [[ "$LENGTH" -lt "100" ]]; then

SHORT[$STRINGNUM]=${SHORTTMP[$STRINGNUM]}
else
STRINGNUM=$(($STRINGNUM+1))
SHORTTMP[$STRINGNUM]="${ary[$key]}"
SHORT[$STRINGNUM]="${ary[$key]}"
fi
done
for key in "${!SHORT[@]}"
do
say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=en&q=${SHORT[$key]}"; }
say $*
done
Запуск TTS з Python
Іноді може виникнути потреба заставити свою програму на Python говорити, замість того, щоб просто виводити текст. Наприклад, при реалізації робота.
TTS в Python можна реалізувати за допомогою обгортки, типу pyttsx, яка забезпечує пітоновський інтерфейс для різних TTS-двигунів.
Інший спосіб зробити TTS - виконувати систему команд безпосередньо з вашого коду Python або за допомогою Interprocess Communication (міжпроцесового зв'язку). Це хороший варіант, особливо в Unix і Linux системах, оскільки *nix системи мають дуже прохолодний командний рядок і мережевий інтерфейс.
Зазвичай, ви повинні спочатку встановити один з розглянутих вище TTS-двигунів для того, щоб ваша програма працювала на Python. Двигун TTS, який є основою для TTS-перетворення, може бути на будь-якій мові програмування.
Кілька прикладів використання різних TTS-двигунів з Python:
Приклад 1: Використання підпроцесу (зі стандартної бібліотеки Python) і eSpeak
import subprocess
text = '"Hello world"'
subprocess.call('espeak '+text, shell=True)
або так:
from subprocess import call
call(["espeak","-s140 -ven+18 -z","Hello world"])
Приклад 2: Використання підпроцесу (зі стандартної бібліотеки Python) та Festival
import subprocess
text = '"Hello world"'
subprocess.call('echo '+text+'|festival --tts', shell=True)
Приклад 3: Використання Festival з текстовим файлом
import subprocess
text = '"Hello world"'
filename = 'hello'
file=open(filename,'w')
file.write(text)
file.close()
subprocess.call('festival --tts '+filename, shell=True)
 
>
КнигаНовиниПрактика пошукуПартнериПро нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting