2015-09-26 33 views
0

我最近用Sphinx4做了一個Java項目。我發現this碼在線,我精簡下來到這個測試是否Sphinx4是工作:cmu sphinx4 java - 由FileNotFoundException導致的運行時異常

public class App 
{ 
    private static final String ACOUSTIC_MODEL = 
      "resource:/edu/cmu/sphinx/models/en-us/en-us"; 
    private static final String DICTIONARY_PATH = 
      "resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"; 

    public static void main(String[] args) throws Exception { 
     Configuration configuration = new Configuration(); 
     configuration.setAcousticModelPath(ACOUSTIC_MODEL); 
     configuration.setDictionaryPath(DICTIONARY_PATH); 

     configuration.setGrammarName("dialog"); 
     LiveSpeechRecognizer jsgfRecognizer = 
       new LiveSpeechRecognizer(configuration); 

     jsgfRecognizer.startRecognition(true); 

     while (true) { 

      String utterance = jsgfRecognizer.getResult().getHypothesis(); 

      if (utterance.startsWith("hello")) { 
       System.out.println("Hello back!"); 
      } 
      else if (utterance.startsWith("exit")) { 
       break; 
      } 
     } 

     jsgfRecognizer.stopRecognition(); 
    } 
} 

但是,它給了我這個錯誤:

Exception in thread "main" java.lang.RuntimeException: Allocation of search manager resources failed 
    at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.allocate(WordPruningBreadthFirstSearchManager.java:247) 
    at edu.cmu.sphinx.decoder.AbstractDecoder.allocate(AbstractDecoder.java:103) 
    at edu.cmu.sphinx.recognizer.Recognizer.allocate(Recognizer.java:164) 
    at edu.cmu.sphinx.api.LiveSpeechRecognizer.startRecognition(LiveSpeechRecognizer.java:47) 
    at com.weebly.controllingyourcomputer.bartimaeus.App.main(App.java:27) 
Caused by: java.io.FileNotFoundException: 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90) 
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188) 
    at java.net.URL.openStream(URL.java:1038) 
    at edu.cmu.sphinx.linguist.language.ngram.SimpleNGramModel.open(SimpleNGramModel.java:403) 
    at edu.cmu.sphinx.linguist.language.ngram.SimpleNGramModel.load(SimpleNGramModel.java:277) 
    at edu.cmu.sphinx.linguist.language.ngram.SimpleNGramModel.allocate(SimpleNGramModel.java:114) 
    at edu.cmu.sphinx.linguist.lextree.LexTreeLinguist.allocate(LexTreeLinguist.java:334) 
    at edu.cmu.sphinx.decoder.search.WordPruningBreadthFirstSearchManager.allocate(WordPruningBreadthFirstSearchManager.java:243) 
    ... 4 more 

我想這可能是一些關於它無法找到ACOUSTIC_MODEL或DICTIONARY_PATH的路徑,所以我將resource:字符串更改爲%HOME%\\Downloads\\sphinx4-5prealpha-src\\sphinx4-5prealpha-src\\sphinx4-data\\src\\main\\resources\\edu\\cmu\\sphinx\\models\\en-us或帶有正斜槓的路徑或C:\Users\Username\...但沒有任何路徑起作用。我知道路徑存在,因爲我從實際資源的屬性窗口複製並粘貼路徑。

所以我的問題是:是我從原始源代碼中刪除了一些導致此錯誤的代碼,是路徑出了什麼問題,還是完全不同?

編輯

順便說一句,我使用Maven來構建我的項目。我將Sphinx4網站上指定的依賴關係添加到了我的pom.xml中,但它不起作用(它不能識別導入,例如edu.com.sphinx.xxx),所以我從網站上下載了他們說要下載它們的JAR並將它們添加到我在Eclipse的Java Build Path中使用我的項目「Libraries」。

回答

0

is it some of the code that I deleted from the original source code that is causing this error

是的,你刪除了太多。

要使用語法識別需要進行三次電話:

configuration.setGrammarPath(GRAMMAR_PATH); 
    configuration.setGrammarName(GRAMMAR_NAME); 
    configuration.setUseGrammar(true); 
相關問題