====== Appunti su Sphinx2 ======
==== Descrizione ====
Sphinx2 non è un programma immediatamente utilizzabile, ma un insieme di funzioni che permettono di realizzare sistemi di riconoscimento vocale. Ogni programma che utilizza le librerie Sphinx2 all'avvio deve ottenere alcune informazioni:
* un Dizionario delle parole (file.dic): ad ogni parola corrisponde una sequenza di fonemi.
* un Modello Acustico (MA) (es: tipo semicontinuo) generato dal trainer per ogni lingua, contiene le statistiche dei fonemi di ogni lingua ed è costituito da alcuni(?) dei seguenti tipi di file: .vec .var .ccode .d2code .p3code .xcode .chmm
* il trainer genera un MA in formato Sphinx3 che deve essere convertito per Sphinx2
* un Modello di Lingua (ML) (file.lm): combina (di solito) tre fonemi alla volta (trigrammi) a formare le stesse parole del Dizionario.
Il vocabolario delle parole riconoscibili è dato dall'intersezione del Dizionario e del Modello di Lingua. Ogni pronuncia (parola o frase) può durare solo 60 sec.
Sphinx2 può essere usato in 2 modalità:
* batch-mode
* live-mode
Ognuna delle quali può decodificare con due tecniche
* time-aling (disponibile solo in batch mode)
* allphone (disponibile solo per file audio?)
==== Il comando (live-mode) ====
questo comando funziona ma riconosce solo il 10% delle parole
sphinx2-demo
questo non funziona bene
sphinx2-continuous \
-dictfn model/lm/turtle/turtle.dic \
-lmfn model/lm/turtle/turtle.lm \
-cbdir model/hmm/6k \
-hmmdir model/hmm/6k \
-hmmdirlist model/hmm/6k \
-ndictfn model/hmm/6k/noisedict \
-phnfn model/hmm/6k/phone \
-mapfn model/hmm/6k/map
-live \
-agcemax TRUE \
-normmean FALSE \
-topsenfrm 4 \
-topsenthresh -80000 \
-fwdflat FALSE \
-bestpath FALSE \
-top 1 \
-fillpen 1e-10 \
-nwpen 0.01 \
-silpen 0.005 \
-inspen 0.65 \
-langwt 6.5 \
-ugwt 0.7 \
-rescorelw 9.5 \
-kbdumpdir /usr/share/sphinx2/model/lm/turtle \
-oovdictfn /usr/share/sphinx2/model/lm/turtle/turtle.handdict \
-oovugprob -4.5 \
-8bsen TRUE \
-sendumpfn /usr/share/sphinx2/model/hmm/6k/sendump
==== Le API ====
Ci sono 3 tipi di API, ogni tipo possiede un diverso livello di astrazione:
* per l'accesso diretto all'hardware (raw audio access)
* per l'ascolto continuo filtrato dai silenzi (continuous listening/silence filtering)
* il programma decoder (the core decoder itself)
* fbs_init() specifica i modelli e gli argomenti necessari all'inizializzazione del decoder
* fbs_end() chiude l'aplicazione e ripulisce