Обнаружение улыбки при помощи кода OpenCV в Simulink

В этом примере показано, как создать детектор улыбки при помощи приложения Средства импорта OpenCV. Детектор оценивает интенсивность улыбки на изображении поверхности или видео. На основе предполагаемой интенсивности детектор идентифицирует соответствующий эмодзи от своей базы данных, и затем помещает эмодзи в улыбчивую поверхность.

Сначала импортируйте функцию OpenCV в Simulink® следующим Установка и Использование Интерфейс Computer Vision Toolbox для OpenCV в Simulink. Приложение создает Библиотеку Simulink, которая содержит подсистему и блок C Caller для заданной функции OpenCV. Подсистема затем используется в предварительно сконфигурированной модели Simulink, чтобы принять лицевое изображение или видео для обнаружения улыбки. Можно сгенерировать Код С++ из модели, и затем развернуть код по целевому компьютеру.

Вы учитесь как:

  • Импортируйте функцию OpenCV в Библиотеку Simulink.

  • Используйте блоки из сгенерированной библиотеки в модели Simulink.

  • Сгенерируйте Код С++ из модели Simulink.

  • Разверните модель на оборудовании Raspberry Pi.

Настройте свой компилятор C++

Чтобы создать библиотеки OpenCV, идентифицируйте совместимый компилятор C++ для своей операционной системы, как описано в Портативной генерации кода C для Функций, Которые Пользуются Библиотекой OpenCV. Сконфигурируйте идентифицированный компилятор при помощи mex -setup c++ команда. Для получения дополнительной информации смотрите, Выбирают C ++ Compiler.

Описание модели

В этом примере детектор улыбки реализован при помощи модели Simulink smileDetect.slx.

В этой модели, subsystem_slwrap_detectAndDraw подсистема находится в Smile_Detect_Lib библиотека. Вы создаете subsystem_slwrap_detectAndDraw подсистема при помощи приложения Средства импорта OpenCV. Подсистема принимает изображение поверхности или видео и обеспечивает эти выходные значения.

  • outImage: Столкнитесь с изображением с кругом

  • intensity: Интенсивность улыбки

  • xX координата центра круга

  • yY координата центра круга

  • rd: Радиус круга

Модель сконфигурирована, чтобы использовать Simulink.ImageType тип данных. outImage от подсистемы имеет Simulink.ImageType тип данных. Блок Image To Matrix преобразует outImage от Simulink.ImageType к числовой матрице, потому что блок MATLAB function работает с числовыми матрицами только.

Блок MATLAB function принимает вход от subsystem_slwrap_detectAndDraw блок подсистемы. Блок MATLAB function имеет набор изображений эмодзи. Интенсивность улыбки эмодзи в этих изображениях располагается от низко до высоко. От изображений эмодзи блок идентифицирует самый соответствующий эмодзи для предполагаемой интенсивности и помещает его в изображение поверхности. Выход затем предоставляется Обнаруженной Поверхности и Улыбающимся блокам Средства просмотра Накладываемого видео.

Скопируйте папку в качестве примера в перезаписываемое местоположение

Получить доступ к пути к папке в качестве примера, в командной строке MATLAB, введите:

     OpenCVSimulinkExamples;

Каждая подпапка содержит все вспомогательные файлы, требуемые запускать пример.

Перед продолжением этих шагов гарантируйте, что вы копируете папку в качестве примера в перезаписываемое местоположение папки и изменяете вашу текущую рабочую папку в ...example\SmileDetector. Все ваши выходные файлы сохранены в эту папку.

Шаг 1: импортируйте функцию OpenCV, чтобы создать библиотеку Simulink

1. Чтобы запустить приложение Средства импорта OpenCV, нажмите Apps на Панели инструментов MATLAB. В Странице приветствия задайте Название проекта как Smile_Detector. Убедитесь, что название проекта не содержит пробелов. Нажать Далее.

2. В Задают Библиотеку OpenCV, задают это расположение файлов, и затем нажимают Далее.

  • Корневая папка проекта: Задайте путь своей папки в качестве примера. Этот путь является путем к перезаписываемой папке проекта, где вы сохранили свои файлы в качестве примера. Все ваши выходные файлы сохранены в эту папку.

  • Исходные файлы: Задайте путь .cpp файл расположен в вашей папке проекта как smiledetect.cpp.

  • Включение файлов: Задайте путь .hpp заголовочный файл расположен в вашей папке проекта как smiledetect.hpp.

3. Анализируйте свою библиотеку, чтобы искать функции и типы для импорта. Если анализ завершен, нажать Далее. Выберите detectAndDraw функционируйте и нажмите Далее.

4. Из того, что импортировать, выберите I/O Type for inImage как Input, и затем нажмите Далее.

5. В Создают Библиотеку Simulink, конфигурируют значения по умолчанию типов OpenCV. По умолчанию Создайте один блок C-вызывающей-стороны для функции OpenCV, выбран, чтобы создать блок C Caller наряду с подсистемой в сгенерированной Библиотеке Simulink.

6. Выберите библиотеку Configure, чтобы использовать Simulink. ImageType сигнализирует, чтобы сконфигурировать сгенерированную подсистему библиотеки, чтобы использовать Simulink.ImageType сигналы.

7. Установите Формат Цвета по умолчанию Simlink. ImageType сигнализируют к RGB, который является форматом цвета по умолчанию изображения.

8. Установите размещение Массивов По умолчанию Simulink. ImageType сигнализируют к Column-major который, размещение массивов по умолчанию изображения.

9. Чтобы создать Библиотеку Simulink, нажать Далее.

Библиотека Simulink Smile_Detector_Lib создается из вашего кода OpenCV в корневую папку проекта. Библиотека содержит подсистему и блок C Caller. Можно использовать любой из этих блоков для симуляции модели. В этом примере, подсистема subsystem_slwrap_detectAndDraw используется.

Шаг 2: используйте сгенерированную подсистему в модели Simulink

Использовать сгенерированную подсистему subsystem_slwrap_detectAndDraw с моделью Simulink smileDetect.slx:

1. В вашей текущей папке MATLAB щелкните правой кнопкой по модели smileDetect.slx и нажмите Open из контекстного меню. Перетащите сгенерированную подсистему от библиотеки до модели. Соедините подсистему с блоком MATLAB function.

2. Дважды кликните подсистему и сконфигурируйте эти значения параметров:

  • 'Строки' : 512

  • Столбцы: 512

  • Каналы: 3

  • Лежание в основе типа: uint8

3. Нажмите Apply, и затем нажмите ОК.

Шаг 3: симулируйте детектор улыбки

На Панели инструментов Simulink, во вкладке Simulation, нажимают на Run, чтобы симулировать модель. После того, как симуляция завершена, блоки Video Viewer отображают обнаруженную поверхность и замену эмодзи на вкладках поверхности. Эмодзи представляет интенсивность улыбки.

Шаг 4: сгенерируйте код С++ из модели детектора улыбки

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

Сгенерировать Код С++:

1. Откройте smileDetect_codegen.slx модель от вашей текущей папки MATLAB.

2. На вкладке Apps на панели инструментов Simulink выберите Embedded Coder. На вкладке C ++ Code выберите список Настроек, затем нажмите C/C ++ Code generation settings, чтобы открыть диалоговое окно Configuration Parameters. Проверьте эти настройки:

  • Под панелью Генерации кода> в Целевом разделе выбора> Язык установлен в C++.

  • Под панелью Генерации кода> в Целевом разделе выбора> норма Языка устанавливается к C++11 (ISO).

  • Под панелью Генерации кода> Интерфейс> в разделе интерфейса Обмена данными> размещение Массивов установлено в Row-major.

3. Если вы хотите сгенерировать производственный Код С++, где изображения представлены с помощью класса OpenCV cv::Mat вместо класса C++ images::datatypes::Image реализованный MathWorks®, под Заменяющей панелью Типа данных> выбирают использование Implement изображений класс Циновки OpenCV.

4. Соедините сгенерированную подсистему subsystem_slwrap_detectAndDraw к блоку MATLAB function.

5. Чтобы сгенерировать Код С++, под вкладкой C ++ Code, нажимают Build кнопка. После того, как модель закончила создавать, сгенерированный код открывается в Представлении кода.

6. Можно смотреть сгенерированный код. Когда модель содержит сигналы Simulink.ImageType тип данных, генератор кода производит дополнительные совместно использованные служебные файлы. Эти файлы объявляют и задают утилиты для построения, разрушают и возвращают информацию о meta атрибутах изображений:

  • image_type.h

  • image_type.cpp

Процесс сборки создает zip-файл под названием smileDetect_with_ToOpenCV.zip в вашем текущем MATLAB рабочая папка.

Разверните детектор улыбки на оборудовании Raspberry Pi

Прежде чем вы развернете модель, соедините Raspberry Pi с вашим компьютером. Ожидайте, пока PWR Не Вовлек оборудование, начинает мигать.

В Настройках выпадающий список нажмите Hardware Implementation открыть диалоговое окно Configuration Parameters и проверить эти настройки:

  • Установите Аппаратную плату на Raspberry Pi. Поставщик Устройства установлен в ARM Compatible.

  • В панели Генерации кода, при Целевом выборе, Язык установлен в C++. При Процессе сборки имя zip-файла определяется к smileDetect_with_ToOpenCV.zip. При настройках Toolchain Набор инструментальных средств задан как GNU GCC Raspberry Pi.

Развернуть код в ваше оборудование Raspberry Pi:

1. Из сгенерированного zip-файла скопируйте эти файлы в свое оборудование Raspberry Pi.

  • smiledetect.zip

  • smileDetect.mk

  • main.cpp

2. В Raspberry Pi перейдите к местоположению, где вы сохранили файлы. Сгенерировать elf файл, введите эту команду:

   make -f smileDetect.mk

3. Запустите исполняемый файл на Raspberry Pi. После успешного выполнения вы видите выход на Raspberry Pi с эмодзи, помещенным в изображение поверхности.

   smileDetect.elf

Смотрите также

| |

Похожие темы