Skip to content

Latest commit

 

History

History
63 lines (43 loc) · 6.39 KB

README_3.md

File metadata and controls

63 lines (43 loc) · 6.39 KB

Практика 3. Детектирование объектов при помощи нейронных сетей

Цели

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

Задачи

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

  1. Скачать модель для детектирования объектов mobilenet-ssd.
  2. Разработать приложение для детектирования объектов на изоражениях при помощи нейросети mobilenet-ssd.
  3. Реализовать вывод изображения на экран и отрисовку прямоугольника вокруг объектов.

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

  1. Реализовать запись видео с прямоугольниками вокруг объектов в файл.
  2. Реализовать функции статистики (сколько объектов было в кадре, сколько времени и т.д.).

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

  1. Скачать обученную сеть mobilenet-ssd.

  2. Разработать класс DnnDetector (наследника класса Detector) для решения задачи детектирования объектов.

    • Реализовать конструктор класса DnnDetector, включающий инициализацию необходимых параметров.
    • Реализовать метод Detect класса DnnDetector для детектирования объектов.
  3. Реализовать отрисовку прямоугольников, ограничивающих детектированный объект.

  4. Выполнить дополнительные задачи.

Детальная инструкция по выполнению работы

  1. в папке <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, в котором собраны параметры, перобразования входных изображений, они понаобятся для правильной конвертации вашей картинки.

  2. Создать рабочую ветку practice-3 ( см. Практика1).

  3. Объявить класс DnnDetector, наследника абстрактного класса Detector, в файле detector.h.

  4. В файле detector.сpp реализовать конструктор класса DnnDetector.

  5. В файле 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 можно посмотреть по ссылке.

  6. Создать копию файла <project_source>/src/practice3.cpp и назвать ее <project_source>/src/practice3_YOUR_NAME.cpp. Далее изменять код только в файле <project_source>/src/practice3_YOUR_NAME.cpp, но не в <project_source>/src/practice3.cpp.

  7. В файле <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.

  8. Реализовать дополнительный функционал: если на вход приложению не был подан путь до изображения, использовать изображение с веб-камеры.