这个例子展示了如何从一个MATLAB函数生成代码,该函数通过使用acfObjectDetector
对象。当您打算从MATLAB函数生成代码时,使用acfObjectDetector
对象时,必须在MATLAB函数之外创建对象。示例说明了如何修改MATLAB中的代码使用ACF目标检测器训练停车标志检测器支持代金宝app码生成。
为了生成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);结束
加载训练数据。
负载(“stopSignsAndCars.mat”)
选择地面真理为停止标志。地面真实数据是图像中已知停车标志位置的集合。
stopSigns = stopSignsAndCars (:, 1:2);
将完整路径添加到图像文件中。
stopSigns。imageFilename = fullfile (toolboxdir (“愿景”),...“visiondata”, stopSigns.imageFilename);
使用trainACFObjectDetector
功能训练ACF检测器。通过设置关闭训练进度输出“详细”为假
.
探测器= trainACFObjectDetector (stopSigns,“NegativeSamplesFactor”,2,“详细”、假);
因为你打算为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')
若要检测图像中的对象,请加载测试图像。
img = imread (“stopSignTest.jpg”);
通过传递加载的图像来调用生成的C-MEX函数img
作为输入。
[bboxes, scores] = detectObjectsUsingACF_mex(img);
显示检测结果,并将物体的边框插入到图像中。
img = insertObjectAnnotation (img,“矩形”bboxes,分数);图imshow (img)
释放用于存储生成的C-MEX文件的系统内存。
清晰的ObjectDetectionFromImages_mex;
引入特征匹配和注册的代码生成|生成代码检测图像上的边缘(MATLAB编码器)