0

通常、NAOビヘイビアボックスの出力関数はどこに定義されているのだろうか。

API で関連するドキュメントを見つけることができませんでした。実際に見つけることができるものもありますが、出力関数用ではありません。

Speech Reco ボックスを例にとると、オンライン 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 に答える