JHVite: Dansk talegenkendelse og syntese med Java-interface


[UP]

JHVite v. 0.1 BETA, 25. sep. 2004,
Denne side er under konstruktion.

Baggrund

For de "store" sprog, engelsk, tysk, fransk, kinesisk kan man for under 1000 kr (eller gratis!) erhverve færdige "Speech Engines" (dvs. talesyntese, diktat-genkendelse og såkaldt "command & control"- genkendelse) som applikationer kan anvende via veldefinerede API'er (navnlig MS SAPI 4.0 og MS SAPI 5.x og JSAPI). For dansk kan man få MS SAPI 4.0 kompatibel syntese, dog for en noget højere pris. Speech-ware har en begrænset demo-udgave af dansk syntese (den nyeste version gælder kun 14 dage og terminerer efter at have syntetiseret 200 ord). Dansk genkendelse er tilgængelig kun i visse "lukkede systemer" og diktatsystemerne er rettede mod meget specielle applikationer som f.eks. medicinsk journalisering.

JHVite er en JSAPI-"inspireret" pakke baseret på genkenderen HVite og akustiske modeller trænet på tale i telefonkvalitet i det pan-erupæiske Speechdat(ii)-projekt. Der inkluderes et JSAPI-inspireret interface til MS SAPI 4.0 kompatible syntesemaskiner - hvilket vil sige, at vi har fået løst 2/3-del af problemet. Diktat mangler fortsat! Med pakken kan man implementere tale-baserede applikationer i Java på win32-systemer (2K, XP osv.). Sådanne applikationer minder programmeringsteknisk meget om en klassisk GUI med "knapper", "selektionsbokse" osv. Hovedabstraktionen er at man associerer visse "action listeners" eller "callback functions" med genkenderen (som var genkenderen en "knap") og som respons på tale typisk generer et svar i form af noget tekst der sendes til syntese-maskinen.

JHVite-pakken kommer med nogle "Hello World"-eksempler. Som universitets-ansat har jeg ikke resourcer til at yde support, men vil alligevel gerne underrettes om tekniske problemer. Til beskyttelse af ophavsretslige aspekter (ikke mindst de intellektuelle!), kan de akustiske modeller kun anvendes i 180 dage gældende fra 24. september 2004. Alt efter hvilke erfaringer vi gør os med denne pakke, vil nye (og måske forbedrede) modeller blive gjort tilgængelige med passende intervaller.

DOWNLOAD

JHvite/lib/*

Biblioteket indeholder tre jar-filer:

JHVite/lib/hvite.jar, styring af genkendelse, implementering af dele af JSAPI defineret i ibmjs.jar
JHVite/lib/ibmjs.jar, JSAPI
JHVite/lib/mssapi.jar, styring af MS SAPI 4.0 syntese, kræver at du har MS SAPI 4.0 + syntese installeret. (bemærk at MS SAPI 5.0 og højere ikke er bagud kompatibel!). Se videre http://tom.brondsted.dk/classes/mssapi/.

2 "native" binære filer for win32:

JHVite/lib/HViteSpchDatII.exe, kaldes fra hvite.jar, er en modificeret version af HVite specielt beregnet for akustiske modeller i SpeechDat(ii)-format og -kvalitet. Den læser udtaleleksika i SAMPA-format (ikke HTK) og inkorporerer et filter til simulering af tale i telefon-kvalitet, mm. Dette program kan også kompileres for andre styresystemer (Linux etc.)
JHVite/lib/TTSCommand.dll, interface til MS SAPI 4.0 syntese, kaldes fra mssapi.jar. Dette program kan ikke kompileres for andre styresystemer.

3 konfigurationsfiler:

JHVite/lib/JHViteEndpoint.cfg, indeholder endpoint-settings for HViteSpchDatII.exe hhv. HVite modificeret som beskrevet på http://kom.aau.dk/~tb/speech/HTKwin32.php. Hvis filen slettes eller omdøbes, vil HViteSpchDatII hhv. HVite måle energi-niveau osv. ved næste opstart og skrive en ny konfigurations-fil.
JHVite/lib/HVitemono.cfg, standard SpeechDat(ii) konfigurations-fil for HVite ved genkendelse vha. monofoner. Bruges ikke af HViteSpchDatII.exe.
JHVite/lib/HVitetied.cfg, standard SpeechDat(ii) konfigurations-fil for HVite ved genkendelse vha. trifoner. Bruges ikke af HViteSpchDatII.exe.

Akustiske modeller og (nedscalerede) udtaleordbøger for dansk og andre sprog:

JHVite/lib/da/*, monofon- og trifon-modeller for dansk trænet på 4000 talere, forkortet dansk udtaleordbog (lexicon.tbl) og brugerordbog (userlex.tbl) i SAMPA-format, dokumentation af de danske Sampa-lydsymboler (sampalex.pdf). Bemærk at modellerne kun kan bruges af HViteSpchDatII.exe, ikke af HVite. Ved implementering af grammatikker til genkendelse, skal "ukendte" ord føjes til brugerordbogen.
JHVite/lib/en/*, tilsvarende for engelsk, men kun trænet på 800 talere,
JHVite/lib/de/*, tilsvarende for tysk (800 talere).

Stand-alone programmer og utilities:

JHVite/lib/mssapiconsole.exe: test af syntese med direkte kald til TTSCommand.dll.
JHVite/lib/mssapi.bat: test af syntese med kald til TTSCommand.dll via mssapi.jar.
JHVite/lib/Sampa2HTKdic.exe: Konvertering af Sampaleksikon til HTK-leksikon.
JHVite/lib/SDLParser.exe: Parser grammatik i HTK standard lattice-format og checker om sætninger accepteres af grammatikken.

JHvite/hello/*

"Hello World"-folderen indeholder småprogrammer inspireret af eksemplerne distribueret med IBM's implementering af JSAPI ("Hello Human, my name is computer. What is your name?". "My name is Bruce Adams". "Hello Bruce Adams!". "Repeat after me!". "I'm listening" [går til diktat-mode og gentager hvad brugeren måtte diktere]. "Thats all", "Good bye")

JHVite/hello/Hello.*.bnf er grammatikker i HTK's BNF-format for dansk, engelsk og tysk svarende til IBMs eksempler i JSGF-formatet, e.g. Hello.da.bnf:

$first = Tom | Børge | Lars Bo;
$last = Brøndsted | Larsen | Lindberg;
$name = $first $last;
$nameis = mit navn er $name;
$begin = gentag efter mig;
$stop = det var alt;
$bye = farvel | ha det godt;
$public_rules = $nameis | $begin | $stop | $bye;
$g = <spk> | <fil> [<sil>];
( [<sil>] <$g> $public_rules [<sil>] <$g> )

JHVite/hello/Hello.*.sdl er bnf-grammatikkerne kompileret til HTK-standard-lattice formatet vha. HParse (en del af HTK-suiten, se http://kom.aau.dk/~tb/speech/HTKwin32.php). sdl-formatet læses af HVite og HViteSpchDatII.exe.

JHVite/hello/test.*.bat invokerer HViteSpchDatII.exe med parametre der angiver sprog (-lda, -len, -lde for hhv. dansk, engelsk og tysk) modeltype (-mtri for trifoner, monofoner er default) og grammatik (Hello.*.sdl). Eksemplerne burde køre på enhver nyere Windows-maskine uden problemer. De involverer ikke syntese.

JHVite/hello/compile.bat skal eksekveres når en *.java eller *.bnf fil er modificeret. Den kræver adgang til en java-compiler (javac) og HParse. Tilføjelse af nye og ukendte ord i en bnf-grammatik kræver tilsvarende tilføjelse til brugerordbogen i JHVite/lib/da/userlex.tbl, JHVite/lib/en/userlex.tbl osv. Hvis en grammatik indeholder et ukendt ord, vil man få en run-time error som:

ERROR [+8251] ReadLattice: Word Brøndsted not in dict
ERROR [+3210] DoAlignment: ReadLattice failed
FATAL ERROR - Terminating program HVite

JHVite/hello/Hello.bat og Hello.java (Hello.class, Hello$1.class) er et javaeksempel der involverer (dansk) syntese. Det ligger tæt opad IBMs eksempel distribueret med JSAPI-implementeringen:

S: "Goddag menneske. Mit navn er computer. Hvad er dit navn?"
U: "Mit navn er Tom Brøndsted"
S: "Goddag Tom Brøndsted"
U: "Gentag efter mig"
S: "Jeg kan ikke diktat"
U: "Det var alt"
U: "Ha det godt"

email

CHECK