Цель данной работы - знакомство с трекингом объектов; реализация трекинга объектов, включающая детектирование объектов на каждом кадре и решение задачи о назначениях. Для решения задачи о назначениях использовать венгерский алгоритм или алгоритм полного перебора.
В репозиторий 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 - пример использования разработанных кодов для трекинга.
Основные задачи:
- Ознакомиться с исходным кодом трекинга.
- Скачать модель для детектирования объектов mobilenet-ssd.
- Запустить пример
practice4
, удостовериться в его работоспособности. - Модифицикация кода: добавить возможность детектировать ОПРЕДЕЛЕННОЕ подмножество классов из всех доступных.
Дополнительные задачи:
- Разработать собственную реализацию решения задачи о назначениях, используя:
- алгоритм полного перебора или
- венгерский алгоритм.
- Модификация кода: добавить возможность выбора наилучшего варианта в случае, когда нейросеть относит данный объект к двум (и более) разным классам.
- Скачать актуальную версию исходных кодов (получить данные с репозитория
itlab-vision/CV-SUMMER-CAMP
). - Скачать модель для детектирования объектов mobilenet-ssd.
- Запустить пример
practice4
, удостовериться в его работоспособности, разобрать реализацию. - Модифицировать код согласно заданию.
- Выполнить дополнительные задачи.
-
в папке
<openvino_dir>/deployment_tools/tools/model_downloader/
запустить скрипт downloader.py с параметрами --name mobilenet-ssd --output <destination_folder>```bash $ cd "C:\Intel\computer_vision_sdk\deployment_tools\tools\model_downloader" $ python downloader.py --name mobilenet-ssd --output <destination_folder> ```
Файл
list_topologies.yml
, расположенный в папкеC:\Intel\computer_vision_sdk\deployment_tools\tools\model_downloader
, содержит параметры, необходимые для корректной конвертации кадра для детектора. -
Создать копию файла
<project_source>/src/practice4.cpp
и назвать ее<project_source>/src/practice4_YOUR_NAME.cpp
. Далее изменять код только в файле<project_source>/src/practice4_YOUR_NAME.cpp
, но не в<project_source>/src/practice4.cpp
. -
Ознакомиться с исходным кодом трекинга.
-
Убедиться, что проект успешно собирается и создается новый исполняемый файл
<project_build>/bin/practice4_YOUR_NAME.exe
. -
Запустить проект, указав все необходимые аргументы командной строки. В качестве тестового видеороклика использовать видео
catdog.mp4
из папкиdata
. -
Повысить наглядность трекинга, изменить размер тип и размер шрифта, каждому классу назначить свой цвет, и т.д.
-
В файле
practice4_YOUR_NAME.cpp
в классеDnnObjectDetector
изменить функциюdetect
таким образом, чтобы она могла детектировать только некоторое подмножество классов. -
В файле
practice4_YOUR_NAME.cpp
изменить чтение параметраdesired_class_id
таким образом, чтобы можно было передавать массивы (например передавать строку, в которой имена классов разделены пробелом, и парсить эту строку). -
Решить задачи из списка Дополнительные задачи.