胡椒人体检测

Pepper human detection

我想在不依赖人脸检测的情况下检测人。在光照条件差或 Pepper 背对着的情况下,无法检测到人。 记忆事件 'PeoplePerception/JustArrived' 和 'EngagementZones/PersonApproached' 似乎依赖于相机检测到的面部。 是否存在由 laser/infrared/sonar 距离变化触发的记忆事件?

我想知道是否有比以下更好的解决方案:

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

您可以使用前置声纳和事件 "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 Class 的例子。 使用模块 ALMemory,您将检查声纳以及是否检测到面部。