Magyarul beszélő Asterisk/Elastix központ ingyen? Igen!

UPDATE: úgy tűnik, a Google időközben blokkolta a szkriptelhető TTS konvertálást, ezért a lentebb írtak már nem működnek... azért a posztot meghagyom, hátha még valakinek hasznos lehet.

Munkahelyi Elastix-alapú telefonközpontunk magyarítására kerestem megoldást a napokban. Az ok egyszerű: magyar anyanyelvű kollégák használják a rendszert, így jogos elvárás lehet részükről, hogy a központ magyarul beszéljen hozzájuk. Bár a legnépszerűbb fizetős magyarítás (Franciska) minőségileg kifogástalan, én mégis egy olyan megoldást szerettem volna találni, ami ingyenes, és szükség esetén pillanatok alatt módosítható, illetve kiegészíthető további hangüzenetekkel.

A megoldás végül úgy készült el, hogy továbbfejlesztettem egy githubon talált hasonló kezdeményezést (innen is köszönet az eredeti feltöltőnek!), ami bár remek kezdeményezés, de mégsem tetszett benne, hogy az espeak felolvasót használja, ami jól hallhatóan "géphangon" beszél, illetve a lefordított szövegek néhol pontatlanok voltak vagy helyesírási hibát, elgépelést tartalmaztak, ami a felolvasott szövegekben is értelemszerűen gondot okozott.

A projektből készítettem egy saját forkot, amiben javítottam a fentebb említett problémákat, elérhető itt:

https://gist.github.com/kissg1988/7732582

Q: Ez a megoldás miben különbözik az eredeti projekttől?
A: A lefordított szövegekben javítottam a helyesírási hibákat és elgépeléseket, illetve kiegészítettem a CSV fájlt néhány további szöveggel. A leglényegesebb különbség mégis az, hogy a szkript az eSpeak helyett a Google TTS-t használja a felolvasáshoz, ami nagyságrendekkel természetesebben szól.

Q: Mit tartalmaz a fordítás?
A: A fordítás tartalmazza a leggyakrabban használt funkciókat (tesztelve Elastix 2.4-en és a benne lévő asterisk 11.6-tal), tételesen:

  • Számok és betűk kiejtése
  • Alapszintű híváskezelés (szám nem kapcsolható, nincs szabad vonal, mellék kapcsolása)
  • Telefonkönyv (Elastix-féle [411])
  • Visszhangteszt
  • Follow-me funkció
  • Konferenciahívás
  • Diktálás
  • Queue-kezelés
  • Hangposta
  • Legutóbbi hívás adatai
  • Saját mellék bemondása
  • Hívásvárakoztatás ki/bekapcsolása
  • Tiltólista-kezelés
  • Elfoglalt üzemmód (do-not-disturb)
  • Pontos idő

Q: Kinek jó ez?
A: Azoknak, akik szeretnék, ha az otthoni vagy kisvállalati Asterisk-központjuk magyarul beszélne, ugyanakkor nem szeretnének pénzt áldozni erre, és az ingyenességért cserébe elfogadják, hogy a hangüzenetek néhol nem hangzanak teljesen természetesen.

Q: Mi kell hozzá?
A: A hangfájlok legenerálásához az alábbiakra van szükség:

  • Python 2.6 vagy újabb
  • bash
  • sox
  • lame

Q: Zavaró a felolvasó hangsúlyozása, és a szavak egy részét furcsán/természetellenesen ejti ki. Nem lehetne ezen finomítani?
A: Legfeljebb csak egy hajszálnyival. Sajnos nem tartunk még ott, hogy egy szoftver egy anyanyelvű beszélő hanglejtésével és kiejtésével legyen képes beszélni (bár néhány TTS motor elég jól megközelítette már ezt). A szövegeket tartalmazó CSV fájlban megfigyelhető, hogy bizonyos helyeken hiányoznak a szóközök, illetve hibás helyesírással szerepel néhány szó. Ez szándékos, és épp azért van így, hogy a TTS motor megfelelően hangsúlyozva olvassa fel a szöveget - vagyis ez már egy optimalizált megoldás, a CSV-ben lévő szövegek eleve a Google TTS-re lettek kihegyezve.

Q: A pontos idő bemondása nem megfelelő formátumú. Hogyan lehet ezt korrigálni?
A: A javításhoz csak egy apró módosítás szükséges. Az alábbi sort:

exten => *60,n(hr24format),SayUnixTime(${FutureTime},,kM 'and' S 'seconds')

erre kell lecserélni:

exten => *60,n(hr24format),SayUnixTime(${FutureTime},,k 'hours' M 'minutes' S 'seconds')

A cserét érdemes az "extensions_override_freepbx.conf" fájlban megejteni az eredeti szkriptről készített másolaton, ezzel elkerülve, hogy frissítéskor esetleg felülíródjon a módosítás.

Q: Nem szeretném magamnak legenerálni a hangokat. Le lehet tölteni valahonnan a hangkészletet használatra kész állapotban?
A: Ha megkeresel privátban, szívesen elküldöm az általam generált hangkészletet (~2 MB tömörítve).

A kódot használjátok fel bátran tetszőleges célra, kérdéseket/visszajelzéseket szívesen veszek privátban vagy kommentekben.

PS: folyamatosan tesztelem és javítgatom az egyes funkciókat, így érdemes megvárni, amíg lehetőleg minden funkció tesztelve lesz. Várható egy (opcionális) patch is, ami javítja a nyelvtani különbségekből adódó hibákat. Úgy tűnik, a szkriptek magyarításához sajnos bele kellene nyúlni az asterisk forráskódjába, így egyelőre együtt kell élni a nyelvtani eltérésekből fakadó furcsaságokkal (esetleg megpróbálom máshogy megoldani).

frissítés (2013-12-03): új CSV feltöltve, hangposta szolgáltatás tesztelve, betűző szavak cseréje a magyar megfelelőkre

frissítés (2013-12-04): kisebb hibajavítások a CSV-ben, hiányzó promptok felvéve, asterisk konferenciahívás tesztelve

frissítés (2013-12-08): CSV frissítve, minden funkció tesztelve - a magyarítás ezennel elkészült. :)

frissítés (2014-02-27): kisebb javítások a CSV-ben és a hangokat generáló szkriptben, tesztelve AsteriskNOW 3-mal, ezzel is remekül működik a fordítás

Hozzászólások

Nagyon danke látatlanban (izé, hallatlanban) is.

köszönik

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Belegondolva, hogy néhány cégnél ugyanaz, az enyhén (ugyanakkor borzasztó idegesítően) beszédhibás csaj mondja be az automata szövegét, akár még jó is lehet.

Az a megoldás miért nem jó, hogy egy este bent maradsz és a titkárnő felolvassa a szöveget amit felveszel?

Kicsit munkásabb, de természetesen szól.
Mondjuk tesztelése ez tökéletes, kösz.

Mi annó próbáltuk így, de 1 percnyi hanganyag 10-20 percnyi munkával jár (zajszűrés, bakizások, utómunka, stb.). Napközben meg esélytelen kivitelezni, este meg nem biztos, hogy ráért a kollegina maradni. A Google TTS valóban a legjobb ingyenes megoldás és szinte akármilyen nyelven működik (az angolt és a németet próbáltam).

Én a zajszűrést megoldottam Asterisk felvétellel - egész korrekt minőségű lett a beszéd.

Ellenben a bakizás, "nem tetszik", ill. utómunka valóban hosszadalmas tud lenni - no meg a zajtalan környezet sokszor nem egyszerű...

Ez a Google TTS érdekes dolog, kipróbáltam.
Bár Google-nél kérdéses, mikor szünteti meg - úgy általában bármit is... :S

Ezen felül mindent át kell passzírozni felé a neten.

Egyébként eddig a legjobb hangzást a SpeakBoard nevű programtól hallottam - kár, hogy Windowsos és kereskedelmi termék...

Nem terhelném ilyesmivel a recepciósunkat. Én még rá tudnám venni magam, de tőle nem várhatom el, hogy túlórázzon ilyesmi miatt (multicégről beszélünk).

Másfelől: abszolút nem csak tesztelésre jó ez. A szkript 20%-kal felgyorsítja a beszéd sebességét (hangmagasságot nem!), ami lényegesen "élvezhetőbbé" teszi az egészet.

Kicsit biztosan lehet még csiszolgatni rajta a hangsúlyozás manipulálásával, de szerintem SOHO felhasználásra így is tökéletes.

A betuzesnel a Charlie felrevezeto is lehet, mert ugye magyarul van c es cs hangunk is. Nyilvan egy informatikai beallitottsagu embernek ez nem tunik fel, de szeles koru felhasznalasnal akadhatnak problemak. Probalj meg valami C betus szot talalni helyette. Hasonlo a gond a Sierra-val is. A janki (tul azon, hogy borzalmas kiejtes) szinten felrevezeto, mert magyarul azt a szot "jenki"-nek mondjuk, es pontos J-vel irjuk le. Ide idealis megoldas a Yamaha, ami eleg szeles korben ismert szo ahhoz, hogy mindenki tudja rola: ipszilonnal kezdodik.

PS: pontosan tudom, hogy ez milyen ABC. Viszont ez a projekt szandekai szerint minel szelesebb korben akar terjedni, ezert fontos, hogy az angol es a magyar kornyezet kozti kulonbseg minel kevesbe latszodjon. A betuzesnel nem a pontos, szoveghu forditas a cel, hanem hogy hasznos legyen barki szamara.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

Betűzésnél minden esetben "illendő" az adott nyelvnek megfelelően eljárni, tehát a alfa-bravo...-zulu angol nyelvi környezetbe való, magyarba nem. A lokalizációnak csak az egyik (szerintem egyszerűbb, de mindenképp favágóbb) része a fordítás, a másik az ilyen helyi, nyelv- illetve kultúrafüggő dolgok átültetése. A betűzést pl. nem fordítani, hanem átültetni kell.

sub
--
>'The time has come,' the Walrus said<

Hm, a dátumformátum kapcsán kiderült a turpisság: van ott FreePBX is ;-)

Igen, mivel az Elastix a FreePBX-re épül. Egyébként elegánsabb megoldás lehet, ha csinálsz egy saját call szkriptet, és abban módosítod azt az egy sort, ugyanúgy hozzá lehet kötni a megfelelő feature code-hoz.

Igazság szerint a say.conf-on keresztül kellene konfigurálni ezt (mode=new paraméter mellett), viszont ha ezen keresztül állítom be, akkor a pontos idő helyett a pontos dátumot mondja be a beszélő óra. :)

Ha telepítesz egy gtts-t (pip install gtts) és a make.sh-ben a './GoogleTTS.py -l hu -o "$f.mp3" -s "$text"' helyett 'gtts-cli.py "$text" -l hu -o "$f.mp3"'-t használsz, akkor működik.

- árp -

Sziasztok, nálam most lenne aktuális a magyarított FreePBX, de sajnos tényleg nem működik a GoogleTTS.py. Valakinek lenne erre más megoldása, vagy korábbról esetleg megvannak a hang file-ok egy letöltés erejéig? Előre is köszi