exponenta event banner

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

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

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

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

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

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

  • Создайте код C++ из модели Simulink.

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

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

Чтобы создать библиотеки OpenCV, определите совместимый компилятор C++ для вашей операционной системы, как описано в документе Portable C Code Generation for Functions That Use OpenCV Library. Настройте указанный компилятор с помощью команды mex -setup c++. Дополнительные сведения см. в разделе Выбор компилятора C++.

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

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

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

Функциональный блок MATLAB ® принимает входные данные от subsystem_slwrap_detectAndDraw блок подсистемы. Функциональный блок MATLAB имеет набор эмодзи. Интенсивность улыбки эмодзи на этих изображениях колеблется от низкой до высокой. По изображениям эмодзи блок идентифицирует наиболее подходящие эмодзи для оцененной интенсивности и помещает их на изображение лица. Затем выходные данные поступают в блоки «Обнаруженное лицо» и «Сменное видео средство просмотра смайликов».

Копирование папки-примера в доступное для записи расположение

Для доступа к пути к папке примера в командной строке MATLAB введите:

     OpenCVSimulinkExamples;

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

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

Шаг 1: Импорт функции OpenCV для создания библиотеки Simulink

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

2. В разделе «Укажите библиотеку OpenCV» укажите эти расположения файлов и нажмите кнопку «Далее».

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

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

  • Включить файлы: Укажите путь к .hpp верхний колонтитул, расположенный в папке проекта как smiledetect.hpp.

3. Проанализируйте библиотеку, чтобы найти функции и типы для импорта. После завершения анализа нажмите кнопку Далее (Next). Выберите detectAndDraw и нажмите кнопку Далее.

4. В поле «Что импортировать» выберите I/O Type для inImage как Inputи нажмите кнопку Далее.

5. В окне «Создание библиотеки Simulink» проверьте значения по умолчанию и нажмите кнопку «Далее».

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

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

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

1. В текущей папке MATLAB щелкните модель правой кнопкой мыши. smileDetect.slx и нажмите Open в контекстном меню. В модели удалите существующую subsystem_slwrap_detectAndDraw и перетащите созданную подсистему subsystem_slwrap_detectAndDraw от Smile_Detector_Lib к модели. Подключите подсистему к функциональному блоку MATLAB.

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

3. Нажмите кнопку Применить, а затем кнопку ОК.

Шаг 3: Моделирование детектора улыбки

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

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

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

Чтобы создать код C++:

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

2. на вкладке «Приложения» на панели инструментов Simulink выберите «Embedded Coder». На вкладке Код C++ в раскрывающемся списке Параметры щелкните C/C++ Code generation settings для открытия диалогового окна «Параметры конфигурации» и проверки следующих настроек:

  • На панели Создание кода (Code Generation) в разделе Целевой выбор (Target selection) для параметра Язык (Language) установлено значение C++.

  • В разделе Интерфейс в разделе Создание кода для формата массива в категории Интерфейс обмена данными установлено значение Row-major.

3. Подключить сгенерированную подсистему subsystem_slwrap_detectAndDraw в функциональный блок MATLAB.

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

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

Перед развертыванием модели подключите Raspberry Pi к компьютеру. Дождитесь появления светодиодного индикатора PWR на аппаратных средствах.

В раскрывающемся списке «Параметры» нажмите Hardware Implementation для открытия диалогового окна «Параметры конфигурации» и проверки следующих настроек:

  • Установите для платы аппаратных средств значение Raspberry Pi. Для поставщика устройства установлено значение ARM Compatible.

  • На панели Создание кода (Code Generation) в разделе Целевой выбор (Target selection) для параметра Язык (Language) установлено значение C++. В процессе построения для имени Zip-файла установлено значение smileDetect_with_ToOpenCV.zip. В разделе «Параметры цепи инструментов» цепь инструментов задается как 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

См. также

|

Связанные темы