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
:带圆的人脸图像强度
:微笑的强度x
:x
圆心的坐标y
:y
圆心的坐标理查德·道金斯
:圆的半径
该模型已配置为使用仿真软件。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
另请参阅
ToOpenCV|FromOpenCV|仿真软件。ImageType