Portál AbcLinuxu, 3. května 2025 17:42

Když počítač promluví

27.2.2008 10:22 | Přečteno: 4620× | linux | Výběrový blog | poslední úprava: 22.8.2008 11:05

Festival, mbrola a Free(b)soft - díky tomu může počítač mluvit i česky a "zadarmo".

Pro syntézu řeči existuje spousta systémů. Když jde o přečtení textu v angličtině, tak to rozhodně není problém. Ty nastanou, když se o totéž pokusíte hezky česky. Nyní předkládám nástin svého řešení problému, a ortodoxní prominou, nejenom pro milovaný Linux, ale i pro ten ošklivý ďáblův systém (naštěstí jen pro výběhovou verzi (XP-SP2), tak snad nebudu upálen.

Základem řešení je Festival - GNU systém pro generaci řeči. V mé nejoblíbenější distribuci se instaluje složitým příkazem

yum install festival

(v jiných distribucích to nejspíš bude obdobné) uživatel nejkvalitnějšího a nejrozšířenějšího systému má na výběr ze dvou velmi jednoduchých způsobů

  1. Kompilace ze zdrojových kódů (google mi pošeptal, že prý to VC-6 zvládne)
  2. Stažením již přeložené binárky a jejím rozbalením do patřičného adresáře

vzhledem k trivialitě prvního způsobu si popíšeme způsob druhý.

Přeložený a zkompilovaný systém Festival pro W-XP-SP2 najdeme na adrese http://www.cs.dal.ca/~lalita/festival/win32/festival_1.95-beta_win32.zip. Obsah zip archívu rozbalíme do adresáře (složky)

C:\FestivalTTS

Pro méně zkušené bude to nějak takhle

C:\FestivalTTS\festival\lib...

a

C:\FestivalTTS\festival\src...

Po této operaci by už měl být systém Festival na obou systémech funkční. Systém spustíme v Linuxu příkazem

festival

(v shellu), u XP otevřeme příkazovou řádku (command) a napíšeme

c:\festivaltts\festival\src\main\festival.exe

Pokud se systém spustí, vyzývá nás k zadání příkazu promptem

festival>

nyní zapíšeme příkaz

festival>(SayText "Hello")

a pokud je vše v pořádku, počítač na nás anglicky promluví. Systém opustíme příkazem

festival>(exit)

Pro syntézu řeči nemusíme spouštět systém přímo, můžeme využít přesměrování

linux:

bash#echo "Hello Tom" | festival --tts

W-XP:

c:>echo Hello Tom | c:\festivaltts\festival\src\main\festival.exe --tts

Pokud je něco v nepořádku, jistě se vám podaří najít řešení pročítáním diskuzních fór, googlováním a dalšími způsoby. Když se to povedlo uchodit mě, tak proč ne i vám :-)

Počítač nám mluví, ale zatím pouze anglicky. Nyní ho musíme donutit promluvit česky. Po dlouhém pátrání a hledání jsem nalezl dva systémy, které umožňují syntézu češtiny. Oba pochází od Free(b)soft, v prvním řešení používáme jejich hlasovou databázi, ve druhém databázi systému mbrola. V obou případech se předpokládá vstupní kódování ISO8859-2, a tak se mohou vyskytnout problémy s diakritikou (to jsou ty ošklivé háčky a čárky, které nám přinášejí tolik problémů).

Stáhneme si zkompilovanou difonovou databázi s českými hláskami a rozbalíme (šťastní uživatelé nejlepšího systému planety vědí, že archívy tar zabalené gzipem rozbalí například archivátorem 7-zip). Hlasová databáze je v archívu uložena v adresáři (složce)

voice-czech-ph-bin-0.1

Obsah adresáře zkopírujeme na místo, kde systém festival přepokládá umístění této hlasové databáze, což je

...festival/lib/voices/czech/czech_ph

Připomínám, že v mém oblíbeném systému se festival nachází v adresáři

/usr/share/festival...

v systému W-XP

C:\FestivalTTS\festival...

Upravíme soubor

...festival/lib/voices/czech/czech_ph/festvox/czech_ph.scm

ve W-XP:

C:\FestivalTTS\festival\voices\czech\czech_ph\festvox\czech_ph.scm

Soubor otevřeme svým oblíbeným editorem (Vi :-)), najdeme v něm řádku

(defvar czech-ph-unisyn-index "/usr/share/festival/voices/czech/czech_ph/group/ph.group")

a změníme ji tak, aby proměnná (to je ten text v uvozovkách) obsahovala správnou cestu k příslušnému souboru ph.group (hlasová databáze). V případě mého oblíbeného systému není změna nutná, uživatelé systému W-XP musí řádku přepsat následovně:

(defvar czech-ph-unisyn-index "c:/FestivalTTS/festival/lib/voices/czech/czech_ph/group/ph.group")

Po stažení databáze potřebujeme makra pro zpracování češtiny. Jedná se o balíček festival-czech ve verzi 0.2.1 (nižší verze mají problémy s novější verzí festivalu). Po rozbalení překopírujeme soubory czech-lexicon.out, czech-lexicon.scm, czech.scm, czech-debug.scm, czech-mbrola.scm, czech-unisys.scm do adresáře

...festival/lib

V systému W-XP do

C:\FestivalTTS\festival\lib

Upravíme cestu v souboru czech.scm. Otevřeme soubor v oblíbeném editoru, nalezneme řádku

(let ((dirs '("." "/usr/share/festival"))

a upravíme cesty - uživatelé W-XP tuto řádku změní na

(let ((dirs '("." "c:/FestivalTTS/festival/lib"))

Pokud je vše nastaveno, spustíme festival a zkusíme

festival>(set! czech-lexicon-file "/usr/share/festival/lib/czech-lexicon.out")
festival>(require 'czech)
festival>(voice_czech_ph)
festival>(SayText "Pepa z depa")
festival>(exit)

Jestliže se z reproduktorů ozvala čeština, můžeme si poblahopřát k úspěchu. Pokud chceme, aby systém používal češtinu defaultně, editujeme v Linuxu soubor .festivalrc (v domácím adresáři) tak, aby obsahoval řádky

(set! czech-lexicon-file "/usr/share/festival/lib/czech-lexicon.out")
(require 'czech)
(set! voice_default 'voice_czech_ph)

u systému W-XP tyto řádky připíšeme na konec souboru

C:\FestivalTTS\festival\lib\festival.scm

Při spouštění ze shelu (příkazové řádky) ještě musíme překonat problém kódování češtiny. Festival-czech používá interně kódování ISO8859-2. Pro překódování můžeme s úspěchem použít utilitu iconv, pro majitele W-XP je v binární podobě dostupná na adrese http://www.zlatkovic.com/pub/libxml/iconv-1.9.2.win32.zip. V následujícím příkladu předpokládám, že se iconv.exe nachází v systému W-XP ve složce

C:\iconv,

a že kódování terminálu (command) je nastaveno na CP852. Shell mého oblíbeného linuxového systému mám nastaven na UTF-8.

Linux:

bash#echo "Vy příšerní počítačoví maniaci" | iconv -f UTF-8 -t ISO8859-2 | festival --tts
W-XP:

c:>echo Vy příšerní počítačoví maniaci | c:\iconv\iconv.exe -f CP852 -t ISO8859-2 | c:\festivaltts\festival\src\main\festival.exe --tts

Pokud se vám vše podařilo, blahopřeji, váš systém vám dokáže česky vynadat.

Nakonec jsem vyzkoušel generaci hlasu pomocí systému mbrola. K instalaci potřebujeme binární balíčky a hlasovou databázi. Obojí je dostupné na stránkách projektu, pro češtinu máme k dispozici dvě hlasové databáze. Nejprve si stáhneme binární moduly. Pro linux bude třeba soubor z archívu mbr301h.zip, který obsahuje moduly pro různé architektury, pro W-XP dosovský mbr301d.zip. Po rozbalení z archívů nakopírujeme binární moduly na vhodná místa. V Linuxu je dobrým nápadem vytvoření symbolického linku na vhodný modul (např.

ln -s /usr/share/mbrola/mbrola-linux-i386 /usr/bin/mbrola

), ve W-XP budu předpokládat umístění souboru mbrola.exe v adresáři

C:\mbrola

Po instalaci binárních modulů musíme nainstalovat hlasové databáze. Pro češtinu si stáhneme databázi cz1 a databázi cz2. V adresáři s binárním modulem vytvoříme podadresáře

db/cz1

a

db/cz2

Do těchto podadresářů pak hlasové databáze rozbalíme.

Systém mbrola předpokládá speciální formát souborů z kterých generuje mluvený text. Naštěstí systém festival dokáže přímo komunikovat s moduly mbrola, jen se musí upravit konfigurační soubor

...festival/lib/mbrola.scm

V souboru nalezneme řádky

(defvar mbrola_progname "/cstr/external/mbrola/mbrola"
"mbrola_progname
The program name for mbrola.")

a změníme hodnotu v uvozovkách tak, aby ukazovala na binární modul mbrola (v Linuxu např.

/usr/share/mbrola/mbrola-linux-i386

ve W-XP

C:\mbrola\mbrola.exe

Poznámka: V dalším textu předpokládám instalaci hlasových databází cz1 a cz2 v adresářích -

Linux:

/usr/share/mbrola/db/[cz1|cz2]
W-XP:

C:\mbrola\db\[cz1|cz2]

Spustíme systém festival. Při použití hlasové databáze cz1 napíšeme následující příkaz

Linux:

festival>(set! czech-mbrola_database "/usr/share/mbrola/db/cz1/cz1")
W-XP:

festival>(set! czech-mbrola_database "c:/mbrola/db/cz1/cz1")

Při použití hlasové databáze cz2 napíšeme

Linux:

festival>(set! czech-mbrola_database "/usr/share/mbrola/db/cz2/cz2")
W-XP:

festival>(set! czech-mbrola_database "c:/mbrola/db/cz2/cz2")

Další příkazy jsou na obou systémech shodné.

festival>(require 'czech-mbrola)
festival>(voice_czech_mbrola_cz2)
festival>(SayText "Pepa z depa")
festival>(exit)

Pokud se ozval český hlas, máme vyzkoušen základ generování hlasu přes systém mbrola.

Jestliže máme rozchozen tento základ, lze díky přesměrování generovat nejrůznější hlasové výstupy (číst obsah souborů, výpisy adresářů apod. Zajímavé může být přesměrování výstupu programu lynx (čtení www stránek -

lynx -dump -nolist | festival --tts

Pro majitele dokonalého systému je lynx.exe k dispozici na adrese http://csant.info/downloads/lynx_setup-2.8.5rel-1.zip)

Na závěr doufám, že vám tento text pomůže (a hlavně sám to nebudu muset znovu vymýšlet ;-)). Uvedené odkazy jsou platné v době publikování textu. Informace a pomoc s problémy při troše trpělivosti naleznete na stránkách jednotlivých projektů, odkazy jsou v textu.

       

Hodnocení: 95 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

27.2.2008 10:42 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky za srozumitelný návod.

Dodadal bych, že Ubuntu už umí česky rovnou (Gibbon). A že krom Festivalu mluví česky i Epos.
27.2.2008 14:18 Ctirad Feřtr | skóre: 43 | Praha
Rozbalit Rozbalit vše Re: Když počítač promluví
A ještě espeak. Tam navíc narozdíl od výše jmenovaných probíhá i celkem intenzivní vývoj.
27.2.2008 10:42 CET
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Festival jsem jenom lehce zkousel, ale takhle jsem ho nerozchodil. Muzes napsat, jakej system pro cestinu je lepsi? Jednodussi vypada prvni zpusob pomoci hlasove databaze, ale jde mi spis o to, jestli nektery ze systemu ma lepsi (realistictejsi) zvukovy vystup (nemam vubec par, jak hodne se ty dva systemy lisi, takze vubec netusim, jestli se muzou lisit i zvukove vystupy). Diky.
27.2.2008 10:45 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Když počítač promluví
Spíš jde o to, co pak, na co ten hlas nasadit. Ozvučená konzole, ozvučený desktop, prosté čtení, brouzdání po netu...
Ilfirin avatar 27.2.2008 11:31 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: Když počítač promluví
Také bych chtěl nějaký subjektivní dodatek, co se autorovi líbilo více.

A jinak perfektní článek, děkuji za něj velice.
Akorát bych měl připomínku: ten blog s příkazy, jestli by nebyl lepší udělat stylem co příkaz to řádek. Text bude delší ale imho přehlednější.
27.2.2008 21:05 wo | skóre: 2 | blog: wo
Rozbalit Rozbalit vše Re: Když počítač promluví
K tomu pouze tolik. Podle kvality výstupu v češtině bych to seřadil epos, mbrola, czech_ph - v základním nastavení. Všechny výstupy jsou poměrně dobře srozumitelné, ale bohužel monotónní. Hlasové vzorky jsou dostupné na domácích stránkách jednotlivých systémů.
Další kapitolou by bylo navázání na aplikace apod...
Zvláštní je, že máme pro generaci hlasu tři volné hlasové databáze, každou pro jiný systém syntézy a každou s nějakými nedostatky. Pomalu to vypadá, že pokud každá univerzita nemá svůj (pokud možno nekompatabilní) způsob hlasové syntézy, tak neexistuje :-).
Mohl bych pokračovat dokumentací (spíše jejím nedostatkem, či málo srozumitelným zpracováním), případně jednoduchými návody - syntéza češtiny je volně snad dva (možná tři) roky, a nikdy jsem nevygooglil jednoduchý a srozumitelný návod pro nás lamy, pokud možno od tvůrců.
27.2.2008 12:42 cenda | skóre: 24 | blog: dedalebedanebohurvajs | Planá nad Lužnicí
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Velmi pěkné, já si furt myslel, že česky PC ještě dlouho mluvit nebude. Jen se mi zdá článek nepřehledný vaším formátováním. Třeba by stačilo, kdyby věci psané takto, byly
na nové řádce.
Ale samozřejmě s tím nic dělat nemusíš. :-)
27.2.2008 12:46 cenda | skóre: 24 | blog: dedalebedanebohurvajs | Planá nad Lužnicí
Rozbalit Rozbalit vše Re: Když počítač promluví
Aha, tak jsem si nepřečetl poslední příspěvěk celý. :-D
27.2.2008 20:47 wo | skóre: 2 | blog: wo
Rozbalit Rozbalit vše Re: Když počítač promluví
Opraveno :)
27.2.2008 13:44 xm | skóre: 36 | blog: Osvobozený blog | Praha
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Na syntézu češtiny je mnohem lepší Epos. Hlas Violka (volně ke stažení) pro Epos je přímo dokonalý, hodně realistický a příjemný.
Svoboda je tím nejdůležitějším, co máme. Nenechte se o ní připravit, podporujte Pirátskou stranu!
27.2.2008 13:51 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Když počítač promluví
Epos se mi zdá hodně dobrý. Ale zase jsou s ním problémy v nasazení k čtecím programům.
27.2.2008 14:04 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Když počítač promluví
A kde je konkrétně problém?
27.2.2008 14:16 Ctirad Feřtr | skóre: 43 | Praha
Rozbalit Rozbalit vše Re: Když počítač promluví
Chybí výstupní plugin pro speech dispatcher nebo alespoň gnome speech. Navíc celý epos je takový divný, často padá nebo najednou začne mluvit "roboticky" namísto určeným hlasem. Taky si tuším nejdřív přechroustá celou frázi než začne mluvit, takže má velkou latenci.
27.2.2008 21:50 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Když počítač promluví
Mně teda violka velmi realisticky a příjemně padá na "double free or corruption". :-)
27.2.2008 22:06 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Když počítač promluví
Ááááá, zlý, ošklivý PEBKAC! Fuj, necháš Kyosukeho na pokoji! :-D (Už mi to funguje. ;-))
27.2.2008 13:53 Xóža Hňabaj | skóre: 15 | blog: popcorp | Brno
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky za clanek, v brzke dobe se mi neco podobneho bude celkem hodit.
Jednaokový biu
27.2.2008 14:47 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
<rejp> Hele, hromada závorek! :-D </rejp>

Ale žerty stranou - tohle si taky musím rozchodit. Možná to má co dělat s tím, že jsem se zase začal koukat na Star Trek, ale... :-) No prostě je to kewl. :-)
Jak moc jsou ábíčkáři inteligentní? ;-)
peYko avatar 27.2.2008 19:00 peYko | skóre: 8 | blog: /dev/null | Žilina
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
nehladal som tak sa pytam - existuje toto aj pre slovencinu?
...a je zo mna Liferay koder. | She sells Bourne shells by the sea shore... | Eufory - heavymetal este neumrel :)
27.2.2008 22:22 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Ja jsem testoval EPOS, hlas violka. Vubec to nebylo tak brutalni jako tady v blogu, stacilo par balicku v archu a zbytek uz jsem velice jednoduse naklikal v KDE. Desil jsem tim lidi na dni otevrenych dveri uz skoro pred pul rokem. V KDE nastavovatku je dobry dat intonaci na maximum a pak je ten hlas mnohem lepsi nez pri defaultu.

Opravdu to cte velice hezky, jen na muj vkus to dela moc velky mezery mezi vetami.

Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
28.2.2008 08:03 Dag | skóre: 25 | blog: bzuk
Rozbalit Rozbalit vše Re: Když počítač promluví
Do kttsmgr jde Epos velmi dobře, dařívá se mi ho nasadit lépe něž Festival. Ale bohužel, Kde má jen opravdu hodně základní programy na čtení, pokud to chceme jako kompenzační pomůcku. V Gnome, které je v ozvučení desktopu dál, viz co zmínil Ctirad Feřt. Jinak hlas se mi zdá (i říkají další) velmi příjemný.
13.3.2008 03:28 J.D.SKAlpel
Rozbalit Rozbalit vše Re: Když počítač promluví
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim vsechny. Mam tu takovy problemecek :) Stahnul jsem si z home stranek programek EPOS, jak verzi 2.4.79, tak i verzi 2.5.35. Doplnuji ze pouzivam "nedokonaly" OS WinXP. Ted ten problem. Verze 2.4.79 pro Win, obsahuje program WinSay , diky nemu se dal "predcitat" opravdu rozsahly text. Tedy bohuzel tato verze pri vlozeni delsiho textu se bud kousne, nebo zacne cist, ale nekde po 7. radku se cteni zastavi.

U verze 2.5.35 zase neni onen WinSay, tak jsem ho zkopiroval vcetne potrebnych DLL, a kupodivu to bezi. Dokaze to dokonce predcitat hodne rozsahly text, ale je tu drobny problem. Z nejakeho duvodu a bohuzel netusim z jakeho, mu pri pouzivani WinSay vynechava nektera diakriticka znamenka. Presneji (ž, š, ti, di, a jine) Nejsem schopen prijit na to, jak donutit EPOS novejsi verze aby dokazal cist "bezchybne" . Z prikazoveho radku cte naprosto bezchybne, ale nelze tam vlozit delsi text, protoze potom to dela neporadek. Tak me napadlo, jestli neexistuje nejaka moznost donutit WinSay cist v poradku, nebo nejaky prikaz pro EPOS aby cetl z nejakeho textoveho souboru.

Pokud nekdo vite jak na to, prosim o odpovedet. Muzete odpovidat zde, nebo na muj email J.D.SKAlpel@email.cz a nebo i na me ICQ 215-058-536

Mnohokrat dekuji. J.D.SKAlpel

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.