Отслеживание объекта с помощью OpenCV

#opencv

#opencv

Вопрос:

Я пытаюсь реализовать отслеживание отдельного объекта с помощью OpenCV как части робота, который отслеживает объект, отмеченный прямоугольной областью в кадре. На основе этого шаблона, определенного во фрейме, робот должен преследовать этот объект. Объект не может быть одного цвета, а также изменяется ориентация объекта. Видео, снятое роботом, обрабатывается ноутбуком, и в результате обработки роботу отправляются команды для перемещения.

Я довольно новичок в OpenCV. Прочитав кое-что об отслеживании движения, я обнаружил, что optical flow с помощью метода Lucas-Kanade подходит для этой цели путем динамического обновления шаблона.

Достаточно ли этого метода для моих требований? Возможно ли добиться обработки в реальном времени с помощью этого метода? Я также хочу знать, лучше ли подходит для моих целей какой-либо другой метод (ы)?

Пожалуйста, поправьте меня, если я ошибаюсь.

Ответ №1:

Отслеживание — это широко изучаемая тема, и стандартного (и в целом надежного) решения не существует. Довольно надежный код отслеживания пишется годами, в основном аспирантами.

Если вам разрешено использовать чужой код, введите в YouTube: Хищник: камера, которая обучается. Это довольно общий алгоритм быстрого отслеживания (по сути, это расширенный древовидный / каскадный классификатор Haar, основанный на функциях). Там, в видео, вы можете найти ссылки на исследовательские работы, и если вы загуглите домашнюю страницу старого университета изобретателя Гая Зданека, вы сможете загрузить и использовать его код.

Если вам нужно создать свой собственный код, вы прибегаете к какой-нибудь очень простой системе. Если ваш отслеживаемый объект не меняется слишком сильно и не перемещается сильно, я бы рекомендовал использовать сопоставление с шаблоном. Как только обнаружение немного отличается от исходного шаблона, вы можете обновить свой шаблон с помощью недавнего обнаружения. Это вызывает дрейф. Если отклонение слишком велико, вы можете вернуться к исходному шаблону.

Однако обратите внимание: не стоит многого ожидать от усилий по отслеживанию… Lucas-Kanade надежен только в исследовательских работах. 😉

Ответ №2:

Я бы начал с YouTube, посмотрите, что сделали другие исследователи на данный момент, и посмотрите, размещены ли их исследовательские работы в Интернете. Другие ключевые слова, которые вы можете поискать в Google, — это классификатор Voila Jones (распознавание лиц), классификатор объектов на основе AdaBoost, модель активного внешнего вида и множество новых исследовательских работ (определенно не в моей лиге).

Вы можете ознакомиться с тем, что я написал во flash еще в начале 2009 года. Нужна веб-камера и flash в вашем браузере, использует OpenCV в качестве серверной части.

Ответ №3:

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

Я разработал проект для обучения отслеживанию объекта с использованием библиотеки OpenCV C . Ссылка на мой проект https://bitbucket.org/iankits/opencv_development /. На вики-странице проекта представлены все подробности постановки задачи и различные указатели для обучения отслеживанию объекта.

Моя основная ссылка на решение находится ЗДЕСЬ. Я хотел отследить черепаху в видео. Для этого я использовал метод сопоставления с шаблоном библиотеки OpenCV.

matchTemplate(фрейм, templ, результат, match_method );

Я выбрал черепаху из кадра видео и сохранил в виде файла *.png. Затем я использовал этот png-файл в качестве шаблона для сопоставления с каждым кадром видео. Это отлично сработало для моей цели. Но я должен признать, что это не самое лучшее решение. В случае, если вы используете это для зрения робота, я бы порекомендовал вам использовать «Haartraining«, который представляет собой метод машинного обучения, приведенный в OpenCV. Вы также можете ознакомиться с моей попыткой ЗДЕСЬ.

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