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

В этом примере показано, как создать детектор улыбки при помощи 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® (для развертывания)

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

Чтобы создать библиотеки 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 и обеспечивает эти выходные значения.

Выходной портОписание
Столкнитесь с изображением с кругом
интенсивностьИнтенсивность улыбки
xx координата центра круга
yy координата центра круга
ул.Радиус круга

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. В Создают Библиотеку Simulink, проверяют значения по умолчанию и нажимают Next.

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

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

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

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

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

    ПараметрЗначениеОписание
    'Строки' 512Количество строк в выходном изображении
    Столбцы512Количество столбцов в выходном изображении
    Каналы3Количество каналов в выходном изображении
    Лежание в основе типаuint8Базовый тип данных OpenCV Mat
    ИзображениеonЯвляется ли введенный изображением или матрицей

    Нажмите Apply, и затем нажмите OK.

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

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

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

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

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

  1. Откройте 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.

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

  3. Чтобы сгенерировать Код С++, под вкладкой C++ Code, нажимают Generate Code выпадающий список, и затем нажимает Build. После того, как модель закончила генерировать код, Отчет Генерации кода открывается. Можно смотреть сгенерированный код. Процесс сборки создает zip-файл под названием smileDetect_with_ToOpenCV.zip в вашем текущем MATLAB рабочая папка.

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

Прежде чем вы развернете модель, соедините 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:

  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

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

|

Похожие темы