主要内容

Simulink中OpenCV代码的微笑检测

方法构建一个微笑检测器OpenCV进口国该探测器可以估算人脸图像或视频中微笑的强度。根据估计的强度,探测器从数据库中识别出合适的表情符号,然后将该表情符号放在微笑的脸上。

首先将OpenCV函数导入到Simulink®中在Simulink中安装和使用OpenCV的计算机视觉工具箱接口.该应用程序创建一个Simulink库,其中包含用于指定OpenCV函数的子系统和C Caller块。然后将该子系统用于预配置的Simulink模型中,以接受面部图像或视频进行微笑检测。您可以从模型生成c++代码,然后将代码部署到目标硬件上。

你可以学习如何:

  • 将OpenCV函数导入Simulink库。

  • 在Simulink模型中使用生成库中的块。

  • 从Simulink模型生成c++代码。

  • 将模型部署到树莓派硬件上。

设置你的c++编译器

要构建OpenCV库,请为您的操作系统识别兼容的c++编译器,如使用OpenCV库的函数的可移植C代码生成.方法配置标识的编译器墨西哥人设置c++命令。有关更多信息,请参见选择c++编译器

模型描述

在本例中,使用Simulink模型实现了一个微笑检测器smileDetect.slx

在这个模型中,subsystem_slwrap_detectAndDraw子系统驻留在Smile_Detect_Lib图书馆。您将创建subsystem_slwrap_detectAndDraw子系统,使用OpenCV进口国子系统接收人脸图像或视频,并提供这些输出值。

  • outImage:带圆的人脸图像

  • 强度:微笑的强度

  • xx圆心的坐标

  • yy圆心的坐标

  • 理查德·道金斯:圆的半径

该模型已配置为使用仿真软件。ImageType数据类型。的outImage从子系统是仿真软件。ImageType数据类型。图像到矩阵块转换outImage仿真软件。ImageType因为MATLAB函数块只作用于数值矩阵。

函数块接受来自subsystem_slwrap_detectAndDraw子系统。MATLAB函数块有一组表情符号图像。这些图片中表情符号的微笑强度从低到高。从表情符号图像中,区块识别出最适合估计强度的表情符号,并将其放在面部图像上。然后将输出提供给检测到的面部和微笑替换视频查看器块。

将示例文件夹复制到可写位置

要访问示例文件夹的路径,在MATLAB命令行中输入:

OpenCVSimulinkExamples;

每个子文件夹包含运行示例所需的所有支持文件。

在继续执行这些步骤之前,请确保将示例文件夹复制到可写文件夹位置,并将当前工作文件夹更改为…\ SmileDetector例子.所有输出文件都保存到此文件夹中。

步骤1:导入OpenCV函数创建Simulink库

1.开始OpenCV进口国应用程序,点击应用程序在MATLAB工具条上。在Welcome页面中,指定项目名称作为Smile_Detector.确保项目名称不包含任何空格。点击下一个

2.在“指定OpenCV库”中指定这些文件的位置,然后单击下一个

  • 项目的根文件夹:指定示例文件夹的路径。此路径是到保存示例文件的可写项目文件夹的路径。所有输出文件都保存到此文件夹中。

  • 源文件:指定文件的路径. cpp位于项目文件夹中的文件为smiledetect.cpp

  • 包含文件:指定文件的路径. hpp位于项目文件夹中的头文件为smiledetect.hpp

3.分析库,找到要导入的函数和类型。分析完成后,单击下一个.选择detectAndDraw功能和点击下一个

4.从“要导入的内容”中选择I / O型inImage作为输入,然后按下一个

5.在“Create Simulink Library”中,配置OpenCV类型的默认值。默认情况下,为OpenCV函数创建一个c调用程序块选择在生成的Simulink库中创建C Caller块和子系统。

6.选择配置库使用Simulink。ImageType信号来配置要使用的生成库子系统仿真软件。ImageType信号。

7.集Simlink的默认颜色格式。ImageType信号RGB,这是图像的默认颜色格式。

8.集Simulink的默认数组布局。ImageType信号列为主它是图像的默认数组布局。

9.单击,创建Simulink库下一个

一个模型库Smile_Detector_Lib从OpenCV代码创建到项目根文件夹。该库包含一个子系统和一个C Caller块。您可以使用这些块中的任何一个进行模型模拟。在本例中,是子系统subsystem_slwrap_detectAndDraw使用。

第二步:在Simulink模型中使用生成的子系统

使用生成的子系统subsystem_slwrap_detectAndDraw用Simulink模型smileDetect.slx

1.在您的MATLAB当前文件夹中,右键单击模型smileDetect.slx并点击开放从上下文菜单。将生成的子系统从库拖到模型中。将子系统连接到MATLAB函数块。

2.双击子系统,配置以下参数值:

  • 480

  • 640

  • 渠道3.

  • 基本类型uint8

3.点击应用,然后按好吧

第三步:模拟微笑探测器

在Simulink工具条上的模拟选项卡上,单击运行模拟模型。模拟完成后,视频查看器块显示检测到的人脸。模特在脸上叠加了一个表情符号。表情符号代表微笑的强度。

步骤4:从Smile Detector模型生成c++代码

在您从模型生成代码之前,您必须首先确保您在当前文件夹中具有写权限。

要生成c++代码:

1.打开smileDetect_codegen.slx模型从您当前的MATLAB文件夹。

2.在应用程序选项卡,选择嵌入式编码器.在c++代码选项卡中,选择设置列表,然后单击C/ c++代码生成设置打开“配置参数”对话框。验证这些设置:

  • 代码生成中的窗格>目标选择节>语言被设置为c++

  • 代码生成中的窗格>目标选择节>语言标准被设置为c++ 11 (ISO)

  • 代码生成面板>接口>在数据交换接口节>阵列布局被设置为

3.如果您想生成生产c++代码,其中图像是使用OpenCV类表示的简历:垫而不是c++类图片::数据类型::形象由MathWorks®实现数据类型替换面板>选择使用OpenCV Mat类实现图像

4.连接生成的子系统subsystem_slwrap_detectAndDraw到MATLAB函数块。

5.以生成c++代码c++代码选项卡上,单击构建按钮。模型完成构建后,生成的代码将在代码视图。

6.您可以检查生成的代码。当模型包含的信号时仿真软件。ImageType数据类型时,代码生成器将生成额外的共享实用程序文件。这些文件声明和定义实用程序来构造、销毁和返回关于图像元属性的信息:

  • image_type.h

  • image_type.cpp

构建过程创建一个名为smileDetect_with_ToOpenCV.zip在您当前的MATLAB工作文件夹中。

在树莓派硬件上部署微笑探测器

在部署模型之前,将树莓派连接到您的计算机。等待硬件上的PWR LED开始闪烁。

设置下拉列表中,单击硬件实现打开“配置参数”对话框,并检查这些设置:

  • 设置硬件板覆盆子π.的设备供应商被设置为手臂兼容

  • 代码生成窗格中,在目标选择语言设置为c++。下构建过程Zip文件的名字被设置为smileDetect_with_ToOpenCV.zip.下工具链设置,工具链被指定为GNU GCC树莓派

将代码部署到树莓派硬件:

1.从生成的zip文件中,将这些文件复制到树莓派硬件中。

  • smiledetect.zip

  • smileDetect.mk

  • main.cpp

2.在树莓派中,转到保存文件的位置。生成一个精灵文件,输入以下命令:

让- f smileDetect.mk

3.在树莓派上运行可执行文件。成功执行后,您将看到树莓派的输出,在面部图像上放置了一个表情符号。

smileDetect.elf

另请参阅

||

相关的话题

Baidu
map