这个例子显示了如何使用建立一个笑脸检测OpenCV的进口商。该检测器估计的面部图像上的微笑的强度。基于所估计的强度,所述检测器从它的数据库中识别一个适当的表情符号,然后放置在笑脸表情符号。
首先导入一个OpenCV的功能到Simulink使用金宝appOpenCV的代码导入向导。该向导将创建一个Simulink的金宝app®库包含子系统和为指定的OpenCV的功能是C主叫块。该子系统然后在预先配置Simulink模型用于接受用于微笑检测面部图像。金宝app您可以从模型中生成C ++代码,然后将其部署在目标硬件上的代码。
您将学习如何:
导入OpenCV的功能到Simulink库。金宝app
使用从生成库块在Simulink模型。金宝app
产生从Simulink模型C ++代码。金宝app
部署在树莓派的硬件模型。
计算机视觉工具箱™的OpenCV接口的Simulink金宝app
计算机视觉工具箱
嵌入式编码®(部署)
要构建OpenCV的库,识别兼容的C ++编译器为您的操作系统,如在编译器使用构建的OpenCV库。通过配置确定编译MEX -setup C ++
命令。欲了解更多信息,请参阅选择C ++编译器。
在这个例子中,一个微笑检测器是通过使用仿真模型实现金宝appsmileDetect.slx
。
在这个模型中,subsystem_slwrap_detectAndDraw
子系统驻留在Smile_Detect_Lib
图书馆。您创建subsystem_slwrap_detectAndDraw
通过使用该子系统OpenCV的进口商。该子系统接受来自面部图像图片从工作区块,并提供这些输出值。
输出端口 | 描述 |
---|---|
出 | 有圆圈的面部图像 |
强度 | 微笑的强度 |
X | x中的圆的中心坐标 |
ÿ | 该圆的中心的y坐标 |
RD | 圆弧半径 |
该MATLAB功能块接受来自输入subsystem_slwrap_detectAndDraw
子系统块。该MATLAB功能块具有一组表情符号图像。在这些图像中的表情符号的微笑强度范围从低到高。从表情符号图像,块识别为所估计的强度和它的面部图像上的地方最合适的表情符号。然后输出被提供给视频查看器块。
的示例文件夹位于MATLAB \工具箱\ SI金宝appMULI金宝appNK \ supportpackages \ simulinkopencv \示例
。每个子文件夹包含所有运行示例所需的支持文件。金宝app
与之前执行这些步骤,确保您的示例文件夹复制到可写文件夹位置,改变当前的工作文件夹例如\ SmileDetector
。您的所有输出文件被保存到这个文件夹。
要启动OpenCV的进口商应用程序,请单击应用在MATLAB®工具条。在欢迎页面上,指定项目名称如Smile_Detector
。确保项目名称不包含任何空格。请点击下一个。
在指定OpenCV库,指定这些文件的位置,然后单击下一个。
项目的根文件夹:指定您的示例文件夹的路径。这个路径是到您保存您的示例文件写入项目文件夹。您的所有输出文件被保存到这个文件夹。
源文件:指定的路径的.cpp
文件位于项目文件夹内为smiledetect.cpp
。
包含文件:指定的路径.HPP
头文件位于您的项目文件夹为内smiledetect.hpp
。
分析你的库中查找功能和类型进行导入。一旦分析完成后,单击下一个。选择detectAndDraw
功能和点击下一个。
从什么导入,选择I / O类型
对于IMG
如输入
,然后单击下一个。
在创建的Simuli金宝appnk库,验证默认值,然后单击下一个。
Si金宝appmulink的库Smile_Detector_Lib
从您的OpenCV的代码中创建到项目的根文件夹。该库包含一个子系统和C来电块。您可以使用这些模块为模型仿真。在该示例中,子系统subsystem_slwrap_detectAndDraw
用来。
要使用生成子系统subsystem_slwrap_detectAndDraw
与Simulink金宝app模型smileDetect.slx
:
在您的MATLAB当前文件夹右键单击模型smileDetect.slx
并点击打开
从上下文菜单中。在模型中,删除现有的subsystem_slwrap_detectAndDraw
然后拖动生成的子系统subsystem_slwrap_detectAndDraw
来自Smile_Detector_Lib
库模型。连接子系统到MATLAB功能块。
双击子系统,并指定这些参数值。
参数 | 值 | 描述 |
---|---|---|
行 | 512 | 行的输出图像中的数 |
列 | 512 | 列的输出图像中的数 |
通道 | 3 | 输出图像中的通道数 |
基本类型 | UINT8 | 底层的OpenCV数据类型垫 |
是图片 | 上 | 是否输入是图像或矩阵 |
请点击应用,然后单击好。
在Simuli金宝appnk的工具条,在模拟选项卡,单击模拟模型。经过模拟完成后,视频查看器块显示在脸上的表情符号的图像。通过表情符号表示微笑的强度。
之前从模型中生成的代码,你必须首先确保你有你的当前文件夹的写权限。
为了生成C ++代码:
打开smileDetect_codegen.slx
从您的MATLAB模型当前文件夹。
要查看模型设置:
在应用在Simulink的工金宝app具条选项卡,选择嵌入式编码。
在C ++代码选项卡中设置下拉列表中,点击C / C ++代码生成设置
打开配置参数对话框,验证这些设置:
在里面代码生成窗格中,在目标选择,语言设定为C ++
。
在里面接口下代码生成,阵列布局在里面数据交换接口类别设置为行主
。
连接生成子系统subsystem_slwrap_detectAndDraw
到MATLAB功能块。
为了生成C ++代码,下C ++代码选项卡,单击生成代码
下拉列表,然后单击建立。模型完成生成代码后,代码生成报表打开。您可以检查生成的代码。构建过程创建一个名为zip文件smileDetect_with_ToOpenCV.zip
在当前的MATLAB工作文件夹。
在部署该模型,树莓派连接到您的计算机。等到PWR在硬件上开始闪烁的LED。
在里面设置下拉列表中,点击硬件实现
打开配置参数对话框,验证这些设置:
设置硬板至树莓派
。该设备供应商设定为ARM兼容
。
在里面代码生成窗格中,在目标选择,语言设定为C ++
。下构建过程,Zip文件名设定为smileDetect_with_ToOpenCV.zip
。下工具链设置中,工具链被指定为GNU GCC树莓派
。
要部署的代码,你的树莓派的硬件:
从生成的zip文件,复制这些文件到您的树莓派硬件。
smiledetect.zip
smileDetect.mk
main.cpp中
在树莓派,去到保存文件的位置。为了产生小精灵
文件,并输入以下命令:
使-f smileDetect.mk
运行树莓派的可执行文件。成功执行后,你看到树莓派的输出与放置在脸部图像上的表情符号。
smileDetect.elf