Цель данной работы - решить задачу детектирования объектов, используя программные средства библиотеки OpenCV. Работа с обученными нейронными сетями.
Основные задачи:
- Скачать модель для детектирования объектов mobilenet-ssd.
- Разработать приложение для детектирования объектов на изоражениях при помощи
нейросети
mobilenet-ssd
. - Реализовать вывод изображения на экран и отрисовку прямоугольника вокруг объектов.
Дополнительные задачи:
- Реализовать запись видео с прямоугольниками вокруг объектов в файл.
- Реализовать функции статистики (сколько объектов было в кадре, сколько времени и т.д.).
-
Скачать обученную сеть mobilenet-ssd.
-
Разработать класс
DnnDetector
(наследника классаDetector
) для решения задачи детектирования объектов.- Реализовать конструктор класса
DnnDetector
, включающий инициализацию необходимых параметров. - Реализовать метод
Detect
классаDnnDetector
для детектирования объектов.
- Реализовать конструктор класса
-
Реализовать отрисовку прямоугольников, ограничивающих детектированный объект.
-
Выполнить дополнительные задачи.
-
в папке
<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
, в котором собраны параметры, перобразования входных изображений, они понаобятся для правильной конвертации вашей картинки. -
Создать рабочую ветку
practice-3
( см. Практика1). -
Объявить класс
DnnDetector
, наследника абстрактного классаDetector
, в файлеdetector.h
. -
В файле
detector.сpp
реализовать конструктор классаDnnDetector
. -
В файле
detector.сpp
реализовать методDnnDetector::Detect
.В вашем случае выходом нейросети
mobilenet-ssd
является тензор (1x1x100x7), при вызове функции reshape(1,100) вы получите двумерную матрицу из 100 строк и 7 столбцов[image_number, classid, score, left, bottom, right, top]
, гдеimage_number
- номер изображения (у нас всегда 0, так как мы подаем одно изображение);classid
- номер класса;score
- вероятность;left, bottom, right, top
- координаты ограничивающих прямоугольников в диапазоне от 0 до 1. Подробный пример работы с моделью moilenet-ssd при помощи OpenCV но на языке Python можно посмотреть по ссылке. -
Создать копию файла
<project_source>/src/practice3.cpp
и назвать ее<project_source>/src/practice3_YOUR_NAME.cpp
. Далее изменять код только в файле<project_source>/src/practice3_YOUR_NAME.cpp
, но не в<project_source>/src/practice3.cpp
. -
В файле
<project_source>/src/practice3_YOUR_NAME.cpp
реализовать детектирование лиц на изображении. Путь к файлу с изображением передается в программу с помощью ключа--image
. Детектор загружается из файла, заданного посредством ключа--detector
. Описание входных и выходных данных для сети можно найти на странице сети mobilenet-ssd и в файлеlist_topologies.yml
. Полный список принимаемых параметров можно посмотреть запустив исполняемый файл с ключом--help
. См. документацию к классу cv::dnn::Net (методыreadNet
,setInput
иforward
) и пространству имен cv:dnn (методblobFromImage
). Также полезным будет посмотреть примеры работы с dnn из официальных семплов OpenCV. -
Реализовать дополнительный функционал: если на вход приложению не был подан путь до изображения, использовать изображение с веб-камеры.