et-pocketsphinx-tutorial
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:Tutorial of Estonian speech recognition using PocketSphinx
PocketSphinx tutorial for Estonian
=================================

This repository contains tools and models for Estonian speech recognition using PocketSphinx.
Since this is mainly targetted to Estonian developers, the rest of the document is in Estonian.

Sissejuhatus
--------------

Siin kirjeldatakse, kuidas kasutada PocketSphninxi eestikeelseks kõnetuvastuseks.


Eeldused
--------

 * Linux
 
### PocketSphinx

Kompileeri ja installeeri sphinxbase ja pocketsphinx, soovitavalt nightly snapshot: http://cmusphinx.sourceforge.net/wiki/download/
 

Grammatika-põhine tuvastus
--------------------------

### JSGF

Kõige lihtsam on kasutada kõnetuvastust grammatika-põhise keelemudeliga. Näiteks olgu meil robot, mis oskab sõita edasi ja tagasi, ning pöörata vasakule ja paremale. Me tahamegi, et kõnetuvastaja saaks aru käsklustest á la: "sõida edasi", "sõida viis meetrit tagasi", "pööra paremale" jms. Kõigepealt peame siis välja mõtlema grammatika, mis selliseid käske "aktsepteerib" (ja muid käske, näit. "pööra viis meetrit vaskule" soovitavalt mitte). PocketSphinxile tuleb grammatika ette anda JSGF formaadis. Näiteks ülalkirjeldatud käske aktsepteerib järgmine grammatika:

    #JSGF V1.0;

    grammar robot;

    public  =  | ;
     = (liigu | mine ) [ ( üks | kaks | kolm | neli | viis ) meetrit ] (edasi | tagasi);
     = (keera | pööra ) ( paremale | vasakule );
  
Salvestame selle faili `robot.jsgf`.

### Hääldussõnastik 

Kõnetuvastuseks on vaja ka hääldusõnastikku, milles on grammatikas kasutatud sõna kohta selle hääldus, kasutades kõnetuvastuse häälikumudelite häälikuinventari.


Hääldussõnastiku koostamiseks on kataloogis `scripts` kaks skripti. Skript `scripts/extract_jsgf_vocabulary.sh` ekstahheerib JSGF failist kõik seal kasutatavad sõnad ja `scripts/est-l2p.py` genereerib igale sõnale häälduse. Seega, selleks et genereerida hääldussõnastik failile `models/lm/robot.jsgf`, tuleks käivitada:

    ./scripts/extract_jsgf_vocabulary.sh models/lm/robot.jsgf | ./scripts/est-l2p.py > robot.dict
    
Tulemus (`robot.dict`):

    edasi e t a s i
    kaks k a k s
    keera k e e r a
    kolm k o l m
    liigu l i i k u
    meetrit m e e tt r i tt
    mine m i n e
    neli n e l i
    paremale p a r e m a l e
    pööra p oe oe r a
    tagasi t a k a s i
    vasakule v a s a kk u l e
    viis v i i s
    üks ue k s


### Käivitamine

Kõige lihtsam on kõnetuvastust testida käsurealt programmiga `pocketsphinx_continuous`. Käivitame:

    pocketsphinx_continuous -hmm models/hmm/est16k.cd_ptm_1000-mapadapt -jsgf models/lm/robot.jsgf -dict robot.dict
    
Ja ütleme näiteks mikrofoni "sõida viis meetrit edasi". Ekraanile peaks ilmuma:

    [..]
    INFO: fsg_search.c(1456): End node .212:214:220 (-485)
    INFO: fsg_search.c(1456): End node edasi.162:190:220 (-505)
    INFO: fsg_search.c(1681): lattice start node .0 end node .221
    INFO: ps_lattice.c(1365): Normalizer P(O) = alpha(:221:221) = -184664
    INFO: ps_lattice.c(1403): Joint P(O,S) = -184677 P(S|O) = -13
    000000001: sõida viis meetrit edasi
    READY....


### Offline tuvastus

Kõnetuvastust on lihtne rakendada ka olemasolevatele helifailidele. Kataloogis `test/audio` on kolm wav-faili. 
Igasühes on üks näitegrammatikale vastav lause.
Selleks, et tuvastada failis olevad laused, saab kasutada programmi `pocketsphinx_batch`. 
See programm tahab argumendina saada konfiguratioonifaili, kus on toodud mudelite asukohad,
tuvastatavate helifailide asukoht, helifailide nimed ja väljundfaili nimi (vt. `test/pocketsphinx.conf`).

Käivitamiseks (kataloogis `test`):

    pocketsphinx_batch pocketsphinx.conf

Tuvastatud laused kirjutatakse faili `test.hyp`, mille sisu peaks olema pärast käivitust selline:
    
    mine kolm meetrit edasi (test1 -4627)
    pööra paremale (test2 -3687)
    liigu edasi (test3 -4212)

Igal real on kõigepealt tuvastatud lause, sulgudes faili ID ja ka tuvastatud lause skoor.



### Integreerimine

PocketSphinxi on väga lihtne integreerida muusse tarkvarasse, sellest hiljem.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。