2017-09-05 5 views
1

私は顔の検出に頼ることなく人を検出したいと思います。照明の状態が悪い場合や、ペッパーが顔を向いている場合は、人が検出されません。 メモリイベント 'PeoplePerception/JustArrived'と 'EngagementZones/PersonApproached'は、カメラが検出可能な顔に依存しているようです。 レーザー/赤外線/ソナー距離の変化によってトリガーされるメモリー・イベントはありますか?ペッパーの人の検出

より良い解決策があるのだろうか:あなたは人間の検出のために、フロントソナーとイベント「FaceDetected」を使用することができ

while True: 
    floatDist = self.memory.getData('Device/SubDeviceList/Platform/Front/Sonar/Sensor/Value') 
    if floatDist < 1.0: 
     doSomething() 
    sleep(0.5) 
+1

これは正しい方法です!また、 "faceDetected"イベントを試すこともできますが、それは人々の認識よりも速くトリガーになります。 – JLS

答えて

1

が。

ただし、whileループではなくPeriodicTaskを使用できます。あなたは0.5秒ごとにイベントをチェックしながら、あなたはそれを停止することができます。

私はそのようにそれを行います。

class HumanDetector: 
def __init__(self, ALMemory): 
    self.ALMemory = ALMemory 

    # subscribe to FaceDetected 
    self.subscriber = self.ALMemory.subscriber("FaceDetected") 
    self.subscriber.signal.connect(self.on_human_tracked) 

    self.task = qi.PeriodicTask() 
    self.task.setCallback(self._task) 
    self.task.setUsPeriod(50000) 
    self.task.start(True) 

def on_human_tracked(self, value): 
    print "do something with the face" 

def _stop(self): 
    print "_stop..." 
    self.task.stop() 
    self.face_detection.unsubscribe("FaceDetected") 
    print "_stop done" 

def _task(self): 
    print "_task..." 
    floatDist = self.memory.getData('Device/SubDeviceList/Platform/Front/Sonar/Sensor/Value') 
    if floatDist < 1.0: 
     print "do something with the object in front of the robot" 

    print "_task done" 

だから、モジュールALMemoryを必要とするPythonクラスの一例です。 モジュールALMEMORYを使用すると、ソナーを確認し、顔が検出されたかどうかを確認します。

+0

非常に良い。私は時間を見つけたらそれを試してみる。これはまた、人を検出するための代替の「確かに成功する」方法がないことを私に示唆している。 (私は3Dブロブの検出と処理を想像しました) –

+0

人の検出のために、2Dカメラが最高です。あなたは、人間の顔を検出するための良い方向を見て、ソナーとレーザーの組み合わせを使用することができます。個人的には、私はそれが実際の人間の顔であり、人間の顔の画像ではないことを検出するためだけに3Dを使用します。 – mcaniot

+0

良いgithubプロジェクトのようなサウンド:-) –

関連する問題