开始与视频标签
的贴标签机视频应用程序提供了一个简单的方法来标记矩形感兴趣区域(ROI)标签,折线ROI标签,像素ROI标签,以及视频或图像序列中的场景标签。
您可以使用标记数据来验证或训练算法,如图像分类器、对象检测器以及语义和实例分割网络。在选择标签绘图工具来创建ROI标签时,请考虑您的应用程序。有关如何为应用程序选择正确的标签类型和绘图工具的详细信息,请参见ROI标签、子标签和属性.
这个例子让你开始使用应用程序,向你展示如何:
手动标记视频中的图像帧。
自动标签跨图像帧使用自动化算法。
导出标记的地面真实数据。
ROI和场景标签定义
一个ROI标签对应于感兴趣的矩形、折线、像素或多边形区域。这些标签包含两个组件:标签名称(如“cars”)和您创建的区域。
一个现场标签描述场景的性质,如“晴天”。您可以将此标签与框架关联。
加载未标记的数据
以编程方式打开应用程序并加载视频。视频必须是可读的文件格式VideoReader
.
videoLabeler (“visiontraffic.avi”)
浏览视频。点击播放按钮播放整个视频,或使用滑块在帧之间导航。
若要加载具有相应时间戳的图像序列,请选择进口>图像序列.该应用程序支持支金宝app持的所有图像文件格式imread
.要读取其他文件格式,可以创建imageDatastore
并使用ReadFcn
财产。
加载无法读取的自定义数据源VideoReader
或imread
,请参阅使用自定义图像源阅读器进行标记.
创建标签定义
定义你要画的标签。在本例中,直接在应用程序中定义标签。要从MATLAB定义标签®命令行,使用labelDefinitionCreator
.
设置时间间隔
您可以标记整个视频或从视频的一部分开始。在本例中,您在加载的视频中标记了一个5秒的时间范围。在视频下方的文本框中输入这些时间(以秒为单位):
在当前时间框,输入
5
并按输入.在开始时间框,输入
5
滑块在时间范围的开始。在结束时间框,输入
10
.
可选地,要调整时间范围,单击并拖动红色间隔标志。
整个应用程序现在都被设置为专注于这个特定的时间范围。视频只在这个间隔内播放,标签和自动化算法只适用于这个间隔。您可以通过移动标志随时更改间隔。
单击,可将时间范围扩展到整个回放区域放大时间范围.
创建ROI标签
一个ROI标签是一个标签,对应于图像中的感兴趣区域(ROI)。您可以定义这些ROI标签类型。
矩形
-在图像中的物体(如车辆、船只、建筑物)周围绘制二维矩形包围框标签。预计长方体
-在图像中的物体(如车辆、船只、建筑物)周围绘制3d包围框标签。行
—绘制线性roi以标记线路,例如车道边界。像素标签
-绘制像素标记各种类别,如道路或天空,用于语义分割。有关像素标记的详细信息,请参见标记像素进行语义分割.多边形
-在物体周围绘制多边形标签。您可以标记同一个类的不同实例。有关绘制多边形ROI标签(例如和语义分割网络)的更多信息,请参见使用多边形标记对象
有关这些ROI标签定义的详细信息,请参见ROI标签、子标签和属性.
在本例中,您定义了车辆
组用于标记车辆类型,然后创建两个矩形
ROI标签,车
而且卡车
.创建标签后,可以使用显示ROI标签要选择的下拉菜单在徘徊,总是,或从来没有以控制在标记期间ROI标签名称的显示方式。默认情况下,名称将在您悬停在ROI上时显示。
在ROI标签窗格中,单击标签.
创建一个
矩形
标签命名车
.可选地,通过单击预览颜色更改标签颜色。
从
集团
下拉菜单,选择新组
给这个组命名车辆
点击好吧.
的车辆组名出现在ROI标签带有标签的窗格车创建。通过左键单击并向上或向下拖动标签,可以将列表中的标签移动到列表中的不同位置或组。
单击,添加第二个标签标签.命名标签卡车还要确保车辆选中“组”。点击好吧.
用鼠标画矩形车两辆车周围的roi。
创建Sublabels
一个sublabel是一种对应于父ROI标签的ROI标签类型。类中定义的特定标签,每个子标签必须属于或为其子标签ROI标签窗格。例如,在驾驶场景中,车辆标签可能具有用于大灯、车牌或车轮的子标签。有关子标签的详细信息,请参见ROI标签、子标签和属性.
定义大灯的子标签。
在ROI标签窗格的左侧,单击车标签。
点击Sublabel.
创建一个
矩形
sublabel命名头灯
可以选择写一个描述。点击好吧.的头灯子标签出现在ROI标签窗格。子标签嵌套在所选ROI标签下,车,并且与父标签的颜色相同。
您可以在一个标签下添加多个子标签。您还可以拖放子标签以在列表中重新排列它们。右键单击任意标签进行其他编辑。
在ROI标签窗格中,选择头灯sublabel。
在图像帧中,选择车标签。选中后标签变为黄色。您必须选择车标签(父ROI),然后才能向其添加子标签。
画头灯每辆车的子标签。
重复前面的步骤来标记另一辆车的前灯。若要更精确地绘制标签,请使用位于标签窗口右上角的“平移”和“缩放”选项。
子标签只能与矩形或折线ROI标签一起使用,不能有自己的子标签。有关使用子标签的详细信息,请参见使用子标签和属性标记地面真实数据.
显示或隐藏标签和子标签
属性可以显示或隐藏标签视频中的标签或子标签图标。ROI标签窗格。的仅在定义标签或子标签后显示。默认情况下,应用程序显示所有标签和子标签。
要隐藏标签或子标签,单击图标放在标签或子标签名称旁边。应用程序隐藏相应的标签或子标签,并显示图标。
|
|
创建属性
一个ROI属性指定关于ROI标签或子标签的附加信息。例如,在驾驶场景中,属性可能包括车辆的类型或颜色。在海洋场景中,属性可能包括帆船的类型或帆的数量。您可以定义这些类型的ROI属性。
数值
—指定数值标量属性,例如有标签的车辆上的门数或帆船上的帆数。字符串
—指定一个字符串标量属性,例如车辆或船只的颜色。逻辑
-指定一个逻辑上的true或false属性,例如一辆车是否在运动,或者一艘船是否在让路。列表
-指定预定义字符串的下拉列表属性,例如车辆或船只的制造商或型号。
有关这些属性类型的详细信息,请参见ROI标签、子标签和属性.
为车辆类型添加一个属性。
在ROI标签窗格的左侧,选择车标记并单击属性.
在属性名称框,输入
carType
.将属性类型设置为列表
.在列表项节,类型不同的汽车,如
轿车
,掀背车
,运动型多功能车
,马车
,每个都在自己的线上。可以选择为属性提供描述,然后单击好吧.您可以将出现在属性字段旁边的信息图标悬停,以显示添加的描述。选择一个车图像帧中的ROI标签。在属性和子标签窗格中,选择适当的carType该车辆的属性值。
重复上一步以分配carType归于另一辆车。
您还可以向子标签添加属性。属性的属性头灯说明大灯是否亮的子标签。
在ROI标签窗格的左侧,选择头灯子标签和单击属性.
在属性名称框,输入
关
.将属性类型设置为逻辑
.离开默认值设置为空
,可选填写描述,单击好吧.在视频帧中选择一个前照灯。设置适当的关属性值,或将属性值设置为
空
.重复上一步设置关其他车灯的属性。
若要删除某个属性,右键单击ROI标签或子标签,选择要删除的属性。删除属性将从以前创建的所有ROI标签注释中删除属性信息。
创建场景标签
一个现场标签定义整个场景的附加信息。使用场景标签来描述条件,如照明和天气,或事件,如车道变化。
创建应用于图像的场景标签。
在应用程序的左窗格中,选择现场标签选项卡旁边的ROI标签选项卡。
点击定义新的场景标签,而在标签名称框中,输入一个名为
白天
.将标签定义的颜色更改为浅蓝色,以反映场景标签的性质。下颜色参数时,单击颜色预览并选择标准浅蓝色。然后,单击好吧关闭颜色选择窗口。
离开集团参数设置为的默认值
没有一个
并点击好吧.的现场标签窗格显示场景标签定义。点击应用于图像申请
白天
标签到场景。场景标签会出现一个选中标记。要编辑或删除场景标签,右键单击标签并选择其中之一编辑标签或删除标签.
标记基本事实
到目前为止,你只标记了视频中的一帧。要标记其余帧,请选择以下选项之一。
手动标记Ground Truth
当单击右箭头键前进到下一帧时,上一帧的ROI标签不会携带。只有阳光明媚的场景标签应用于每一帧,因为这个标签应用于整个时间范围。
逐帧推进,手动绘制标签和子标签的roi。还要更新这些roi的属性信息。
使用自动化算法标记地面真相
为了加快标记过程,您可以在应用程序中使用自动化算法。您可以定义自己的自动化算法,参见创建自动标记算法而且时序自动化算法,或使用内置的自动化算法。在本例中,使用内置的点跟踪算法标记ground truth。
在本例中,只自动标记车ROI标签。内置的自动化算法不支持子标签和属性自动化。金宝app
选择要自动化的标签。在视频的第一帧,按Ctrl然后单击选择这两个车标签注释。标签用黄色突出显示。
从应用程序工具条中选择选择算法>点跟踪器.该算法使用Kanade-Lucas-Tomasi (KLT)算法在短时间内跟踪一个或多个矩形roi。
(可选)配置自动化设置。例如,确保导入选定的roi被选中,以便车您选择的标签将被导入到自动化会话中。
点击自动化打开一个自动化会话。算法指示显示在右窗格中,所选标签可用于自动化。
点击运行以跟踪所选roi的时间间隔。
检查运行算法的结果。
后来进入现场的车辆没有标签。未标记的车辆没有初始ROI标签,因此算法没有跟踪它们。点击撤销运行.使用滑块找到每辆车第一次出现的帧。画车辆每辆车周围的roi,然后点击运行一次。
逐帧前进,手动移动、调整大小、删除或添加roi,以改进自动化算法的结果。
当您对算法结果满意时,单击接受.或者,如果要丢弃会话期间生成的标签,而是手动标记,请单击取消.的取消按钮只取消算法会话,不取消应用程序会话。
您还可以选择使用子标签和属性信息手动标记其余帧。
为了进一步评估标签,您可以查看标记的基本事实的可视化摘要。从应用程序工具条中选择视图标签摘要.使用这个摘要来比较帧、标签频率和场景条件。详情请参见Ground Truth标签的查看摘要.此摘要不支持子标签或属性。金宝app
出口标签的事实
您可以将标记的基本真理导出到mat文件或MATLAB工作区中的变量。在这两种情况下,标记的基本真理被存储为groundTruth
对象。您可以使用该对象来训练基于深度学习的计算机视觉算法。详情请参见目标检测和语义分割的训练数据.
请注意
如果导出像素数据,像素标签数据和地面真相数据保存在单独的文件中,但在同一个文件夹中。有关使用导出像素标签时的注意事项,请参见标签应用程序如何存储导出像素标签.
在本例中,将标记的ground truth导出到MATLAB工作区。从应用程序工具条中选择出口标签>到工作空间.导出的MATLAB变量为gTruth
.
显示导出文件的属性groundTruth
对象。导出对象中的信息可能与此处显示的信息不同。
gTruth
gTruth = groundTruth with properties: DataSource: [1×1 groundTruthDataSource] LabelDefinitions: [2x6 table] LabelData: [531×3 schedule]
数据源
数据源
是一个groundTruthDataSource
对象,该对象包含图像或视频的路径和时间戳。显示此对象的属性。
gTruth。数据源
来源:matlab\toolbox\vision\visiondata\visiontraffic。avi时间戳:[531×1 duration]
标签定义
LabelDefinitions
包含关于标签定义的信息的表。该表不包含在视频帧上绘制的标签信息。要将标签定义保存在自己的mat文件中,请从应用程序工具条中选择保存>标签定义.然后,您可以通过选择将这些标签定义导入到另一个应用程序会话导入文件.
显示标签定义表。每行包含关于ROI标签定义或场景标签定义的信息。如果导出像素标签数据,则LabelDefinitions
表还包括PixelLabelID
列,其中包含每个像素标签定义的ID号。
gTruth。标签Definitions
ans = 3×6表名称类型LabelColor组描述层次结构 _________ _________ ____________ ___________ ___________ ____________ {' 汽车的矩形}{1×3双}{‘汽车’}{0×0字符}{1×1 struct}{“卡车”}矩形{1×3双}{‘汽车’}{0×0字符}{0×0双}{‘阳光’}场景{1×3双}{‘天气’}{0×0字符}{0×0双}
在LabelDefinitions
,层次结构
列存储关于父ROI标签的子标签和属性定义的信息。
属性的子标签和属性信息车
标签。
gTruth.LabelDefinitions.Hierarchy {1}
ans = struct with fields: numDoors: [1×1 struct] color: [1×1 struct] inMotion: [1×1 struct] carType: [1×1 struct] headlight: [1×1 struct] Type:矩形描述:"
显示有关头灯
sublabel。
gTruth.LabelDefinitions.Hierarchy {1} .headlight
ans = struct with fields:类型:矩形描述:"颜色:[0.5862 0.8276 0.3103]isOn: [1×1 struct]
显示有关carType
属性。
gTruth.LabelDefinitions.Hierarchy {1} .carType
ans = struct with fields: ListItems: {3×1 cell}说明:"
标签数据
LabelData
是一个时间表,包含在整个视频中每个时间戳绘制的ROI标签的信息。时间表每个标签包含一列。
显示时间表的前几行。前几个时间戳表明没有检测到车辆,并且阳光明媚的
场景标签为假
.这些结果是因为视频的这一部分没有被标记。只标注了5 ~ 10秒的时间段。
labelData = gTruth.LabelData;头(labelData)
ans = 8×3时间表时间汽车卡车阳光明媚 __________ ____________ ____________ _____ 5.005秒[1×2 struct][1×0 struct]真正的5.0384秒[1×2 struct][1×0 struct]真正的5.0717秒[1×2 struct][1×0 struct]真正的5.1051秒[1×2 struct][1×0 struct]真正的5.1385秒[1×2 struct][1×0 struct]真正的5.1718秒[1×2 struct][1×0 struct]真正的5.2052秒[1×2 struct][1×0 struct]真正的5.2386秒[1×2 struct][1×0 struct]真的
显示5-10秒间隔内包含标签的前几行时间表。
gTruthInterval = labelData(时间范围(“00:00:05”,“00:00:10”):);头(gTruthInterval)
ans = 8×3时间表时间汽车卡车阳光明媚 __________ ____________ ____________ _____ 5.005秒[1×2 struct][1×0 struct]真正的5.0384秒[1×2 struct][1×0 struct]真正的5.0717秒[1×2 struct][1×0 struct]真正的5.1051秒[1×2 struct][1×0 struct]真正的5.1385秒[1×2 struct][1×0 struct]真正的5.1718秒[1×2 struct][1×0 struct]真正的5.2052秒[1×2 struct][1×0 struct]真正的5.2386秒[1×2 struct][1×0 struct]真的
为每一个车
标签,结构包括边界框的位置和关于它的子标签和属性的信息。
显示车辆在时间范围开始时的边界框位置。您的边界框位置可能与此处显示的位置不同。
只需使用:gTruthInterval (1) . car {1} .Position% [x y宽高],单位为像素
Ans = 1×4单行向量415.8962 82.4737 130.8474 129.3805 Ans = 1×4单行向量235.2182 1.0000 117.0611 55.3500
保存应用会话
从应用程序工具条中选择保存并保存应用程序会话的mat文件。保存的会话包括数据源、标签定义和标记的ground truth。它还包括您的会话首选项,例如应用程序的布局。要更改布局选项,请选择布局.
在会话期间的任何时间,您都可以进行选择新会话开始一个新的会话。您可以选择保存当前会话或取消会话。
应用程序会话MAT-file与您选择时导出的ground truth MAT-file是分开的出口>从文件.为共享已标记的地面真相数据,作为最佳实践,请共享包含groundTruth
对象,而不是应用程序会话mat文件。详情请参见共享和存储标记地面真相数据.
另请参阅
应用程序
对象
labelDefinitionCreator
|groundTruth
|groundTruthDataSource
|vision.labeler.mixin.Temporal
|vision.labeler.AutomationAlgorithm