2017-09-05 116 views
1

我想檢測人而不依賴人臉檢測。如果照明條件較差,或者辣椒麪朝外,則不會檢測到人。 記憶事件'PeoplePerception/JustArrived'和'EngagementZones/PersonApproached'似乎依賴於相機可檢測的臉部。 是否有激光/紅外/聲納距離變化引發的記憶事件?胡椒人體檢測

我不知道是否有比更好的解決方案:

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

可以使用前聲納和人類檢測事件「FaceDetected」。

但是,您可以使用PeriodicTask而不是一個while循環。你每次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項目:-) –