主要内容

自动化标记对象的属性

此示例显示了如何开发车辆检测和距离估计算法,并使用它来自动使用该标签地面真理贴标机应用程序。在此示例中,您将学习如何:

  • 开发计算机视觉算法以检测视频中的车辆,并使用单眼摄像机配置来估计到检测到的车辆的距离。

  • 使用自动凝视算法API创建自动化算法。看创建标签自动化算法有关详细信息。创建的自动化算法可以与地面真实贴标程序应用程序一起使用,以自动标记车辆,以及存储估计距离的属性。

地面真相贴标程序应用程序

良好的地面真理数据对于开发驾驶算法并评估其性能至关重要。然而,创建丰富和多样化的注释驾驶数据需要大量努力。这地面真理贴标机应用程序使此过程有效。您可以将此应用程序用作完全手动标记工具,以标记自动驱动系统的车辆边界框,车道边界和其他景点对象。您还可以手动指定标记对象的属性。但是,手动标签需要大量的时间和资源。作为替代方案,此应用程序提供了一个框架,用于创建算法以扩展和自动化标记过程。您可以使用您创建的算法快速标记整个数据集,自动将标签与属性注释,然后按照更高的更高效,更短的手动验证步骤进行缩写。您还可以编辑自动化步骤的结果,以考虑自动化算法可能错过的具体场景。

此示例描述了如何将车辆检测和距离估计自动化算法插入应用程序的自动化工作流程。这个例子重新使用了ACF车辆检测自动化算法首先检测车辆,然后自动估计从安装在自我车辆上的摄像机的检测到的车辆的距离。然后,算法为每个检测到的车辆创建标签,其中属性指定到车辆的距离。

从单眼相机检测车辆

首先,创建车辆检测算法。这使用单眼相机的视觉感知示例介绍如何创建备用车辆检测器并配置使用校准单眼相机配置来检测车辆边界框。要检测车辆,请在单个视频帧上尝试算法。

%读取来自视频的感兴趣帧。Vidobj = Videoreader('05_highway_lanechange_25s.mp4');Vidobj.Currentime = 0.1;i = ReadFrame(Vidobj);%加载monocamera对象。data = load('fcwdemoMonocamerasensor.mat''传感器');传感器= data.sensor;%加载用于车辆的预制探测器。探测器=车辆levedetectoracf();普通车辆的%宽度在1.5到2.5米之间。车辆Width = [1.5,2.5];%配置探测器要考虑相机的配置%和预期的车辆宽度探测器= MOITIONTECTECTOMONOMERA(探测器,传感器,车辆宽);%检测车辆并显示边界框。[Bboxes,〜] =检测(探测器,i);iout = insertshape(我,'长方形',bboxes);数字;imshow(iout)标题('检测到的车辆'

图包含轴。具有标题检测到的车辆的轴包含类型图像的对象。

估计检测到的车辆的距离

现在已经检测到车辆,从世界坐标中从相机中估计到检测到的车辆的距离。单纸巾提供A.Imagetovehicle.从图像坐标转换到车辆坐标的方法。这可以用于从相机到检测到的车辆沿着接地沿地面估计距离。该示例指定了作为检测到的车辆的中心点的距离,沿着地面直接下方。

%在图像坐标中找到每个边界框的中点。midptsimg = [bboxes(:,1)+ bboxes(:,3)/ 2 bboxes(:,2)+ bboxes(:,4)./ 2];Midptstrworld = ImageTovehicle(传感器,Midptsimg);x = midptstworld(:,1);y = midptstworld(:,2);距离= sqrt(x。^ 2 + y。^ 2);%展示车辆边界盒,并用以米的距离注释它们。distancestr = cellstr([num2str(距离)repmat('M',[长度(距离)1])]);iout = InsertObjectAnnotation(I,'长方形',bboxes,distancestr);imshow(iout)标题('来自相机的车辆距离'

图包含轴。具有来自相机的标题距离的轴包含类型图像的对象。

准备车辆检测和距离估计自动化类

将车辆检测和距离估计自动化类包含到应用程序的自动化工作流程中。看创建标签自动化算法更多细节。从现有的开始ACF车辆检测自动化算法用校准单眼相机进行车辆检测。然后修改算法以执行属性自动化。在该示例中,使用车辆从相机作为检测到的车辆的属性的距离。本节介绍了对现有的ACF车辆检测自动化算法类进行更改的步骤。

步骤1包含定义算法名称和描述的属性,以及使用算法的方向。

%---------------------------------------------------------------%定义算法名称,描述和userDirections。属性(常数)
%名称:算法名称%字符向量指定算法名称。名称='车辆检测和距离估计';
%描述:提供算法的单行描述。描述='检测使用普拉的ACF车辆检测器的车辆,并从相机中计算检测到的车辆的距离。';
%UserDirections:在调用此算法时提供一组显示%的方向。方向%应作为字符%Vector的单元阵列提供,其中单元阵列%的每个元素表示在方向列表中的步骤。UserDirections = {...'将矩形ROI标签定义为标签车辆。“,...”为创建的标签定义,为名称距离定义属性,键入数值和默认值0.',...'运行如果需要'},算法',...'手动检查和修改结果;结尾

步骤2包含支持车辆检测和距离估计自动化所需的自定义属性万博1manbetx

%---------------------------------------------------------------%车辆探测器属性%-----------------------------------------------------------------要素%selectedLabelname选择标签名称%名称选定的标签。通过算法检测的车辆将分配此变量名称。selectedLabelname.
%探测器检测器%净化的车辆探测器,类别%ACFObjectDetector的对象。探测器
%vehiclemodelname车辆探测器型号名称%净化车辆探测器模型的名称。vehiclemodelname ='全视图';
%重叠的重叠阈值%阈值用于消除参考边界框周围的重叠边界框,在0和1之间。%边界框重叠比率分母,'ratiotype'被设置为%'min'重叠= 0.65;
%ScoreThreshold分量得分阈值%阈值用于拒绝具有低检测%分数的检测。ScoreThreshold = 30;
%SecodateTetector Boolean值,以确定配置检测器%布尔值,该值决定使用%Monocamera传感器配置检测器是否配置了检测器。COMETYTECTERTER = TRUE;
%Sensorobj Monocamera传感器%单眼摄像机传感器对象用于配置检测器。%配置的检测器将运行得更快,并且可能会导致更好的检测。sensorobj = [];
%Sensurstr Monocamera传感器变量名称%单目相机传感器对象变量名称用于配置探测器的%。Sensorstr ='';
%车辆WIDTH车辆宽度%车辆宽度用于配置检测器,指定为%[minwidth,maxwidth]描述世界单位中%对象的近似宽度。车辆Width = [1.5 2.5];
%车辆长长的车辆长度%车辆长度用于配置探测器,指定为描述世界单位中%对象的近似长度的%[minlength,maxlength]。车辆力量= [];结尾
%--------------------------------------------------------------%属性自动化属性%--------------------------------------------------------------------------------- .....-工程(常量,访问=私人)
%标志以启用距离属性估计自动化AutomationActTribute = True;
%支万博1manbetx持的距离属性名称。%标签必须具有指定名称的属性。万博1manbetxsupporteddistanceattribname ='距离';结尾
属性(Access = private)
距离distanceattributeName的%实际属性名称;
%标志要检查指定的属性是否有效距离%属性hasvaliddistanceattribute = false;结尾

步骤3初始化属性。

%--------------------------------------------------------------%初始化传感器,探测器和其他相关属性。函数初始化(allobj,〜)
%存储所选标签定义的名称。使用此%名称来标记检测到的车辆。algobj.selectedlabelname = algobj.selectedLabeldefinitions.name;
%用预磨料模型初始化车辆检测器。Algobj.detector =车辆levledetectoracf(allobj.vehiclemodelname);
%初始化参数计算车辆距离如果Algobj.automatedIstanceattribute initializeattributeparams(Algobj);结束
函数InitializeAttributeputeps(Algobj)%初始化与属性自动化相关的属性。
%标签必须具有名称距离和类型%数值的属性。hasattribute = isfield(algobj.validlabeldefinitions,'属性')&& ... isstruct(allobj.validlabeldefefinitions.attributes);如果hasattribute attributenames = fieldnames(algobj.validleabeldefefinitions.Attributes);idx = find(包含(attributenames,algobj.support万博1manbetxeddistanceattribname));如果〜isempty(idx)algobj.distanceattributename = attributenames {idx};algobj.hasvaliddistanceattribute = validatedistancetype(allobj);结束结束
函数tf = validateStanceType(Algobj)%验证属性类型。
tf = isfield(algobj.validlabeldefefinitions.Attributes,Algobj.distanceattributeName)&& ... Isfield(Algobj.validLabeldefefinitions.Attributes.Attributes。'defaultValue'),'defaultvalue')&& ... isnumeric(allobj.validleabeldefinitions.attributes。(allobj..distanceattributeName).defaultValue);结尾

第4步包含更新跑步用于计算检测到的汽车距离并将标签和属性信息写入输出标签的方法。

%---------------------------------------------------------------函数autolabels =运行(allobj,i)
autolabels = [];
%配置探测器。如果allobj.configuredetector &&〜isa(allobj.detector,'acfobjectdetectormonocamera')vehiclesize = [allobj.vehiclewidth; allobj.vehiclelength];Algobj.detector = CodentEreteCtormOnoCamera(Algobj.detector,Algobj.sensorobj,Vehicleize);结尾
%使用初始化的车辆检测器检测车辆。[bboxes,scores] =检测(allobj.detector,i,...'selectstrongest',false);
[SelectedBox,SelectedScore] = selectstrongestbbox(bboxes,scores,...'ratiotype','min','重叠绘图',Algobj.overlapthreshold);
%拒绝检测检测分数低于%的分数克隆。detectionstokeepidx =(被选中> algobj.scorethreshold);selectentbbox = selectendbbox(detectionstokeepidx,:);
如果〜isEmpty(selectedBox)%在由车辆检测器检测到的界限框位置添加自动标签,则具有%所选标签的名称的类型矩形。autolabels.name = algobj.selectedlabelname;autolabels.type = labeltype.rectangle;autolabels.position = selectedBbox;
if(algobj.automatedistanceattribute && algobj.hasvaliddistanceattribute)attribname = algobj.distanceattributeName;%属性值为“数字值”Autolabels.Attributes = ComputeVeHicledistances(Algobj,SelectedBox,Attribname);exhels eyls autolabels = [];结束
函数midpts = helperfindbottommidpoint(bboxes)%查找边界底部边缘的中点。
xbl = bboxes(:,1);YBL = Bboxes(:,2);
XM = XBL + Bboxes(:,3)/ 2;ym = ybl + + bboxes(:,4)./ 2;midpts = [xm ym];
结尾
功能距离=计算车辆距离的计算机距离函数辅助函数。
Midpts = HelperfindbottommidPoint(Bboxes);xy = allobj.sensorobj.imagetovehicle(米特);距离= sqrt(xy(:,1)。^ 2 + xy(:,2)。^ 2);
结尾
函数α= ComputeVehicledistances(Algobj,Bboxes,Attribname)%Compute车辆距离。
numcars = size(bboxes,1);attribs = repmat(structname,0),[numcars,1]);
对于i = 1:numcars utithtval = computedistances(allobj,bboxes(i,:));attribs(i)。(attribname)=距离;结束

使用应用中的车辆检测和距离估计自动化类

车辆距离计算算法的包装版本可用驾驶竞选和解班级。要在应用程序中使用此类:

  • 创建当前文件夹下所需的文件夹结构,然后将自动化类复制到其中。

MKDIR('+ Vision / +贴标程序');COPYFILE(FullFile(Matlabroot,'示例','驾驶','main','车辆),'+ Vision / +贴标程序');
  • 加载单纸巾信息进入工作区。该相机传感器信息适用于在此示例中使用的视频中使用的相机,05_highway_lanechange_25s.mp4。如果加载不同的视频,请使用适合该视频的传感器信息。

LOAD('FCWDEMOMONOCAMERASENSOR.MAT','SENSOR')
  • 打开地下标签应用程序。

地面图书馆05_highway_lanechange_25s.mp4
  • 在里面ROI标签定义窗格在左侧,单击标签。使用名称定义标签车辆和类型长方形。(可选)添加标签描述。然后点击好的

  • 在里面ROI标签定义窗格在左侧,单击属性。使用名称定义属性距离, 类型数值和默认值0.。(可选)添加属性描述。然后点击好的

  • 选择算法>选择算法>刷新列表

  • 选择算法>车辆检测和距离估计。如果没有看到此选项,请确保当前工作文件夹有一个文件夹+ Vision / +贴标程序,文件名为驾驶竞技统治地区在里面。

  • 点击自动化。将打开一个新的选项卡,显示使用该算法的方向。

  • 点击设置,以及打开的对话框中,输入传感器在第一个文本框中。在单击之前,如果需要修改其他参数好的

  • 点击跑步。车辆检测和距离计算算法通过视频进行。请注意,在一些框架中,结果并不令人满意。

  • 运行完成后,使用滑块或箭头键滚动视频以定位算法失败的帧。

  • 通过移动车辆边界盒或通过改变距离值来手动调整结果。您还可以删除边界框和关联的距离值。

  • 在您对整个视频的距离和它们的距离感到满意后,请单击接受

视频上的自动化车辆检测和距离属性标记完成。您现在可以标记其他感兴趣的对象并设置其属性,保存会话,或导出此标签运行的结果。

结论

此示例显示了将车辆检测和距离属性估计自动化算法结合到的步骤地面真理贴标机应用程序。您可以将此概念扩展到其他自定义算法以扩展应用程序的功能。

也可以看看

应用

对象

相关话题