Как я могу обнаруживать и отслеживать людей, использующих OpenCV? - PullRequest
35 голосов
/ 03 февраля 2010

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

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

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

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

Ответы [ 4 ]

27 голосов
/ 20 февраля 2010

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

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).

5 голосов
/ 28 февраля 2010

Ник

То, что вы ищете, это не обнаружение людей, а обнаружение движения. Если вы расскажете нам гораздо больше о том, что вы пытаетесь решить / сделать, мы ответим лучше. В любом случае, существует много способов обнаружения движения в зависимости от того, что вы собираетесь делать с результатами. Простейшим будет различие с последующим установлением порога, в то время как сложным может быть правильное фоновое моделирование -> вычитание переднего плана -> морфологические операции -> анализ связанных компонентов, с последующим анализом BLOB-объектов, если требуется. Скачайте код opencv и посмотрите каталог с примерами. Вы можете увидеть, что вы ищете. Также есть книга Орейли о OCV.

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

4 голосов
/ 14 февраля 2010

Это явно нетривиальная задача.Вам придется искать научные публикации для вдохновения ( Google Scholar ваш друг здесь).Вот статья об обнаружении и отслеживании человека: Отслеживание человека с помощью режима быстрой средней смены

2 голосов
/ 03 февраля 2010

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

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

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

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

...