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

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

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

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

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

4 ответов


последняя версия 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).


Ник

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

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


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


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

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

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

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