2016-12-31 64 views
0

我正在開發一個在java中使用Sphinx4的程序。sphinx4只識別自定義詞

我想減少聲學模型和語法,使其非常簡單和簡潔,適合我的使用。

我的用法是理解幾個單詞,逐字識別。

例如,單詞將是{man,bye,good,yo} 當我說「man」時,我希望程序立即將其識別爲「man」;

程序不應該等待任何其他單詞,一旦程序識別出一個單詞。

任何人都可以引導我到文檔或示例/演示,我可以參考創建這樣的事情?

這是我寫到目前爲止的代碼。

private static void recognizeWord(LiveSpeechRecognizer recognizer) { 
    String[] words = {"man", "bye", "good", "yo"}; 
    System.out.println("RECOGNIZING A WORD. AVAILABLE WORDS: " + Arrays.toString(words)); 

    recognizer.startRecognition(true); 

    SpeechResult result; 
    while ((result = recognizer.getResult()) != null) { 
     System.out.format("The word is: %s\n", recognizer.getResult().getResult().toString()); 
    } 

    recognizer.stopRecognition(); 
} 
public static void main(String[] args) throws Exception { 

    Configuration configuration = new Configuration(); 

    // Set path to acoustic model. 
    configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); 
    // Set path to dictionary. 
    configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); 
    // Set language model. 
    configuration.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); 

    LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration); 

    recognizeWord(recognizer); 
} 

回答

0

tutorial描述你可以寫JSGF語法是這樣的:

#JSGF V1.0; 

grammar hello; 
public <greet> = man | bye | good | yo; 

與名稱hello.jsgf把它放在一個文件夾src英寸

您可以使用它像這樣:

public static void main(String[] args) throws Exception { 

    Configuration configuration = new Configuration(); 
    configuration.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); 
    configuration.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict");   
    configuration.setGrammarPath("file:src"); 
    configuration.setGrammarName("hello"); 
    configuration.setUseGrammar(true); 

    LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration); 

    recognizer.startRecognition(true); 

    SpeechResult result; 
    while ((result = recognizer.getResult()) != null) { 
     System.out.format("The word is: %s\n", recognizer.getResult().getResult().toString()); 
    } 

    recognizer.stopRecognition(); 
}