Обнаружение перца человека

Я хочу обнаруживать людей, не полагаясь на распознавание лиц. В случаях, когда условия освещения плохие или Перец смотрит в сторону, люди не обнаруживаются. События памяти «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)

person Anders_K    schedule 05.09.2017    source источник
comment
это правильный путь! Вы также можете попробовать событие faceDetected, оно будет срабатывать быстрее, чем восприятие людей.   -  person JLS    schedule 16.09.2017


Ответы (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"

Итак, это пример класса Python, которому нужен модуль ALMemory. С модулем ALMemory вы проверите сонар и обнаружены ли лица.

person mcaniot    schedule 12.10.2017
comment
Очень хорошо. Я попробую, когда найду время. Это также наводит меня на мысль, что не существует альтернативного надежного способа обнаружения людей. (Я представил себе обнаружение и обработку 3D-блоба) - person Anders_K; 12.10.2017
comment
Для обнаружения человека лучше всего подходит 2D-камера. Вы можете использовать комбинацию сонара и лазера, чтобы смотреть в правильном направлении для обнаружения человеческого лица. Лично я использую 3D только для обнаружения реального человеческого лица, а не изображения человеческого лица. - person mcaniot; 12.10.2017