Java 在没有Maven的情况下使用sphinx4 JAR时出错
我对API Sphinx4有一个问题,我不明白为什么它不工作 我尝试编写一个小类来捕获用户的声音,并将其讲话写入文件 1) 我已经在Eclispe上创建了一个新的java项目 2) 我已经创建了TranscriberDemo类 3) 我已经创建了一个文件夹“文件” 4) 我已经复制了文件夹“en-us”和文件夹“file”上的文件“cmudit en-us.dict”、“en-us.lm.dmp”、“10001-90210-01803.wav” 5) 我不使用maven,所以我只包含jar文件“sphinx4-core-1.0-SNAPSHOT.jar”和“sphinx4-data-1.0-SNAPSHOT.jar” 您可以在此处下载: 核心: 数据: 我知道源代码是可用的 在这里: 或在此: 但我不使用maven,所以无法编译它们 我的班级:Java 在没有Maven的情况下使用sphinx4 JAR时出错,java,speech-recognition,voice-recognition,speech-to-text,sphinx4,Java,Speech Recognition,Voice Recognition,Speech To Text,Sphinx4,我对API Sphinx4有一个问题,我不明白为什么它不工作 我尝试编写一个小类来捕获用户的声音,并将其讲话写入文件 1) 我已经在Eclispe上创建了一个新的java项目 2) 我已经创建了TranscriberDemo类 3) 我已经创建了一个文件夹“文件” 4) 我已经复制了文件夹“en-us”和文件夹“file”上的文件“cmudit en-us.dict”、“en-us.lm.dmp”、“10001-90210-01803.wav” 5) 我不使用maven,所以我只包含jar文件“
import java.io.InputStream;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.SpeechResult;
import edu.cmu.sphinx.api.StreamSpeechRecognizer;
import edu.cmu.sphinx.result.WordResult;
public class TranscriberDemo
{
public static void main(String[] args) throws Exception
{
System.out.println("Loading models...");
Configuration configuration = new Configuration();
// Load model from the jar
configuration.setAcousticModelPath("file:en-us");
configuration.setDictionaryPath("file:cmudict-en-us.dict");
configuration.setLanguageModelPath("file:en-us.lm.dmp");
StreamSpeechRecognizer recognizer = new StreamSpeechRecognizer(configuration);
InputStream stream = TranscriberDemo.class.getResourceAsStream("file:10001-90210-01803.wav");
stream.skip(44);
// Simple recognition with generic model
recognizer.startRecognition(stream);
SpeechResult result;
while ((result = recognizer.getResult()) != null)
{
System.out.format("Hypothesis: %s\n", result.getHypothesis());
System.out.println("List of recognized words and their times:");
for (WordResult r : result.getWords())
{
System.out.println(r);
}
System.out.println("Best 3 hypothesis:");
for (String s : result.getNbest(3))
System.out.println(s);
}
recognizer.stopRecognition();
}
}
我的日志:
Loading models...
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at edu.cmu.sphinx.util.props.ConfigurationManager.getPropertySheet(ConfigurationManager.java:91)
at edu.cmu.sphinx.util.props.ConfigurationManagerUtils.listAllsPropNames(ConfigurationManagerUtils.java:556)
at edu.cmu.sphinx.util.props.ConfigurationManagerUtils.setProperty(ConfigurationManagerUtils.java:609)
at edu.cmu.sphinx.api.Context.setLocalProperty(Context.java:198)
at edu.cmu.sphinx.api.Context.setAcousticModel(Context.java:88)
at edu.cmu.sphinx.api.Context.<init>(Context.java:61)
at edu.cmu.sphinx.api.Context.<init>(Context.java:44)
at edu.cmu.sphinx.api.AbstractSpeechRecognizer.<init>(AbstractSpeechRecognizer.java:37)
at edu.cmu.sphinx.api.StreamSpeechRecognizer.<init>(StreamSpeechRecognizer.java:35)
at TranscriberDemo.main(TranscriberDemo.java:27)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 12 more
加载模型。。。
线程“main”java.lang.NoClassDefFoundError中出现异常:com/google/common/base/Function
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:191)
位于edu.cmu.sphinx.util.props.ConfigurationManager.getPropertySheet(ConfigurationManager.java:91)
位于edu.cmu.sphinx.util.props.ConfigurationManagerUtils.listAllsPropNames(ConfigurationManagerUtils.java:556)
位于edu.cmu.sphinx.util.props.ConfigurationManagerUtils.setProperty(ConfigurationManagerUtils.java:609)
位于edu.cmu.sphinx.api.Context.setLocalProperty(Context.java:198)
位于edu.cmu.sphinx.api.Context.setAcousticModel(Context.java:88)
位于edu.cmu.sphinx.api.Context.(Context.java:61)
位于edu.cmu.sphinx.api.Context.(Context.java:44)
位于edu.cmu.sphinx.api.AbstractSpeechRecognizer.(AbstractSpeechRecognizer.java:37)
位于edu.cmu.sphinx.api.StreamSpeechRecognizer.(StreamSpeechRecognizer.java:35)
位于TranscriberDemo.main(TranscriberDemo.java:27)
原因:java.lang.ClassNotFoundException:com.google.common.base.Function
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 还有12个
感谢您的帮助=)您的代码和操作存在多个问题: 3) 我已经创建了一个文件夹“文件” 不需要 4) 我已经复制了文件夹“en-us”和文件夹“file”上的文件“cmudit en-us.dict”、“en-us.lm.dmp”、“10001-90210-01803.wav” 不需要,您已经将模型作为sphinx4数据包的一部分 5) 我不使用maven,所以我只包含jar文件“sphinx4-core-1.0-SNAPSHOT.jar”和“sphinx4-data-1.0-SNAPSHOT.jar” 这是非常错误的,因为您从未经授权的位置拿走了过时的罐子。教程中列出了下载JAR的正确位置 您从某个随机网站获取了恶意JAR,其中可能包含病毒或rootkit 在这里: 这也是一个错误的链接。正确的链接是 这里您使用file:URL方案,它指向不适当上下文中的文件。如果要从文件创建InputStream,请执行以下操作:
InputStream stream = new FileInputStream(new File("10001-90210-01803.wav"));
线程“main”java.lang.NoClassDefFoundError中出现异常:com/google/common/base/Function
这个错误是因为您从其他地方拿走了一个jar,它说您需要额外的依赖项。当您看到ClassDefFoundError时,这意味着您需要向类路径中添加额外的jar。使用官方狮身人面像X4时,您不应看到此错误。已解决
事实上,这是一个愚蠢的错误
谢谢你@Nikolay的回答。我已经接受你的回答,但我在这里继续这个过程:
1) 从下载sphinx4 core和sphinx4数据JAR
2) 将它们包括在项目中
3) 测试你的代码
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
import edu.cmu.sphinx.api.SpeechResult;
public class SpeechToText
{
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.dmp");
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
recognizer.startRecognition(true);
SpeechResult result;
while ((result = recognizer.getResult()) != null)
{
System.out.println(result.getHypothesis());
}
recognizer.stopRecognition();
}
}
就这些
- 如果您需要Sphinx4的源代码:
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
import edu.cmu.sphinx.api.SpeechResult;
public class SpeechToText
{
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.dmp");
LiveSpeechRecognizer recognizer = new LiveSpeechRecognizer(configuration);
recognizer.startRecognition(true);
SpeechResult result;
while ((result = recognizer.getResult()) != null)
{
System.out.println(result.getHypothesis());
}
recognizer.stopRecognition();
}
}