Как я могу обнаружить и отслеживать людей с помощью 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
Ответ 3
Это явно нетривиальная задача. Вам нужно будет изучить научные публикации для вдохновения (Google Scholar - ваш друг здесь). Вот статья об обнаружении и отслеживании людей: Отслеживание людей с помощью быстрого среднесрочного режима поиска
Ответ 4
Это похоже на проект, который мы сделали в рамках курса Computer Vision, и я могу сказать вам прямо сейчас, что это сложная проблема. Правильно.
Вы можете использовать сегментирование переднего плана/фона, найти все капли, а затем решить, что они - человек. Проблема в том, что это не сработает очень хорошо, так как люди, как правило, идут вместе, идут друг против друга и так далее, поэтому blob может состоять из двух человек, и тогда вы увидите, что blob расщепляется и сливается, когда они идут.
Вам понадобится метод различения нескольких лиц в одном блобе. Это не проблема. Я ожидаю, что кто-нибудь сможет ответить в одном SO-сообщении.
Мой совет - погрузиться в имеющиеся исследования и посмотреть, можете ли вы найти что-нибудь там. Проблема не является неразрешимой, учитывая, что существуют продукты, которые делают это: у Autoliv есть продукт для обнаружения пешеходов, использующих ИК-камеру на автомобиле, и я видел другие продукты, которые касаются подсчета клиентов, входящих и выходящих из магазинов.