我想在不依赖人脸检测的情况下发现人。如果光照条件差,或胡椒面临,人们就不会被发现。 记忆事件' 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)
答案 0 :(得分: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,您将检查声纳以及是否检测到面部。