PocketSphinx Naudojamas

2013-09-20

PocketSphinx

Pocketsphinx yra biblioteka parašyta C kalba. Bibliotekos veikimas priklauso nuo kitos bibliotekos SphinxBase. Pastaroji turi suprogramuotą bendrą funkcionalumą daugumai CMU Sphinx projektų. Norint priversti veikti Pocketsphinx reikia turėti ir Sphinxbase.

PocketSphinx gali veiti MS Windows ir Linux OS.

Aplinkos ir bibliotekų pasiruošimas

MS Windows

Oficiliam puslapyje(Building application with pocketsphinx) teigiama kad reikia turėti:

  • MS Windows
  • MS Visual Studio 2008 ar naujesnės versijos

Sukompiliuoti išeities kodą:

  • Parsisiųsti naujausius sphinxbase-X.Y ir pocketsphinx-X.Y paketus iš oficialaus puslapio: Parsisiųsti
  • Išpakuoti į tapačia direktorija tarkim c:\cmusphinx
  • Užkrauti sphinxbase.sln esantį c:\cmushinx\sphinxbase kataloge
  • Sukompiliuoti sphinxbase.sln kodą
  • Užkrauti pocketsphinx.sln esantį c:\cmushinx\pocketsphinx kataloge
  • Sukompiliuoti visą kodą

Linux(Ubuntu)

Daugiau informacijos:

XCode instaliacija (iPhone)

Daugiau informacijos:

Anroid instaliacija

Daugiau informacijos:

PocketSphinx Naudojimas

Programinės sąsajos dizaino principai

Biblioteka buvo kuriama atsižvelgiant į kuo lengvesnį panaudojimą programuotojui:

  • Naujos versijos turėtų lengviau užtikrinti istorinį suderinamumą dėl pakankamo abstrakčios sąsajos
  • Programos kodas leidžia turėtų keletą aktyvių atpažintuvų tame pačiame procese
  • Pakeitime sphinxbase leido ženkliai sumažinti programai reikalingos atminties.
  • PocketSphinx programuotojojo sąsaja gerai dokumentuota: API aprašas

Programos kodo pavyzdžio paleidimas

Kodas buvo testuotas su pocketsphinx-0.8 ir basesphinx-08. Daugiau informacijos galima rasti aprašyme: PocketSphinx panaudojimas su Lietuvišku modeliu Mondhs@github/url-lt-pocketsphinx-tutorial.

  • Pasiruošite aplinka.
  • Sukompiliuoti kodą (Linux OS):
    gcc -o robotas_ps robotas_ps.c \
    -DMODELDIR=\"`pkg-config --variable=modeldir pocketsphinx`\" \
    `pkg-config --cflags --libs pocketsphinx sphinxbase`
  • Paleisti komandą (Linux OS)

    ./robotas_ps

  • Rezultate, jei viskas gerai, matoma test1.wav atapžinimo rezultatai:

	INFO: ps_lattice.c(1365): Normalizer P(O) = alpha(</s>:201:201) = -249971
	INFO: ps_lattice.c(1403): Joint P(O,S) = -252262 P(S|O) = -2291
	Atpažinimo hipotezė: VARYK PIRMYN

Pavyzdžio programos kodas

  • Kodas robotas_ps.c: #include

    int main(int argc, char *argv[]) { //Argumentai ///////////////////////////// ps_decoder_t *pocketsphinx; cmd_ln_t *config; FILE *fileHandler; char const *hyp, *uttid; int32 score;

      //Inicializavimas
      /////////////////////////////
      config = cmd_ln_init(NULL, ps_args(), TRUE,
                   "-hmm",  "../models/hmm/lt.cd_cont_200/", //acustinis modelis
                   "-jsgf",  "../models/lm/robotas.gram", //gramatika
                   "-dict",  "../models/dict/robotas.dict", //žodynas
                   NULL);
      pocketsphinx = ps_init(config); // atpažintuvo inicializavimas
    
      //Failo atidarymas skaitymui
      /////////////////////////////
      fileHandler = fopen("../test/audio/test1.wav", "rb");
    
    
      //Visos bylos turinio dekodavimas
      /////////////////////////////
      ps_decode_raw(pocketsphinx, fileHandler, "robotas", -1);
    
      // Hipotezės ištraukimas
      /////////////////////////////
      hyp = ps_get_hyp(pocketsphinx, &score, &uttid);
    
      printf("Atpažinimo hipotezė: %s\n", hyp);
    
      // Bylos uždarymas
      /////////////////////////////
      fclose(fileHandler);
      ps_free(pocketsphinx);
      return 0;   }