2012-03-20 2 views
2

Я пытался настроить CMU-Sphinx4 на свой компьютер, чтобы сделать приложение, используя распознавание речи. Я смог настроить большинство частей и конфигурации и попытался запустить приложение HelloWorld, предоставленное Sphinx, но застрял с NullPointerExcetption по адресу recognizer.allocate();.CMU-Sphinx: NullPointerException at detectizer.allocate()

Полный Трассировка стека:

12:34:45.501 WARNING dictionary  Missing word: <sil> 
12:34:45.517 WARNING jsgfGrammar  Can't find pronunciation for <sil> 
12:34:45.517 WARNING dictionary  Missing word: <sil> 
12:34:45.517 WARNING jsgfGrammar  Can't find pronunciation for <sil> 
Exception in thread "main" java.lang.NullPointerException 
    at edu.cmu.sphinx.linguist.flat.SentenceHMMState.collectStates(SentenceHMMState.java:635) 
    at edu.cmu.sphinx.linguist.flat.FlatLinguist.compileGrammar(FlatLinguist.java:452) 
    at edu.cmu.sphinx.linguist.flat.FlatLinguist.allocate(FlatLinguist.java:304) 
    at edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager.allocate(SimpleBreadthFirstSearchManager.java:646) 
    at edu.cmu.sphinx.decoder.AbstractDecoder.allocate(AbstractDecoder.java:87) 
    at edu.cmu.sphinx.recognizer.Recognizer.allocate(Recognizer.java:168) 
    at com.cmu.sphinx.HelloWorld.main(HelloWorld.java:42) 

Код:

package com.cmu.sphinx; 

import edu.cmu.sphinx.frontend.util.Microphone; 
import edu.cmu.sphinx.recognizer.Recognizer; 
import edu.cmu.sphinx.result.Result; 
import edu.cmu.sphinx.util.props.ConfigurationManager; 



public class HelloWorld { 

public static void main(String[] args) { 
    ConfigurationManager cm; 

    if (args.length > 0) { 
     cm = new ConfigurationManager(args[0]); 
    } else { 
     cm = new ConfigurationManager(HelloWorld.class.getResource("helloworld.config.xml")); 
    } 

     Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); 
     recognizer.allocate(); 

     // start the microphone or exit if the program if this is not possible 
     Microphone microphone = (Microphone) cm.lookup("microphone"); 
     if (!microphone.startRecording()) { 
      System.out.println("Cannot start microphone."); 
      recognizer.deallocate(); 
      System.exit(1); 
     } 

     System.out.println("Say: (Good morning | Hello) (Bhiksha | Evandro | Paul | Philip  | Rita | Will)"); 

     // loop the recognition until the programm exits. 
     while (true) { 
      System.out.println("Start speaking. Press Ctrl-C to quit.\n"); 

      Result result = recognizer.recognize(); 

      if (result != null) { 
       String resultText = result.getBestFinalResultNoFiller(); 
       System.out.println("You said: " + resultText + '\n'); 
      } else { 
       System.out.println("I can't hear what you said.\n"); 
      } 
     } 
    }  
} 

Файл конфигурации:

<?xml version="1.0" encoding="UTF-8"?> 

<!-- 
    Sphinx-4 Configuration file 
--> 

<!-- ******************************************************** --> 
<!-- an4 configuration file        --> 
<!-- ******************************************************** --> 

<config> 

    <!-- ******************************************************** --> 
    <!-- frequently tuned properties        --> 
    <!-- ******************************************************** --> 

    <property name="logLevel" value="WARNING"/> 

    <property name="absoluteBeamWidth" value="-1"/> 
    <property name="relativeBeamWidth" value="1E-80"/> 
    <property name="wordInsertionProbability" value="1E-36"/> 
    <property name="languageWeight"  value="8"/> 

    <property name="frontend" value="epFrontEnd"/> 
    <property name="recognizer" value="recognizer"/> 
    <property name="showCreations" value="false"/> 


    <!-- ******************************************************** --> 
    <!-- word recognizer configuration       --> 
    <!-- ******************************************************** --> 

    <component name="recognizer" type="edu.cmu.sphinx.recognizer.Recognizer"> 
     <property name="decoder" value="decoder"/> 
     <propertylist name="monitors"> 
      <item>accuracyTracker </item> 
      <item>speedTracker </item> 
      <item>memoryTracker </item> 
     </propertylist> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The Decoder configuration        --> 
    <!-- ******************************************************** --> 

    <component name="decoder" type="edu.cmu.sphinx.decoder.Decoder"> 
     <property name="searchManager" value="searchManager"/> 
    </component> 

    <component name="searchManager" 
     type="edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager"> 
     <property name="logMath" value="logMath"/> 
     <property name="linguist" value="flatLinguist"/> 
     <property name="pruner" value="trivialPruner"/> 
     <property name="scorer" value="threadedScorer"/> 
     <property name="activeListFactory" value="activeList"/> 
    </component> 


    <component name="activeList" 
      type="edu.cmu.sphinx.decoder.search.PartitionActiveListFactory"> 
     <property name="logMath" value="logMath"/> 
     <property name="absoluteBeamWidth" value="${absoluteBeamWidth}"/> 
     <property name="relativeBeamWidth" value="${relativeBeamWidth}"/> 
    </component> 

    <component name="trivialPruner" 
       type="edu.cmu.sphinx.decoder.pruner.SimplePruner"/> 

    <component name="threadedScorer" 
       type="edu.cmu.sphinx.decoder.scorer.ThreadedAcousticScorer"> 
     <property name="frontend" value="${frontend}"/> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The linguist configuration        --> 
    <!-- ******************************************************** --> 

    <component name="flatLinguist" 
       type="edu.cmu.sphinx.linguist.flat.FlatLinguist"> 
     <property name="logMath" value="logMath"/> 
     <property name="grammar" value="jsgfGrammar"/> 
     <property name="acousticModel" value="wsj"/> 
     <property name="wordInsertionProbability" 
       value="${wordInsertionProbability}"/> 
     <property name="languageWeight" value="${languageWeight}"/> 
     <property name="unitManager" value="unitManager"/> 
    </component> 


    <!-- ******************************************************** --> 
    <!-- The Grammar configuration        --> 
    <!-- ******************************************************** --> 

    <component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar"> 
     <property name="dictionary" value="dictionary"/> 
     <property name="grammarLocation" 
      value="resource:/com/cmu/sphinx/"/> 
     <property name="grammarName" value="hello"/> 
    <property name="logMath" value="logMath"/> 
    </component> 


    <!-- ******************************************************** --> 
    <!-- The Dictionary configuration       --> 
    <!-- ******************************************************** --> 

    <component name="dictionary" 
     type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> 
     <property name="dictionaryPath" 
    value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/> 
     <property name="fillerPath" 
    value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict"/> 
     <property name="addSilEndingPronunciation" value="false"/> 
     <property name="allowMissingWords" value="false"/> 
     <property name="unitManager" value="unitManager"/> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The acoustic model configuration       --> 
    <!-- ******************************************************** --> 
    <component name="wsj" 
       type="edu.cmu.sphinx.linguist.acoustic.tiedstate.TiedStateAcousticModel"> 
     <property name="loader" value="wsjLoader"/> 
     <property name="unitManager" value="unitManager"/> 
    </component> 

    <component name="wsjLoader" type="edu.cmu.sphinx.linguist.acoustic.tiedstate.Sphinx3Loader"> 
     <property name="logMath" value="logMath"/> 
     <property name="unitManager" value="unitManager"/> 
     <property name="location" value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz"/> 
     <property name="modelDefinition" value="etc/WSJ_clean_13dCep_16k_40mel_130Hz_6800Hz.4000.mdef"/> 
     <property name="dataLocation" value="cd_continuous_8gau/"/> 
    </component> 


    <!-- ******************************************************** --> 
    <!-- The unit manager configuration       --> 
    <!-- ******************************************************** --> 

    <component name="unitManager" 
     type="edu.cmu.sphinx.linguist.acoustic.UnitManager"/> 

    <!-- ******************************************************** --> 
    <!-- The frontend configuration        --> 
    <!-- ******************************************************** --> 

    <component name="frontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"> 
     <propertylist name="pipeline"> 
      <item>microphone </item> 
      <item>preemphasizer </item> 
      <item>windower </item> 
      <item>fft </item> 
      <item>melFilterBank </item> 
      <item>dct </item> 
      <item>liveCMN </item> 
      <item>featureExtraction </item> 
     </propertylist> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The live frontend configuration       --> 
    <!-- ******************************************************** --> 
    <component name="epFrontEnd" type="edu.cmu.sphinx.frontend.FrontEnd"> 
     <propertylist name="pipeline"> 
      <item>microphone </item> 
      <item>dataBlocker </item> 
      <item>speechClassifier </item> 
      <item>speechMarker </item> 
      <item>nonSpeechDataFilter </item> 
      <item>preemphasizer </item> 
      <item>windower </item> 
      <item>fft </item> 
      <item>melFilterBank </item> 
      <item>dct </item> 
      <item>liveCMN </item> 
      <item>featureExtraction </item> 
     </propertylist> 
    </component> 

    <!-- ******************************************************** --> 
    <!-- The frontend pipelines         --> 
    <!-- ******************************************************** --> 

    <component name="dataBlocker" type="edu.cmu.sphinx.frontend.DataBlocker"> 
     <!--<property name="blockSizeMs" value="10"/>--> 
    </component> 

    <component name="speechClassifier" 
       type="edu.cmu.sphinx.frontend.endpoint.SpeechClassifier"> 
     <property name="threshold" value="13"/> 
    </component> 

    <component name="nonSpeechDataFilter" 
       type="edu.cmu.sphinx.frontend.endpoint.NonSpeechDataFilter"/> 

    <component name="speechMarker" 
       type="edu.cmu.sphinx.frontend.endpoint.SpeechMarker" > 
     <property name="speechTrailer" value="50"/> 
    </component> 


    <component name="preemphasizer" 
       type="edu.cmu.sphinx.frontend.filter.Preemphasizer"/> 

    <component name="windower" 
       type="edu.cmu.sphinx.frontend.window.RaisedCosineWindower"> 
    </component> 

    <component name="fft" 
      type="edu.cmu.sphinx.frontend.transform.DiscreteFourierTransform"> 
    </component> 

    <component name="melFilterBank" 
     type="edu.cmu.sphinx.frontend.frequencywarp.MelFrequencyFilterBank"> 
    </component> 

    <component name="dct" 
      type="edu.cmu.sphinx.frontend.transform.DiscreteCosineTransform"/> 

    <component name="liveCMN" 
       type="edu.cmu.sphinx.frontend.feature.LiveCMN"/> 

    <component name="featureExtraction" 
       type="edu.cmu.sphinx.frontend.feature.DeltasFeatureExtractor"/> 

    <component name="microphone" 
       type="edu.cmu.sphinx.frontend.util.Microphone"> 
     <property name="closeBetweenUtterances" value="false"/> 
    </component> 


    <!-- ******************************************************* --> 
    <!-- monitors            --> 
    <!-- ******************************************************* --> 

    <component name="accuracyTracker" 
       type="edu.cmu.sphinx.instrumentation.BestPathAccuracyTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
     <property name="showAlignedResults" value="false"/> 
     <property name="showRawResults" value="false"/> 
    </component> 

    <component name="memoryTracker" 
       type="edu.cmu.sphinx.instrumentation.MemoryTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
    <property name="showSummary" value="false"/> 
    <property name="showDetails" value="false"/> 
    </component> 

    <component name="speedTracker" 
       type="edu.cmu.sphinx.instrumentation.SpeedTracker"> 
     <property name="recognizer" value="${recognizer}"/> 
     <property name="frontend" value="${frontend}"/> 
    <property name="showSummary" value="true"/> 
    <property name="showDetails" value="false"/> 
    </component> 


    <!-- ******************************************************* --> 
    <!-- Miscellaneous components        --> 
    <!-- ******************************************************* --> 

    <component name="logMath" type="edu.cmu.sphinx.util.LogMath"> 
     <property name="logBase" value="1.0001"/> 
     <property name="useAddTable" value="true"/> 
    </component> 

</config> 

Грамматика

#JSGF V1.0; 

/** 
* JSGF Grammar for Hello World example 
*/ 

grammar hello; 

public <greet> = (Good morning | Hello) (Bhiksha | Evandro | Paul | Philip | Rita | Will); 

ответ

0

Это говорит ваш словарь наполнитель отсутствует слово <sil>. Неправильный путь наполнителя. Он должен загрузить noisedict.

Эта часть файла конфигурации:

<property name="fillerPath" 
value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict"/> 

должно быть что-то вроде

<property name="fillerPath" 
value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/noisedict"/> 
+0

Я попытался выяснить noisedict в моем ** WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar **. Я мог найти только ** fillerdict ** в ** dict ** и еще несколько слов. –

+0

noisedict находится в последней версии. Если вы загрузили релиз, это будет fillerdict. –

2

Наконец смог запустить "HelloWorld" применение Sphinx4. Для вышеупомянутой проблемы мне пришлось изменить файл конфигурации.

Ранее fillerPath собственность:

<property name="fillerPath" 
value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict"/> 

Я просто добавил fillerdict, и она работала:

<property name="fillerPath" 
    value="resource:/edu/cmu/sphinx/model/acoustic/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/fillerdict"/> 
Смежные вопросы