В этом примере показано, как создать детектор улыбки при помощи приложения Средства импорта OpenCV. Детектор оценивает интенсивность улыбки на изображении поверхности или видео. На основе предполагаемой интенсивности детектор идентифицирует соответствующий эмодзи от своей базы данных, и затем помещает эмодзи в улыбчивую поверхность.
Сначала импортируйте функцию OpenCV в Simulink® следующим Установка и Использование Интерфейс Computer Vision Toolbox для OpenCV в Simulink. Приложение создает Библиотеку Simulink, которая содержит подсистему и блок C Caller для заданной функции OpenCV. Подсистема затем используется в предварительно сконфигурированной модели Simulink, чтобы принять лицевое изображение или видео для обнаружения улыбки. Можно сгенерировать Код С++ из модели, и затем развернуть код по целевому компьютеру.
Вы учитесь как:
Импортируйте функцию OpenCV в Библиотеку Simulink.
Используйте блоки из сгенерированной библиотеки в модели Simulink.
Сгенерируйте Код С++ из модели Simulink.
Разверните модель на оборудовании Raspberry Pi.
Чтобы создать библиотеки OpenCV, идентифицируйте совместимый компилятор C++ для своей операционной системы, как описано в Портативной генерации кода C для Функций, Которые Пользуются Библиотекой OpenCV. Сконфигурируйте идентифицированный компилятор при помощи mex -setup c++
команда. Для получения дополнительной информации смотрите, Выбирают C ++ Compiler.
В этом примере детектор улыбки реализован при помощи модели Simulink smileDetect.slx
.
В этой модели, subsystem_slwrap_detectAndDraw
подсистема находится в Smile_Detect_Lib
библиотека. Вы создаете subsystem_slwrap_detectAndDraw
подсистема при помощи приложения Средства импорта OpenCV. Подсистема принимает изображение поверхности или видео и обеспечивает эти выходные значения.
outImage
: Столкнитесь с изображением с кругом
intensity
: Интенсивность улыбки
x
X
координата центра круга
y
Y
координата центра круга
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, нажмите 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
используется.
Использовать сгенерированную подсистему subsystem_slwrap_detectAndDraw
с моделью Simulink smileDetect.slx
:
1. В вашей текущей папке MATLAB щелкните правой кнопкой по модели smileDetect.slx
и нажмите Open из контекстного меню. Перетащите сгенерированную подсистему от библиотеки до модели. Соедините подсистему с блоком MATLAB function.
2. Дважды кликните подсистему и сконфигурируйте эти значения параметров:
'Строки' : 512
Столбцы: 512
Каналы: 3
Лежание в основе типа: uint8
3. Нажмите Apply, и затем нажмите ОК.
На Панели инструментов Simulink, во вкладке Simulation, нажимают на Run, чтобы симулировать модель. После того, как симуляция завершена, блоки Video Viewer отображают обнаруженную поверхность и замену эмодзи на вкладках поверхности. Эмодзи представляет интенсивность улыбки.
Прежде чем вы сгенерируете код из модели, необходимо сначала гарантировать, что у вас есть разрешение записи в вашей текущей папке.
Сгенерировать Код С++:
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 с вашим компьютером. Ожидайте, пока 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
ToOpenCV | FromOpenCV | Simulink.ImageType