主要内容

自动标注对象的属性

这个例子展示了如何开发一个汽车检测和距离估计算法和使用它来标识使用自动化地面实况贴标签机应用。在这个例子中,您将学习如何:

  • 开发一个计算机视觉算法来检测车辆在一个视频中,并使用单眼相机配置来估计距离检测到车辆。

  • 使用AutomationAlgorithmAPI来创建一个自动化算法。看到为标签创建自动化算法获取详细信息。创建自动化算法可以用于地面真理贴标签机应用自动标签的车辆,以及属性存储估计距离。

地面真理贴标签机应用

良好的地面实况数据是至关重要的发展推动算法和评估他们的表现。然而,创建一套丰富多样的带注释的驾驶数据需要大量的努力。的地面实况贴标签机应用使得这个过程有效。你可以使用这个应用程序作为一个完全手工标记工具标记车辆边界框,车道边界和其他对象感兴趣的一个自动驾驶系统。您也可以手动指定标记的属性对象。然而,手动标签需要大量的时间和资源。作为替代,这个程序提供了一个框架来创建算法扩展和自动标记的过程。您可以使用您创建的算法快速标签的整个数据集,自动标注的标签属性,然后跟随它更高效,更短的手动验证步骤。你也可以编辑的结果自动化一步占了自动化算法具有挑战性的场景,可能会错过。

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

检测车辆的单眼相机

首先,创建一个车辆检测算法。的视觉感知使用单眼相机例子描述了如何创建一个pretrained车辆检测器和配置它来检测车辆边界框使用校准单眼相机配置。来检测车辆,尝试在单个视频帧的算法。

从一个视频%阅读感兴趣的一个框架。vidObj = VideoReader (“05 _highway_lanechange_25s.mp4”);vidObj。CurrentTime = 0.1;I = readFrame (vidObj);%加载monoCamera对象。data =负载(“FCWDemoMonoCameraSensor.mat”,“传感器”);传感器= data.sensor;%为车辆装载pretrained探测器。探测器= vehicleDetectorACF ();%常见车辆的宽度是1.5到2.5米之间。vehicleWidth = [1.5, 2.5];%配置探测器考虑相机的配置%,预计车辆宽度探测器= configureDetectorMonoCamera(探测器、传感器、vehicleWidth);%检测车辆和显示边框。[bboxes ~] =检测(探测器,我);Iout = insertShape(我“矩形”,bboxes);图;imshow (Iout)标题(检测到车辆的)

图包含一个坐标轴对象。坐标轴对象与标题检测到车辆包含一个类型的对象的形象。

估计距离检测到车辆

现在车辆已发现,估计距离从相机检测到车辆在世界坐标。monoCamera提供了一个imageToVehicle方法从图像坐标转换为车辆坐标。这可以用来估计沿着地面的距离从相机检测到车辆。示例指定的中心点的距离检测车辆,直接在地面以下。

%发现图像的每个边界框中点坐标。midPtsImg = [bboxes (: 1) + bboxes (:, 3) / 2 bboxes (:, 2) + bboxes (:, 4)];midPtsWorld = imageToVehicle(传感器、midPtsImg);x = midPtsWorld (: 1);y = midPtsWorld (:, 2);距离=√x。^ 2 + y ^ 2);%显示车辆边界框和注释米距离。distanceStr = cellstr ([num2str(距离)repmat (“米”,长度(距离)1)]);Iout = insertObjectAnnotation(我“矩形”、bboxes distanceStr);imshow (Iout)标题(“车辆从相机的距离”)

图包含一个坐标轴对象。坐标轴对象与标题距离的车辆从相机包含一个类型的对象的形象。

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

车辆检测和距离估计自动化类合并到自动化工作流的应用。为标签创建自动化算法为更多的细节。从现有的ACF自动化车辆检测算法执行车辆检测与校准单眼相机。然后修改自动化算法执行属性。在这个例子中,使用车辆的距离从相机检测到车辆的一个属性。本节描述的步骤修改现有的ACF车辆检测自动化算法类。

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

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %定义算法名称、描述和UserDirections。属性(常数)
%的名字:算法名称%特征向量指定名称的算法。Name = '车辆检测和距离估计;
%描述:为你的算法提供一行描述。描述= '检测车辆使用pretrained ACF车辆检测器和计算距离相机检测到车辆。”;
% UserDirections:提供一组方向显示%时调用这个算法。方向%的单元阵列提供字符%向量,每个元素的单元阵列%代表的方向迈出的一步。UserDirections = {…“定义一个矩形ROI标签,标签的车辆。”,…创建的标签定义,定义一个属性名称距离,数值类型和默认值0。”,……“运行算法”,…如果需要手动检查和修改结果的};结束

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

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %车辆检测器性能% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % SelectedLabelName属性选择的标签名称%选择标签的名字。车辆检测算法将%被分配这个变量的名字。SelectedLabelName
%探测器探测器% Pretrained车辆检测器,% acfObjectDetector类的一个对象。探测器
% VehicleModelName车辆检测器模型名称% pretrained车辆探测器模型的名称。VehicleModelName =“众目睽睽”;
% OverlapThreshold重叠阈值%阈值用于消除重叠边界框%在参考边界框,在0和1之间。%边界框重叠比率的分母,“RatioType”设置为%“Min”OverlapThreshold = 0.65;
分数阈值% % ScoreThreshold分类阈值用于拒绝检测检测%得分较低。ScoreThreshold = 30;
% ConfigureDetector布尔值决定配置探测器%布尔值决定如果探测器使用% monoCamera传感器配置。ConfigureDetector = true;
% SensorObj monoCamera传感器%单眼相机传感器对象用于配置探测器。%配置探测器将跑得更快,可以%导致更好的检测。SensorObj = [];
% SensorStr monoCamera传感器变量名称%单眼相机传感器对象变量名称用于配置%探测器。SensorStr = ";
% VehicleWidth车辆宽度%车辆宽度探测器用于配置,指定为% (minWidth maxWidth] %对象世界的描述近似宽度单位。VehicleWidth = (1.5 - 2.5);
% VehicleLength车辆长度%车辆检测器用于配置,指定为%(最小长度,最大长度)描述近似%对象世界的长度单位。VehicleLength = [];结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %属性自动化性能% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -属性(常数,访问=私人)
%的旗帜,使距离属性评估自动化AutomateDistanceAttribute = true;
%支万博1manbetx持距离属性名称。%的标签必须指定一个属性的名称。万博1manbetxSupportedDistanceAttribName =“距离”;结束
属性(访问=私人)
%实际距离DistanceAttributeName属性名称;
%的旗帜,以检查是否属性指定一个有效的距离%属性HasValidDistanceAttribute = false;结束

步骤3初始化属性。

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %初始化传感器、探测器和其他相关属性。函数初始化(algObj ~)
%存储选中的标签定义的名称。使用此%的名字标签检测到车辆。algObj。选择edLabelName = algObj.SelectedLabelDefinitions.Name;
%初始化车辆检测器pretrained模型。algObj。探测器= vehicleDetectorACF (algObj.VehicleModelName);
%初始化参数计算车辆如果algObj距离。AutomateDistanceAttribute initializeAttributeParams (algObj);结束结束
函数initializeAttributeParams (algObj) %初始化属性与属性相关的自动化。
%的标签必须有一个距离和%数值型属性的名字。hasAttribute = isfield (algObj。ValidLabelDefinitions,“属性”)& &……isstruct (algObj.ValidLabelDefinitions.Attributes);如果hasAttribute attributeNames =字段名(algObj.ValidLabelDefinitions.Attributes);idx =找到(包含(attributeNames algObj.SupportedD万博1manbetxistanceAttribName));如果~ isempty (idx) algObj。距离属性Name = attributeNames{idx}; algObj.HasValidDistanceAttribute = validateDistanceType(algObj); end end end
函数= validateDistanceType特遣部队(algObj) %验证属性类型。
tf = isfield (algObj.ValidLabelDefinitions。属性s, algObj.DistanceAttributeName) && ... isfield(algObj.ValidLabelDefinitions.Attributes.(algObj.DistanceAttributeName), 'DefaultValue') && ... isnumeric(algObj.ValidLabelDefinitions.Attributes.(algObj.DistanceAttributeName).DefaultValue); end

步骤4包含更新的运行方法计算的距离检测到汽车和将标签和属性信息写入标签的输出。

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数autoLabels =运行(algObj,我)
autoLabels = [];
%配置探测器。如果algObj。ConfigureDetector & & ~ isa (algObj.Detector acfObjectDetectorMonoCamera) vehicleSize = [algObj.VehicleWidth; algObj.VehicleLength];algObj。探测器= configureDetectorMonoCamera (algObj。探测器,algObj。SensorObj vehicleSize);结束
%使用初始化车辆检测器检测车辆。[bboxes,分数]= (algObj检测。探测器,我,…“SelectStrongest”,假);
[selectedBbox, selectedScore] = selectStrongestBbox (bboxes,分数,…‘RatioType’,‘敏’,‘OverlapThreshold’, algObj.OverlapThreshold);
以检测得分低于% %拒绝检测ScoreThreshold。detectionsToKeepIdx = (selectedScore > algObj.ScoreThreshold);selectedBbox = selectedBbox (detectionsToKeepIdx:);
如果~ isempty (selectedBbox) %在边界框添加自动标签位置检测到%的车辆检测器,类型的矩形%选中的标签名称。autoLabels。= algObj.SelectedLabelName名称;autoLabels。类型= labelType.Rectangle;autoLabels。位置= selectedBbox;
如果(algObj。自动化距离属性&& algObj.HasValidDistanceAttribute) attribName = algObj.DistanceAttributeName; % Attribute value is of type 'Numeric Value' autoLabels.Attributes = computeVehicleDistances(algObj, selectedBbox, attribName); end else autoLabels = []; end end
函数midPts = helperFindBottomMidpoint (bboxes) %找到边界框的底部边缘的中点。
xBL = bboxes (: 1);yBL = bboxes (:, 2);
xM = xBL + bboxes (:, 3) / 2;yM = yBL + + bboxes (:, 4);midPts = (xM yM);
结束
函数距离= computeDistances (algObj bboxes) % Helper函数来计算车辆的距离。
midPts = helperFindBottomMidpoint (bboxes);xy = algObj.SensorObj.imageToVehicle (midPts);距离=√xy (: 1)。^ 2 + xy (:, 2) ^ 2);
结束
函数的属性= computeVehicleDistances (algObj、bboxes attribName) %计算车辆的距离。
numCars =大小(bboxes, 1);鲜明= repmat (struct (attribName, 0), [numCars 1]);
i = 1: numCars distanceVal = computeDistances (algObj, bboxes(我,:));鲜明(i)。(attribName) = distanceVal;结束结束

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

车辆的距离计算算法的打包的版本是可用的VehicleDetectionAndDistanceEstimation类。使用这个类的应用程序:

  • 当前文件夹下创建所需的文件夹结构,并自动化类复制到它。

mkdir(“+视觉/ +贴标签机”);拷贝文件(fullfile (matlabroot“例子”,“驾驶”,“主要”,“VehicleDetectionAndDistanceEstimation.m”),“+视觉/ +贴标签机”);
  • 加载monoCamera信息到工作区中。这款相机传感器信息适用于使用的摄像头用于视频在这个例子中,05年_highway_lanechange_25s.mp4。如果您加载不同的视频,使用适合的传感器信息,视频。

负载(“FCWDemoMonoCameraSensor。席”、“传感器”)
  • 打开groundTruthLabeler应用程序。

groundTruthLabeler 05 _highway_lanechange_25s.mp4
  • ROI标签定义左边的窗格中,点击标签。定义一个标签的名字车辆和类型矩形。添加一个标签描述(可选)。然后单击好吧

  • ROI标签定义左边的窗格中,点击属性。定义一个属性的名字距离、类型数值和默认值0。添加一个属性描述(可选)。然后单击好吧

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

  • 选择算法>车辆检测和距离估计。如果您没有看到这个选项,确保当前工作目录中有一个文件夹+视觉/ +贴标签机,文件命名VehicleDetectionAndDistanceEstimation.m在里面。

  • 点击自动化。新标签页打开时,显示方向使用算法。

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

  • 点击运行。车辆检测和距离计算算法的进展通过视频。注意,结果并不令人满意的帧。

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

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

  • 一旦你感到满意车辆边界框和他们的距离为整个视频,点击接受

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

结论

这个例子显示的步骤将车辆检测和距离属性估计算法的自动化地面实况贴标签机应用。您可以扩展这个概念到其他自定义算法来扩展应用程序的功能。

另请参阅

应用程序

对象

相关的话题