Цель данной работы - реализовать трекинг объектов, который выполняется при помощи венгерского алгоритма, который используется для нахождения решения задачи о назначениях.
Алгоритм трекинга является достаточно сложным для того, чтобы его запрограммировать во время практики, поэтому в репозиторий CV-SUMMER-CAMP
была включена готовая реализация от Леонида Бейненсона, которую он добавил в opencv_contrib
. Описание пошаговой разработки алгоритма тренига представлено в файле Google Docs.
Структура исходного кода
- include/tracking_by_matching.hpp - заголовочный файл алгоритма трекинга
- src/tracking_by_matching.cpp - реализация алгоритма трекинга (использует задачу о назначениях)
- src/kuhn_munkres.hpp - заголовочный файл алгоритма задачи о назначениях
- src/kuhn_munkres.cpp - реализация алгоритма задачи о назначениях
- samples/practice4.cpp - пример запуска трекинга
Основные задачи:
- Ознакомиться с исходным кодом трекинга.
- Запустить пример
practice-4
, удостовериться в его работоспособности. - Изменить код таким образом, чтобы можно было детектировать некоторое подмножество классов из всех доступных классов.
Дополнительные задачи:
- Изменить код таким образом, чтобы в случае, когда нейросеть детектирует один объект на видео как несколько объектов разных классов, трекер считал этот объект одним классом.
- Ознакомиться с исходным кодом трекинга.
- Убедиться, что проект успешно собирается и создается новый исполняемый файл
<project_build>/bin/practice4.exe
. - Запустить проект, указав все необходимые аргументы командной строки. В качестве тестового видеороклика использовать видео
catdog.mp4
из папкиdata
. - В файле
practice4.cpp
в классеDnnObjectDetector
изменить функциюdetect
таким образом, чтобы она могла детектировать только некоторое подмножество классов. - В файле
practice4.cpp
изменить чтение параметраdesired_class_id
таким образом, чтобы можно было передавать массивы (например передавать строку, в которой имена классов разделены пробелом, и парсить эту строку). - Решить задачи из списка Дополнительные задачи.