Цель данной работы - познакомиться с программными средствами библиотеки OpenCV, позволяющими обучать и применять каскадные детекторы объектов.
Данный репозиторий содержит:
images
-- директория, где находятся данные для обучения детектора: изображения логотипов Itseez, ННГУ, OpenCV, а также набор изображений, не содержащих данные логотипы (негативы).videos
-- директория с тестовыми видео:logos.mp4
содержит логотипы ННГУ и OpenCV,anthem.avi
-- лица людей.scripts
-- директория с Python-скриптом, являющимся оберткой над С++-приложениями из состава OpenCV, и позволяющим создать обучающую выборку и настроить детектор на поиск определенных объектов.apps
-- директория с С++-приложением, осуществляющим детектирование на изображениях и видео, которое требуется реализовать..gitignore
-- список файлов, находящихся в директории проекта, но игнорируемые git'ом..travis.yml
-- конфигурационный файл для системы автоматического тестирования Travis-CI.CMakeLists.txt
-- общий файл для сборки проекта с помощью CMake.README.md
-- информация о проекте, которую вы сейчас читаете.
Основные задачи:
- С помощью предоставленных скриптов обучить детекторы логотипов ННГУ и OpenCV.
- Реализовать приложение, осуществляющее детектирование объектов определенного класса на одиночном изображении.
- Добавить возможность детектирования на видео.
- Добавить возможность детектирования объектов нескольких классов на одном изображении/видео одновременно.
- Применить полученные самостоятельно детекторы и стандартные детекторы из состава OpenCV к тестовым видео. Визуально сравнить качество различных детекторов для одних и тех же объектов.
Дополнительные задачи:
- Разработать и реализовать простой метод удаления случайных срабатываний. Т.е. если в определенной области кадра видео в определенный момент времени имеется срабатывание детектора и при этом на соседних кадрах близкого срабатывания не наблюдается, то данное срабатывание можно подавить как недостаточно надежное.
- Сделать форк upstream-репозитория, затем клонировать origin к себе на локальную машину. Для инструкций можно обратиться к разделу Общие инструкции по работе с Git в практической работе 1.
- Собрать проект с помощью CMake и MS VS (см. раздел
Сборка проекта с помощью CMake и MS VS
в практической работе 1). В результате успешной сборки
в build-каталоге в директории
bin
долен появить исполняемый файлdetector.exe
, а также Python-скриптыdeps.py
иtrain_cascade_detector.py
- Запустив скрипт
<project_build>/bin/train_cascade_detector.py
, обучить детекторы для логотипов ННГУ и OpenCV (см. директорию<project_source>/images/positives
). Справку по использованию скрипта можно получить указав при его запуске ключ--help
. - Создать новую ветку для разработки собственного приложения (см. раздел Общие инструкции по работе с Git в практической работе 1).
- Создать копию файла
/apps/detector.cpp
и назвать ее<project_source>/apps/detector_YOUR_NAME.cpp
. Далее изменять код только в файле<project_source>/apps/detector_YOUR_NAME.cpp
, но не в<project_source>/apps/detector.cpp
. - Убедиться, что проект успешно собирается и создается новый
исполняемый файл
<project_build>/bin/detector_YOUR_NAME.exe
. - Прислать Pull Request с внесенными изменениями. Пометить в конце названия
(NOT READY)
. По мере готовности решений основных задач Pull Request можно будет переименовать. - В файле
<project_source>/apps/detector_YOUR_NAME.cpp
реализовать детектирование на статичном изображении. Путь к файлу с изображением передается в программу с помощью ключа--image
. Детектор загружается из файла, заданного посредством ключа--detector
. Полный список принимаемых параметров можно посмотреть запустив исполняемый файл с ключом--help
. См. документацию к классу cv::CascadeClassifier (методыload
иdetectMultiScale
). - Реализовать поддержку детектирования на видео из файла (ключ
--video
) или с камеры (--camera
). См. документацию к классу cv::VideoCapture для работы с видео. - Добавить возможность детектирования объектов нескольких классов одновременно. Т.е., чтобы к одному и тому же изображению применялись несколько различных детекторов и результат работы каждого отображался определенным цветом.
- Изменяя параметры обучения детекторов (тип используемых признаковых
описаний) визуально сравнить их влияние на качество детектирования
на тестовых видео (из директории
videos
). Также применить готовые детекторы лиц из библиотеки OpenCV (директории<opencv_source>/data/haarcascades
и<opencv_source>/data/lbpcascades
). - Решить задачи из списка Дополнительные задачи.