通常、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()