tir*_*irz 3 java speech-recognition speech-to-text voice-recognition sphinx4
我有API Sphinx4的问题,我无法弄清楚为什么它不起作用.
我尝试写一个小类来捕获用户的声音并在文件上写下他的发言.
1)我在Eclispe上创建了一个新的java项目.
2)我创建了TranscriberDemo类.
3)我创建了一个文件夹"file".
4)我在文件夹"file"上复制文件夹"en-us"和文件"cmudict-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".
你可以在这里下载它们:
核心:https://1fichier.com/?f3y6vqupdr
数据:https://1fichier.com/?lpzz8jyerv
我知道源代码可用
这里:https://github.com/erka/sphinx-java-api
或者在这里:http://sourceforge.net/projects/cmusphinx/files/sphinx4
但我不使用maven所以我无法编译它们.
我的课:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的日志:
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
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助=)
您的代码和操作存在多个问题:
3)我创建了一个文件夹"file".
不需要
4)我在文件夹"file"上复制文件夹"en-us"和文件"cmudict-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".
这是非常错误的,因为你从未经授权的位置拿走了过时的罐子.下载罐子的正确位置列在教程http://oss.sonatype.org中
你从一些可能含有病毒或rootkit的随机网站中获取了恶意罐子.
这也是一个错误的链接.正确的链接是http://github.com/cmusphinx/sphinx4
Run Code Online (Sandbox Code Playgroud)InputStream stream = TranscriberDemo.class.getResourceAsStream("file:10001-90210-01803.wav");
在这里,您使用file:URL scheme指向不适合上下文中的文件.如果你想从文件创建InputStream,请执行以下操作:
InputStream stream = new FileInputStream(new File("10001-90210-01803.wav"));
Run Code Online (Sandbox Code Playgroud)
线程"main"中的异常java.lang.NoClassDefFoundError:com/google/common/base/Function
这个错误是由你从其他地方带来一个jar的事实引起的,它说你需要额外的依赖.当您看到ClassDefFoundError时,这意味着您需要在类路径中添加额外的jar.使用官方sphinx4,你不应该看到这个错误.
解决了.
事实上这是一个愚蠢的错误......
谢谢@Nikolay的回答.我已经接受了你的回答,但我在这里恢复了这个过程:
1)从https://oss.sonatype.org/#nexus-search;quick~sphinx4下载sphinx4-core和sphinx4-data 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();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是全部!
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |