Skip to content

Latest commit

 

History

History
43 lines (28 loc) · 4.03 KB

README_4.md

File metadata and controls

43 lines (28 loc) · 4.03 KB

Практика 4. Слежение за объектами через нахождение соответствий

Цели

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

Алгоритм трекинга является достаточно сложным для того, чтобы его запрограммировать во время практики, поэтому в репозиторий 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 - пример запуска трекинга

Задачи

Основные задачи:

  1. Ознакомиться с исходным кодом трекинга.
  2. Запустить пример practice-4, удостовериться в его работоспособности.
  3. Изменить код таким образом, чтобы можно было детектировать некоторое подмножество классов из всех доступных классов.

Дополнительные задачи:

  1. Изменить код таким образом, чтобы в случае, когда нейросеть детектирует один объект на видео как несколько объектов разных классов, трекер считал этот объект одним классом.

Общая последовательность действий

  1. Ознакомиться с исходным кодом трекинга.
  2. Убедиться, что проект успешно собирается и создается новый исполняемый файл <project_build>/bin/practice4.exe.
  3. Запустить проект, указав все необходимые аргументы командной строки. В качестве тестового видеороклика использовать видео catdog.mp4 из папки data.
  4. В файле practice4.cpp в классе DnnObjectDetector изменить функцию detect таким образом, чтобы она могла детектировать только некоторое подмножество классов.
  5. В файле practice4.cpp изменить чтение параметра desired_class_id таким образом, чтобы можно было передавать массивы (например передавать строку, в которой имена классов разделены пробелом, и парсить эту строку).
  6. Решить задачи из списка Дополнительные задачи.