Обнаружение человеческого тела из видео источника в C # - PullRequest
3 голосов
/ 16 июля 2011

Я пытаюсь извлечь человека из видеоисточника, чтобы позже я смог использовать его изображение. Мне нужно только извлечь человеческое тело и игнорировать окружающую среду. Хорошо, что фон статичен. Я попытался использовать AForge и применил фильтр CustomFrameDifferenceDetector, который сравнивает текущий кадр со статическим фоновым изображением и выделяет пиксели, которые отличаются (разница> порог). Это работает хорошо, но есть проблема, когда кожа или часть одежды имеет цвет, аналогичный фону. В этих случаях фильтр игнорирует эти части, и в результате появляются различные отверстия в корпусе. Простое снижение порога не решает проблему, так как тени на теле и другие шумы увеличиваются (даже при подавлении шума).

Вам известно какое-либо известное решение этой проблемы? Или это все еще нерешенная проблема?

Ответы [ 2 ]

3 голосов
/ 16 июля 2011

Трудно решить проблему (и одна из причин, по которой Microsoft Kinect не использует только видимый свет, и почему сине-зеленое экранирование все еще так популярно).Я бы попытался удалить дыры (вы должны быть в состоянии предсказать, где должно быть тело).Если у вас есть вычислительная мощность, используйте разные пороги и объедините результаты.Вы также можете попробовать отфильтровать новые отдельные изображения (например, добавить текущий кадр в последний кадр и нормализовать результат).Таким образом, вы можете отслеживать фигуры, которые вы теряете, для одного кадра намного более согласованно.

Другой подход: использовать обнаруженную форму / область только для определения положения тела.Т.е. игнорируйте его конкретную форму и используйте готовый Shapre выше / около предполагаемой позиции тела.Скорее всего, это не сработает, если вы захотите сделать что-то вроде синего экрана, но это также может помочь закрыть дыры.

1 голос
/ 14 мая 2019

Alturos.Yolo делает именно то, что вы ищете.

Йоло узнает из аннотированных изображений, как обнаружить объекты, которые вы ищете.Сначала необходимо установить проект вместе с набором уже обученных образов с помощью диспетчера пакетов Nuget.В вашем случае достаточно YOLOv2-крошечной модели:

Install-Package Alturos.Yolo
Install-Package Alturos.YoloV2TinyVocData 

После установки вы можете использовать ее следующим образом для обнаружения человека на вашем изображении:

using (var yoloWrapper = new YoloWrapper("yolov2-tiny-voc.cfg", "yolov2-tiny-voc.weights", "voc.names"))
{
    var items = yoloWrapper.Detect(@"your_image.jpg");
    //if (items[0].Type == "Person") { ... }
}

Массив items будетсодержать информацию обо всех найденных объектах.Вы можете проверить там, на кого вы смотрите, используя свойство Type.

...