Как я могу обнаружить и отслеживать людей с помощью OpenCV?

У меня есть камера, которая будет неподвижной, указана в помещении. Люди пройдут мимо камеры, примерно в 5 метрах от нее. Используя OpenCV, я хочу, чтобы люди проходили мимо - мой идеальный возврат - это массив обнаруженных людей с ограниченными прямоугольниками.

Я просмотрел несколько встроенных образцов:

  • Ни один из примеров Python не применяется.
  • Образец отслеживания blob C выглядит многообещающим, но не принимает видео в реальном времени, что затрудняет тестирование. Это также самый сложный из образцов, который делает извлечение соответствующих знаний и преобразование их в проблемный API Python.
  • Образец C 'motempl' также выглядит многообещающим, поскольку он вычисляет силуэт из последующих видеокадров. Предположительно, я мог бы использовать это, чтобы найти сильно связанные компоненты и извлечь отдельные капли и их ограничивающие прямоугольники, но я все еще остаюсь, пытаясь найти способ идентифицировать капли, найденные в последующих кадрах, как один и тот же blob.

Кто-нибудь может предоставить руководство или образцы для этого - предпочтительно в Python?

Ответ 1

Последняя версия SVN OpenCV содержит (недокументированную) реализацию обнаружения пешеходов на основе HOG. Он даже поставляется с предварительно подготовленным детектором и оболочкой python. Основное использование:

from cv import *

storage = CreateMemStorage(0)
img = LoadImage(file)  # or read from camera

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8),
                padding=(32,32), scale=1.05, group_threshold=2))

Поэтому вместо отслеживания вы можете просто запустить детектор в каждом кадре и напрямую использовать его вывод.

См. src/cvaux/cvhog.cpp для реализации и samples/python/peopledetect.py для более полного примера python (оба в источниках OpenCV).

Ответ 2

Ник

То, что вы ищете, это не обнаружение людей, а обнаружение движения. Если вы расскажете нам гораздо больше о том, что вы пытаетесь решить/сделать, мы можем лучше ответить. Во всяком случае, есть много способов сделать обнаружение движения в зависимости от того, что вы собираетесь делать с результатами. Простейшим может быть различие, за которым следует пороговое значение, в то время как сложным может быть правильное фоновое моделирование → вычитание переднего плана → морфологический опт → компонентный анализ компонентов, за которым следует анализ blob, если требуется. Загрузите opencv-код и посмотрите в каталоге примеров. Вы можете посмотреть, что ищете. Кроме того, есть книга Oreilly о OCV.

Надеюсь, это поможет, Nand

Ответ 4

Это похоже на проект, который мы сделали в рамках курса Computer Vision, и я могу сказать вам прямо сейчас, что это сложная проблема. Правильно.

Вы можете использовать сегментирование переднего плана/фона, найти все капли, а затем решить, что они - человек. Проблема в том, что это не сработает очень хорошо, так как люди, как правило, идут вместе, идут друг против друга и так далее, поэтому blob может состоять из двух человек, и тогда вы увидите, что blob расщепляется и сливается, когда они идут.

Вам понадобится метод различения нескольких лиц в одном блобе. Это не проблема. Я ожидаю, что кто-нибудь сможет ответить в одном SO-сообщении.

Мой совет - погрузиться в имеющиеся исследования и посмотреть, можете ли вы найти что-нибудь там. Проблема не является неразрешимой, учитывая, что существуют продукты, которые делают это: у Autoliv есть продукт для обнаружения пешеходов, использующих ИК-камеру на автомобиле, и я видел другие продукты, которые касаются подсчета клиентов, входящих и выходящих из магазинов.