0

我想知道通常在哪里定义 NAO 行为框的输出函数。

我只是没能在 API 中找到任何相关文档。您确实可以找到一些,但不适用于输出功能。

以语音识别框为例,我可以在在线 API 上找到函数“WordRecognized”的定义,但找不到“wordRecognized”(区分大小写)和“onNothing”。直觉是他们将它们定义为盒子脚本中的助手(您可以通过双击盒子来获得),但我只是未能在脚本中找到任何相关的实现。

有人以前有过这个并且知道解决方案吗?我非常感谢任何反馈,因为我想检查它们是如何定义的。

Speech Reco 的代码如下,其他一些盒子也会出现这种情况:

class MyClass(GeneratedClass):

def __init__(self):
    GeneratedClass.__init__(self, False)
    try:
        self.asr = ALProxy("ALSpeechRecognition")
    except Exception as e:
        self.asr = None
        self.logger.error(e)
    self.memory = ALProxy("ALMemory")

def onLoad(self):
    from threading import Lock
    self.bIsRunning = False
    self.mutex = Lock()
    self.hasPushed = False
    self.hasSubscribed = False
    self.BIND_PYTHON(self.getName(), "onWordRecognized")

def onUnload(self):
    from threading import Lock
    self.mutex.acquire()
    try:
        if (self.bIsRunning):
            if (self.hasSubscribed):
                self.memory.unsubscribeToEvent("WordRecognized", self.getName())
            if (self.hasPushed and self.asr):
                self.asr.popContexts()
    except RuntimeError, e:
        self.mutex.release()
        raise e
    self.bIsRunning = False;
    self.mutex.release()

def onInput_onStart(self):
    from threading import Lock
    self.mutex.acquire()
    if(self.bIsRunning):
        self.mutex.release()
        return
    self.bIsRunning = True
    try:
        if self.asr:
            self.asr.setVisualExpression(self.getParameter("Visual expression"))
            self.asr.pushContexts()
        self.hasPushed = True
        if self.asr:
            self.asr.setVocabulary( self.getParameter("Word list").split(';'), self.getParameter("Enable word spotting") )
        self.memory.subscribeToEvent("WordRecognized", self.getName(), "onWordRecognized")
        self.hasSubscribed = True
    except RuntimeError, e:
        self.mutex.release()
        self.onUnload()
        raise e
    self.mutex.release()

def onInput_onStop(self):
    if( self.bIsRunning ):
        self.onUnload()
        self.onStopped()

def onWordRecognized(self, key, value, message):
    if(len(value) > 1 and value[1] >= self.getParameter("Confidence threshold (%)")/100.):
        self.wordRecognized(value[0]) #~ activate output of the box
    else:
        self.onNothing()
4

1 回答 1

0

这些方法是在您创建或编辑框输入或输出时定义的。请参阅此文档

如果您将输入命名为“onMyTruc”,则在onInput_onMyTruc(self)触发输入时将调用该方法。

如果您将名称“output_value”赋予某个输出,它将创建一个可调用的方法名称:self.output_value()

在您的示例中,wordRecognizedonNothing是 SpeechReco 框的输出名称。

于 2015-06-23T08:54:45.630 回答