我的学生和我正在与NAO机器人合作。我们在Java中遇到语音识别问题。我们可以让机器人在单词被说两次之后识别我们指定词汇表中的单词。谢谢,请参阅下面的代码示例:
public class SpeechRecog {
private static String NAOQI_IP = "10.0.1.236";
//public static String NAOQI_IP = "127.0.0.1";
private static int NAOQI_PORT = 9559;
static ALMemoryProxy memory = new ALMemoryProxy(NAOQI_IP, NAOQI_PORT);
static ALSpeechRecognitionProxy recog = new ALSpeechRecognitionProxy(NAOQI_IP, NAOQI_PORT);
static ALTextToSpeechProxy tts = new ALTextToSpeechProxy(NAOQI_IP, NAOQI_PORT);
public static void main(String[] args) {
String [] vocab = {"nao", "monkey", "hello"};
recog.unsubscribe("WordRecognized");
recog.setAudioExpression(true);
recog.setVisualExpression(true);
recog.setVocabulary(vocab, true);
recog.subscribe("WordRecognized");
while(true){
if(memory.getData("SpeechDetected").toBoolean()){
Variant words = memory.getData("WordRecognized");
String word = (String)words.getElement(0).toString();
System.out.println("The word is:" + word+":");
float percent = (float) words.getElement(1).toFloat();
for(int i = 0; i<words.getSize(); i+=2){
System.out.println("Word: " + (String)words.getElement(i).toString());
System.out.println("Probability: " + (float)words.getElement(i+1).toFloat());
}
//if(wordCheck())
//break;
if(!word.equals("") && percent > 0.2){
if(word.equals("nao")){
tts.say("How can I help you?");
System.out.println("how?");
break;
}
else if(word.equals("monkey")){
System.out.println("who you calling");
tts.say("who you callin a monkey?");
break;
}
else{
System.out.println("Not recognized");
}
}
}
}
recog.unsubscribe("WordRecognized");
System.out.println("done!");
}
}
答案 0 :(得分:1)
以下是一些提示:
1 - “SpeechDetected”在听到人声开始时被提升,所以它在“WordRecognized”被填充之前设置了几秒钟(当人类停止发言时和分析之后,最后一个被填充)。
所以进入“读取循环”不是好的条件,因为它总是被设置为空或者前一个值。
例如,你应该在启动语音重新设置之前将WordRecognized设置为“”,然后轮询它,当它不再是“”时,你就会得到你认可的单词。
2 - 不要在没有睡眠的情况下进行循环,因为你会使你的CPU过载,你的语音识别过程中没有任何东西可以计算......
答案 1 :(得分:0)
机器人能够在单词被说出一次之后能够检测到语音,即系统能够在单词被说出一次之后能够说出某些内容已被说出来吗?