Отслеживание лица высокой четкости Kinect V2 - несколько лиц

Я довольно долго работал с Kinect V2 в WPF. В настоящее время я написал модуль для извлечения контуров лица из цветового потока с помощью HighDefinitionFaceFrameSource а также HighDefinitionFaceFrameReader, По сути, я использую faceModel а также faceAllignment свойства из HightDefinitionFaceFrameResult рассчитать путь вокруг лица. Затем я сопоставляю его с цветным потоком, который дает мне изображение лица человека. Затем я рисую поток цветов в WriteableBitmap, который я показываю в моем окне XAML. Данные пути на данный момент отбрасываются.

Этот метод отлично работает для одного человека. Однако когда я попытался расширить его до шести человек, это замедлило рендеринг моей визуализации! Похоже, что это влияет только на рендеринг, так как фреймы лица, кажется, поступают как обычно, использование процессора и памяти также не пострадали. Похоже, это происходит, когда я обрабатываю несколько лицевых рамок высокого разрешения.

Я также заметил, что примеры Microsoft SDK отслеживают только одно лицо с HighDefinitionFaceFrameSource, Возможно, в SDK есть ограничение?

Кому-нибудь удалось отследить шесть человек HignDefinitionFaceFrameSource & Reader?

1 ответ

После дальнейшего тестирования мне стало очевидно, что Kinect SDK не позволит вам иметь несколько HighDefinitionFaceFrameSourceс установленным идентификатором отслеживания. Таким образом, мне кажется, что только одно лицо может быть отслежено в то время. Обратите внимание, что я могу ошибаться, и, возможно, кто-то из команды Microsoft Kinect может дать более определенный ответ, но это то, что я узнал.

Вот как мне удалось обойти это ограничение. Я перебираю список отслеживаемых тел и устанавливаю идентификатор отслеживания для каждого лица индивидуально. Это позволяет мне отслеживать лицо в течение некоторого времени, захватить все необходимые данные, прекратить отслеживать его, перейти к следующему лицу и повторить. Конечно, у этого есть много недостатков - ваш поток данных отслеживания лиц не такой "плавный", как должен был бы быть, визуализация имеет "пробелы" в данных - небольшие, но заметные. Однако это всего лишь обходной путь, и я все еще ищу лучшее решение.

В ответ на ваш комментарий, Sergio, вы можете установить лицо как активное, назначив ему текущий действительный идентификатор отслеживания.

        // update the face frame source to track this body

        if (FaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            FaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }


        //set all the tracking face data to false
        // update the high definition face frame source to track this body / face

        if (_highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            _highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }

Здесь trackingId - это текущий идентификатор отслеживания из вашего списка объектов Body. Ваш скелетный трекер должен обновлять это значение в каждом кадре.

Настройка TrackingId значение в HighDefinitionFaceFrameSource до 0 отключит отслеживание для этого объекта.

Другие вопросы по тегам