主要内容

用ACF对象检测器生成检测图像中的对象的代码

这个例子展示了如何从一个MATLAB函数生成代码,该函数通过使用acfObjectDetector对象。当您打算从MATLAB函数生成代码时,使用acfObjectDetector对象时,必须在MATLAB函数之外创建对象。示例说明了如何修改MATLAB中的代码使用ACF目标检测器训练停车标志检测器支持代金宝app码生成。

设计用于代码生成的MATLAB代码文件

为了生成C代码,MATLAB Coder要求MATLAB代码以函数形式存在。函数的参数不能是MATLAB对象。这个要求提出了从使用的MATLAB函数生成代码的问题acfObjectDetector对象在MATLAB函数之外创建。要解决这个问题,使用toStruct函数来转换acfObjectDetector对象转换为结构,并将结构传递给MATLAB函数。

为了支金宝app持代码生成,此示例重新构造了现有示例的代码(参见使用ACF目标检测器训练停车标志检测器)的函数detectObjectsUsingACF,它作为支持文件出现在当前工作文件夹中。金宝app的detectObjectsUsingACF函数以图像为输入,加载预训练的ACF停止标志检测器。

类型(“detectObjectsUsingACF.m”
函数[bboxes,scores] = detectObjectsUsingACF(InputImage) %从MAT文件中加载一个训练过的检测器%重新创建ACF对象检测器检测器= acfObjectDetector(S.detectorStruct.Classifier,S.detectorStruct.TrainingOptions);end %使用detect函数检测输入图像中的对象[bboxes,scores] = detect(detector,InputImage);结束

创建ACF停止标志检测器的MATLAB外函数

加载训练数据。

负载(“stopSignsAndCars.mat”

选择地面真理为停止标志。地面真实数据是图像中已知停车标志位置的集合。

stopSigns = stopSignsAndCars (:, 1:2);

将完整路径添加到图像文件中。

stopSigns。imageFilename = fullfile (toolboxdir (“愿景”),...“visiondata”, stopSigns.imageFilename);

使用trainACFObjectDetector功能训练ACF检测器。通过设置关闭训练进度输出“详细”为假

探测器= trainACFObjectDetector (stopSigns,“NegativeSamplesFactor”,2,“详细”、假);

生成C-MEX函数

因为你打算为MATLAB函数生成代码detectObjectsUsingACF,转换创建的探测器成一个结构。

detectorStruct = toStruct(探测器);

将训练好的对象结构保存为MAT文件。

保存(“detectorStruct.mat”“detectorStruct”);

生成可以在MATLAB环境中运行的C-MEX代码。使用codegen(MATLAB编码器)命令。

codegendetectObjectsUsingACF报告arg游戏{code .typeof(uint8(0), [inf inf 3])}
代码生成成功:要查看报告,打开('codegen/mex/detectObjectsUsingACF/html/report.mldatx')

使用生成的C-MEX函数检测对象

若要检测图像中的对象,请加载测试图像。

img = imread (“stopSignTest.jpg”);

通过传递加载的图像来调用生成的C-MEX函数img作为输入。

[bboxes, scores] = detectObjectsUsingACF_mex(img);

显示检测结果,并将物体的边框插入到图像中。

img = insertObjectAnnotation (img,“矩形”bboxes,分数);图imshow (img)

图中包含一个轴对象。axis对象包含一个image类型的对象。

清理

释放用于存储生成的C-MEX文件的系统内存。

清晰的ObjectDetectionFromImages_mex

另请参阅

|(MATLAB编码器)