我正在开发用于语音到文本转换的Java应用程序。 使用过sphinx库和demo helloworld工作得很好。 我已经编辑了语法文件并在其中添加了更多语法,它工作正常。
现在我想要的是它应该接受现实世界词典中存在的所有输入词,那么我该怎么做呢?
我是否需要通过创建新规则在我的Grammar文件中添加所有这些单词?
答案 0 :(得分:1)
语法用于具有有限短语集的任务。在您的情况下,您需要使用language model。一旦构建或获得,可以在调用Configuration#setLanguageModelPath()
后使用它。
答案 1 :(得分:1)
您可以直接使用声学模型和字典与实时语音识别器,而无需涉及语法文件的内容。 至于使用完整字典创建语法文件将无用且耗时。 同样对于解码也需要花费大量时间来扫描语法文件的每个单词然后找到匹配然后选择最佳。 简单的解决方案是直接使用声学模态和字典,而不指定语法。 您可以查看sphinx给出的演示。
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.api.StreamSpeechRecognizer;
public class TranscriberDemo {
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
.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin");
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
// Start recognition process pruning previously cached data.
recognizer.startRecognition(true);
SpeechResult result = recognizer.getResult();
// Pause recognition process. It can be resumed then with startRecognition(false).
recognizer.stopRecognition();
SpeechResult result;
while ((result = recognizer.getResult()) != null) {
System.out.format("Hypothesis: %s\n", result.getHypothesis());
}
recognizer.stopRecognition();
}
}