我最近开始为Pepper构建一个Javascript程序。我的目标是让胡椒听人们说什么,或者说你好或让胡椒根据关键词' Hello / Animation'做一个动画。在Javascript中的WordRecognized事件中。
截至目前,我已经能够使用JavaScript在平板电脑上显示两个按钮,并让Pepper在按下一个按钮时说出Hello,并在另一个按钮按下时执行动画。单击按钮可以工作,但我无法使用Qi Javascript SDK(http://doc.aldebaran.com/2-4/dev/js/index.html)使其适用于WordRecognized事件。我浏览了这里提到的链接,并提出了下面的代码片段,让Pepper在听到识别的单词时说出了Word Detected。只是想知道我在代码中还缺少什么才能使Pepper听到这些词并相应地执行操作?
//Start the Speech Recognition
var asr = session.service('ALSpeechRecognition');
//Define the Vocabulary
vocabulary = ["hello", "dance"];
//Set The Language To English and set the Vocabulary
asr = asr.then( function(asr) { return asr.setLanguage('English') }).then( function(asr){ return asr.setVocabulary(vocabulary, false); } );
console.log("Set the Language to English!");
//Register the Callback function for the Speech REcognition
asr.unsubscribe(); //De-Register if Existing from Before
asr.subscribe();
session.service("ALMemory").then(function (ALMemory) {
ALMemory.subscriber("wordRecognized").then(function (subscriber) {
// subscriber.signal is a signal associated to "wordRecognized"
subscriber.signal.connect(function (state) {
word = state.getData("wordRecognized")[1];
word.then( function() { session.service('ALTextToSpeech').say("A Keyword is Detected!") });
asr.unsubscribe();
}); //subscriber
}); //connect
}); //ALMemory
});
答案 0 :(得分:1)
您给出的代码段不起作用,因为:
var asr = session.service('ALSpeechRecognition');
表示asr变量是未来,所以你不能在其上调用asr.unsubscribe()。
你必须在session.service(...).then(function(asr) { ...}
中包装所有内容才能使其正常工作,就像使用ALMemory一样。
语法可能有点尴尬,我通常使用一个小帮助库robotutils.qim.js,它使代码更具可读性,并且有一个帮助订阅ALMemory。