В этом примере показано, как создать детектор улыбки при помощи OpenCV Importer. Детектор оценивает интенсивность улыбки на изображении поверхности. На основе предполагаемой интенсивности детектор идентифицирует соответствующий эмодзи от своей базы данных, и затем помещает эмодзи в улыбчивую поверхность.
Сначала импортируйте функцию OpenCV в Simulink при помощи Мастера Импорта OpenCV Кода. Мастер создает библиотеку Simulink®, которая содержит подсистему и блок C Caller для заданной функции OpenCV. Подсистема затем используется в предварительно сконфигурированной модели Simulink, чтобы принять изображение поверхности для обнаружения улыбки. Можно сгенерировать Код С++ из модели, и затем развернуть код по целевому компьютеру.
Вы учитесь как:
Импортируйте функцию OpenCV в Библиотеку Simulink.
Используйте блоки из сгенерированной библиотеки в модели Simulink.
Сгенерируйте Код С++ из модели Simulink.
Разверните модель на оборудовании Raspberry Pi.
Интерфейс Computer Vision Toolbox™ для OpenCV в Simulink
Computer Vision Toolbox
Embedded Coder® (для развертывания)
Чтобы создать библиотеки OpenCV, идентифицируйте совместимый компилятор C++ для своей операционной системы, как описано в Компиляторе, Используемом, чтобы Создать Библиотеки OpenCV. Сконфигурируйте идентифицированный компилятор при помощи mex -setup c++
команда. Для получения дополнительной информации смотрите, Выбирают C ++ Compiler.
В этом примере детектор улыбки реализован при помощи модели Simulink smileDetect.slx
.
В этой модели, subsystem_slwrap_detectAndDraw
подсистема находится в Smile_Detect_Lib
библиотека. Вы создаете subsystem_slwrap_detectAndDraw
подсистема при помощи OpenCV Importer. Подсистема принимает изображение поверхности от блока Image From Workspace и обеспечивает эти выходные значения.
Выходной порт | Описание |
---|---|
Столкнитесь с изображением с кругом | |
интенсивность | Интенсивность улыбки |
x | x координата центра круга |
y | y координата центра круга |
ул. | Радиус круга |
Блок MATLAB Function принимает вход от subsystem_slwrap_detectAndDraw
блок подсистемы. Блок MATLAB Function имеет набор изображений эмодзи. Интенсивность улыбки эмодзи в этих изображениях располагается от низко до высоко. От изображений эмодзи блок идентифицирует самый соответствующий эмодзи для предполагаемой интенсивности и помещает его в изображение поверхности. Выход затем предоставляется блокам Video Viewer.
Получить доступ к пути к папке в качестве примера, в командной строке MATLAB®, введите:
OpenCVSimulinkExamples;
Перед продолжением этих шагов гарантируйте, что вы копируете папку в качестве примера в перезаписываемое местоположение папки и изменяете вашу текущую рабочую папку в ...example\SmileDetector
. Все ваши выходные файлы сохранены в эту папку.
Чтобы запустить приложение OpenCV Importer, нажмите Apps на Панели инструментов MATLAB. В Странице приветствия задайте Project name как Smile_Detector
. Убедитесь, что название проекта не содержит пробелов. Нажмите Next.
В Задают Библиотеку OpenCV, задают это расположение файлов, и затем нажимают Next.
Project root folder: Задайте путь своей папки в качестве примера. Этот путь является путем к перезаписываемой папке проекта, где вы сохранили свои файлы в качестве примера. Все ваши выходные файлы сохранены в эту папку.
Source files: Задайте путь .cpp
файл расположен в вашей папке проекта как smiledetect.cpp
.
Включение файлов: Задайте путь .hpp
заголовочный файл расположен в вашей папке проекта как smiledetect.hpp
.
Анализируйте свою библиотеку, чтобы искать функции и типы для импорта. Если анализ завершен, нажмите Next. Выберите detectAndDraw
функционируйте и нажмите Next.
Из того, что импортировать, выберите I/O Type
для img
как Input
, и затем нажмите Next.
В Создают Библиотеку Simulink, проверяют значения по умолчанию и нажимают Next.
Библиотека Simulink Smile_Detector_Lib
создается из вашего кода OpenCV в корневую папку проекта. Библиотека содержит подсистему и блок C Caller. Можно использовать любой из этих блоков для симуляции модели. В этом примере, подсистема subsystem_slwrap_detectAndDraw
используется.
Использовать сгенерированную подсистему subsystem_slwrap_detectAndDraw
с моделью Simulink smileDetect.slx
:
В вашем Current Folder MATLAB щелкните правой кнопкой по модели smileDetect.slx
и нажмите Open
из контекстного меню. В модели удалите существующий subsystem_slwrap_detectAndDraw
подсистема и перетаскивает сгенерированную подсистему subsystem_slwrap_detectAndDraw
от Smile_Detector_Lib
библиотека к модели. Соедините подсистему с блоком MATLAB function.
Дважды кликните подсистему и задайте эти значения параметров.
Параметр | Значение | Описание |
---|---|---|
'Строки' | 512 | Количество строк в выходном изображении |
Столбцы | 512 | Количество столбцов в выходном изображении |
Каналы | 3 | Количество каналов в выходном изображении |
Лежание в основе типа | uint8 | Базовый тип данных OpenCV Mat |
Изображение | on | Является ли введенный изображением или матрицей |
Нажмите Apply, и затем нажмите OK.
На Панели инструментов Simulink, во вкладке Simulation, нажатие кнопки, чтобы симулировать модель. После того, как симуляция завершена, блок Video Viewer отображает изображение с эмодзи на поверхности. Эмодзи представляет интенсивность улыбки.
Прежде чем вы сгенерируете код из модели, необходимо сначала гарантировать, что у вас есть разрешение записи в вашей текущей папке.
Сгенерировать Код С++:
Откройте smileDetect_codegen.slx
модель от вашего Current Folder MATLAB.
Рассмотреть настройки модели:
На вкладке Apps на панели инструментов Simulink выберите Embedded Coder.
На вкладке C++ Code в Settings выпадающий список нажмите C/C++ Code generation settings
открыть диалоговое окно Configuration Parameters и проверить эти настройки:
В панели Code Generation, под Target selection, Language установлен в C++
.
В Interface под Code Generation Array layout в категории Data exchange interface установлен в Row-major
.
Соедините сгенерированную подсистему subsystem_slwrap_detectAndDraw
к блоку MATLAB function.
Чтобы сгенерировать Код С++, под вкладкой C++ Code, нажимают Generate Code
выпадающий список, и затем нажимает Build. После того, как модель закончила генерировать код, Отчет Генерации кода открывается. Можно смотреть сгенерированный код. Процесс сборки создает zip-файл под названием smileDetect_with_ToOpenCV.zip
в вашем текущем MATLAB рабочая папка.
Прежде чем вы развернете модель, соедините Raspberry Pi с вашим компьютером. Ожидайте, пока PWR Не Вовлек оборудование, начинает мигать.
В Settings выпадающий список нажмите Hardware Implementation
открыть диалоговое окно Configuration Parameters и проверить эти настройки:
Установите Hardware board на Raspberry Pi
. Device Vendor установлен в ARM Compatible
.
В панели Code Generation, под Target selection, Language установлен в C++
. Под Build process Zip file name установлен в smileDetect_with_ToOpenCV.zip
. Под Toolchain settings Toolchain задан как GNU GCC Raspberry Pi
.
Развернуть код в ваше оборудование Raspberry Pi:
Из сгенерированного zip-файла скопируйте эти файлы в свое оборудование Raspberry Pi.
smiledetect.zip
smileDetect.mk
main.cpp
В Raspberry Pi перейдите к местоположению, где вы сохранили файлы. Сгенерировать elf
файл, введите эту команду:
make -f smileDetect.mk
Запустите исполняемый файл на Raspberry Pi. После успешного выполнения вы видите выход на Raspberry Pi с эмодзи, помещенным в изображение поверхности.
smileDetect.elf