2016-03-22 17 views
1

Sphinx4 kullanarak canlı konuşma tanıma için eğitim programını çalıştırmaya çalışıyorum. Bu ana sınıftır: Sfenks tarafından sağlanan sözlük ve akustik modelleri kullanıyorum. Şimdilik şu ana sınıfı kullanıyorum: Programı çalıştırdığımda, kendisiyle konuşuyormuş gibi ve rastgele bir metin üretmeye devam ediyor ve mikrofonla konuştuğum her şey, yakınlaşmıyor bile. örnek çıkışı için şu şekildedir: Neyi yanlış yapıyorumSphinx4 java api ile canlı konuşmayı tanıma

.... 
{between, 1.000, [2700:3610]} 
23:21:37.391 INFO speedTracker   This Time Audio: 0.83s Proc: 3.82s Speed: 4.60 X real time 
23:21:37.391 INFO speedTracker   Total Time Audio: 1.58s Proc: 7.66s 4.85 X real time 
23:21:37.391 INFO memoryTracker   Mem Total: 1173.00 Mb Free: 410.17 Mb 
23:21:37.393 INFO memoryTracker   Used: This: 762.83 Mb Avg: 507.82 Mb Max: 762.83 Mb 
23:21:37.393 INFO trieNgramModel  LM Cache Size: 4183 Hits: 990660 Misses: 4183 
{<sil>, 1.000, [3610:5810]} 
{what, 1.000, [5820:6380]} 
23:21:41.615 INFO speedTracker   This Time Audio: 0.55s Proc: 2.21s Speed: 4.01 X real time 
23:21:41.615 INFO speedTracker   Total Time Audio: 2.13s Proc: 9.87s 4.63 X real time 
23:21:41.615 INFO memoryTracker   Mem Total: 1316.50 Mb Free: 540.36 Mb 
23:21:41.615 INFO memoryTracker   Used: This: 776.14 Mb Avg: 597.26 Mb Max: 776.14 Mb 
23:21:41.615 INFO trieNgramModel  LM Cache Size: 5332 Hits: 1263784 Misses: 5332 
{<sil>, 1.000, [6380:9060]} 
{ooh, 1.000, [9070:9280]} 
.... 

? "Merhaba dünya" dediğimde "merhaba dünyayı" görmek istiyorum. Her iki söz sözlükte bulunur. here açıklandığı gibi

[GÜNCELLEME]

Ben küçük korpus dosyasından this online service kullanarak küçük bir dil model dosyası ve ilgili sözlüğünü yaptı. Bu sefer, sfenks veri kütüphanesi ile sağlanan varsayılan akustik modeli kullanarak daha iyi bir doğrulukla çalıştı. Akustik modeli eğitmeye ihtiyacım yok, çünkü çoğunlukla İngilizce (ABD) dili ile ilgileneceğim. Ama genel amaçlı kısa cümleler için iyi bir dil modeli ve sözlük istiyorum. Sfenks ile gelen dil modeli benim için iyi gitmiyor.

[UPDATE] Nikolay Shmyrev bu zayıf işlem performansına olabilir, aşağıda belirtilen için, bu, ne kullanın:

  1. Intel Çekirdek ™ i7-4790 işlemci @ 3.60GHz
  2. 16 GB gerekirse 14,04

İşlem gücü DDR3 RAM

  • Windows 10 ve Ubuntu artırılabilir.

  • cevap

    0

    Bilgisayarınız çok yavaştır, sesi gerçek zamanlı olarak işleyemez, dolayısıyla hatalı olabilir. Yavaş bilgisayarlar için yerine pocketsphinx kullanın.

    PocketSphinx Eğer örnek here bulabilirsiniz, çok Java/JNI'yı API vardır, bu gibi görünmelidir:

    Config c = Decoder.defaultConfig(); 
        c.setString("-hmm", "../../model/en-us/en-us"); 
        c.setString("-lm", "../../model/en-us/en-us.lm.bin"); 
        c.setString("-dict", "../../model/en-us/cmudict-en-us.dict"); 
        Decoder d = new Decoder(c); 
    
        FileInputStream ais = new FileInputStream(new File("../../test/data/goforward.raw")); 
    
        d.startUtt(); 
        d.setRawdataSize(300000); 
        byte[] b = new byte[4096]; 
        int nbytes; 
        while ((nbytes = ais.read(b)) >= 0) { 
         ByteBuffer bb = ByteBuffer.wrap(b, 0, nbytes); 
         bb.order(ByteOrder.LITTLE_ENDIAN); 
         short[] s = new short[nbytes/2]; 
         bb.asShortBuffer().get(s); 
         d.processRaw(s, nbytes/2, false, false); 
        } 
        d.endUtt(); 
        System.out.println(d.hyp().getHypstr()); 
    
        short[] data = d.getRawdata(); 
        System.out.println("Data size: " + data.length); 
        DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File("/tmp/test.raw"))); 
        for (int i = 0; i < data.length; i++) { 
         dos.writeShort(data[i]); 
        } 
        dos.close(); 
    
        for (Segment seg : d.seg()) { 
         System.out.println(seg.getWord()); 
        } 
    
    +0

    Ben mayın yavaş sanmıyorum. Makinemin bir sürü ram ve ham işleme gücü var. Ancak, öğreticide sağlanan çevrimiçi hizmeti kullanarak bazı lm ve dic dosyalarını (dil modelleri ve sözlük) yaptım, daha sonra çok daha iyi bir doğrulukla çalıştı. Yardımınız için çok teşekkür ederim, cep sfenksine bakacağım ve çözümünüzün işe yarayıp yaramadığını size bildireceğim. Teşekkürler. –

    +0

    Günlük 4.63 X gerçek zaman demektir, yani yavaştır. Muhtemelen daha fazla bellek vermek istiyorsan o zaman –

    +0

    Tamam, şimdi onu görüyorum. Daha güçlü bir makineyi deneyeceğim. –