我正在用Java做一个项目,要求我使用语音识别软件。基本上,我正在编写一个社交机器人",一个可以像个人一样与之互动的机器人。我正在使用" Zeno R25"。话虽如此,语音识别是编程机器人时的关键点。我正在使用Java编程机器人。
现在我尝试从https://github.com/cmusphinx/sphinx4下载Sphinx4演示程序,但这些程序无效。总共有四个,所有四个都无法工作,显然是处理Configuration对象的一些问题。例如,我从DialogDemo.java收到以下错误:
--- exec-maven-plugin:1.2.1:exec (default-cli) @ sphinx4-samples ---
Exception in thread "main" java.lang.NoClassDefFoundError: edu/cmu/sphinx/api/Configuration
at edu.cmu.sphinx.demo.dialog.DialogDemo.main(DialogDemo.java:133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at edu.cmu.sphinx.demo.DemoRunner.main(DemoRunner.java:44)
Caused by: java.lang.ClassNotFoundException: edu.cmu.sphinx.api.Configuration
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)
... 6 more
当我试图运行它时。是的,我按照我应该的方式从DemoRunner类中启动了代码。 DialogDemo.java的代码如下,我标记了用箭头触发错误的流氓代码行:
/*
* Copyright 2013 Carnegie Mellon University.
* Portions Copyright 2004 Sun Microsystems, Inc.
* Portions Copyright 2004 Mitsubishi Electric Research Laboratories.
* All Rights Reserved. Use is subject to license terms.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
package edu.cmu.sphinx.demo.dialog;
import java.util.HashMap;
import java.util.Map;
import edu.cmu.sphinx.api.Configuration;
import edu.cmu.sphinx.api.LiveSpeechRecognizer;
public class DialogDemo {
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";
private static final String GRAMMAR_PATH =
"resource:/edu/cmu/sphinx/demo/dialog/";
private static final String LANGUAGE_MODEL =
"resource:/edu/cmu/sphinx/demo/dialog/weather.lm";
private static final Map<String, Integer> DIGITS =
new HashMap<String, Integer>();
static {
DIGITS.put("oh", 0);
DIGITS.put("zero", 0);
DIGITS.put("one", 1);
DIGITS.put("two", 2);
DIGITS.put("three", 3);
DIGITS.put("four", 4);
DIGITS.put("five", 5);
DIGITS.put("six", 6);
DIGITS.put("seven", 7);
DIGITS.put("eight", 8);
DIGITS.put("nine", 9);
}
private static double parseNumber(String[] tokens) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i < tokens.length; ++i) {
if (tokens[i].equals("point"))
sb.append(".");
else
sb.append(DIGITS.get(tokens[i]));
}
return Double.parseDouble(sb.toString());
}
private static void recognizeDigits(LiveSpeechRecognizer recognizer) {
System.out.println("Digits recognition (using GrXML)");
System.out.println("--------------------------------");
System.out.println("Example: one two three");
System.out.println("Say \"101\" to exit");
System.out.println("--------------------------------");
recognizer.startRecognition(true);
while (true) {
String utterance = recognizer.getResult().getHypothesis();
if (utterance.equals("one zero one")
|| utterance.equals("one oh one"))
break;
else
System.out.println(utterance);
}
recognizer.stopRecognition();
}
private static void recognizerBankAccount(LiveSpeechRecognizer recognizer) {
System.out.println("This is bank account voice menu");
System.out.println("-------------------------------");
System.out.println("Example: balance");
System.out.println("Example: withdraw zero point five");
System.out.println("Example: deposit one two three");
System.out.println("Example: back");
System.out.println("-------------------------------");
double savings = .0;
recognizer.startRecognition(true);
while (true) {
String utterance = recognizer.getResult().getHypothesis();
if (utterance.endsWith("back")) {
break;
} else if (utterance.startsWith("deposit")) {
double deposit = parseNumber(utterance.split("\\s"));
savings += deposit;
System.out.format("Deposited: $%.2f\n", deposit);
} else if (utterance.startsWith("withdraw")) {
double withdraw = parseNumber(utterance.split("\\s"));
savings -= withdraw;
System.out.format("Withdrawn: $%.2f\n", withdraw);
} else if (!utterance.endsWith("balance")) {
System.out.println("Unrecognized command: " + utterance);
}
System.out.format("Your savings: $%.2f\n", savings);
}
recognizer.stopRecognition();
}
private static void recognizeWeather(LiveSpeechRecognizer recognizer) {
System.out.println("Try some forecast. End with \"the end\"");
System.out.println("-------------------------------------");
System.out.println("Example: mostly dry some fog patches tonight");
System.out.println("Example: sunny spells on wednesday");
System.out.println("-------------------------------------");
recognizer.startRecognition(true);
while (true) {
String utterance = recognizer.getResult().getHypothesis();
if (utterance.equals("the end"))
break;
else
System.out.println(utterance);
}
recognizer.stopRecognition();
}
public static void main(String[] args) throws Exception {
--> Configuration configuration = new Configuration(); <--
configuration.setAcousticModelPath(ACOUSTIC_MODEL);
configuration.setDictionaryPath(DICTIONARY_PATH);
configuration.setGrammarPath(GRAMMAR_PATH);
configuration.setUseGrammar(true);
configuration.setGrammarName("dialog");
LiveSpeechRecognizer jsgfRecognizer =
new LiveSpeechRecognizer(configuration);
configuration.setGrammarName("digits.grxml");
LiveSpeechRecognizer grxmlRecognizer =
new LiveSpeechRecognizer(configuration);
configuration.setUseGrammar(false);
configuration.setLanguageModelPath(LANGUAGE_MODEL);
LiveSpeechRecognizer lmRecognizer =
new LiveSpeechRecognizer(configuration);
jsgfRecognizer.startRecognition(true);
while (true) {
System.out.println("Choose menu item:");
System.out.println("Example: go to the bank account");
System.out.println("Example: exit the program");
System.out.println("Example: weather forecast");
System.out.println("Example: digits\n");
String utterance = jsgfRecognizer.getResult().getHypothesis();
if (utterance.startsWith("exit"))
break;
if (utterance.equals("digits")) {
jsgfRecognizer.stopRecognition();
recognizeDigits(grxmlRecognizer);
jsgfRecognizer.startRecognition(true);
}
if (utterance.equals("bank account")) {
jsgfRecognizer.stopRecognition();
recognizerBankAccount(jsgfRecognizer);
jsgfRecognizer.startRecognition(true);
}
if (utterance.endsWith("weather forecast")) {
jsgfRecognizer.stopRecognition();
recognizeWeather(lmRecognizer);
jsgfRecognizer.startRecognition(true);
}
}
jsgfRecognizer.stopRecognition();
}
}
与其他三个演示类似。任何帮助解决这个问题的人都将不胜感激。
答案 0 :(得分:1)
您需要将sphinx4 jar包含在classpath中。如果您使用它,它可能是IDE中的设置,或者如果您使用命令行启动程序,则可以在命令行中添加它们。
Sphinx4教程说明了下载JAR的位置
要了解有关类加载和类路径读取的更多信息