在地面实况贴标签机应用程序,您可以从图像和点云数据源标记信号。这些来源包括视频,图像序列,点云序列,Velodyne®PCAP (packet capture)文件和rosbags文件。要加载应用程序本身不支持的数据源,可以创建一个类来加载该数据源到应用程序中。金宝app
该示例演示如何使用预定义的数据源类之一,该类将数据源中的信号加载到地面实况贴标签机应用:vision.labeler.loading.PointCloudSequenceSource
类。应用程序使用这个特定的类从文件夹中加载点云数据(PCD)或多边形(PLY)文件序列。
首先,打开vision.labeler.loading.PointCloudSequenceSource
类。使用为该类描述的属性和方法来帮助您编写自己的自定义类。
编辑vision.labeler.loading.PointCloudSequenceSource
的地面实况贴标签机应用程序识别数据源类只有当这些文件在+视觉/ +贴标签机/ +加载
文件夹,在MATLAB中®搜索路径。
的vision.labeler.loading.PointCloudSequenceSource
类和其他预定义的数据源类存储在此文件夹中。
草根\工具箱\ \视力\ +视觉\ +贴标签机\ +加载
在这条路,
是MATLAB文件夹的根目录。草根
将创建的数据源类保存到此文件夹中。或者,创建你自己的+视觉/ +贴标签机/ +加载
文件夹,将其添加到MATLAB搜索路径中,并将类保存到此文件夹中。
数据源类必须继承vision.labeler.loading.MultiSignalSource
班查看的类定义vision.labeler.loading.PointCloudSequenceSource
类。
classdefPointCloudSequenceSource < vision.labeler.loading.MultiSignalSource
将点云序列信号加载到地面实况贴标签机应用程序,应用程序创建一个类的实例,即PointCloudSequenceSource
对象在应用程序中标记此信号后,当导出标签时,导出的groundTruthMultisignal
对象存储PointCloudSequenceSource
对象在其数据源
财产。
定义数据源类时,请替换PointCloudSequenceSource
使用自定义数据源类的名称。
数据源类必须定义这些抽象的常量属性。
的名字
—指定数据源类型的字符串标量
描述
-描述类的字符串标量
在地面实况贴标签机当你从“添加/删除信号”对话框中加载信号时的名字
字符串作为选项显示在源类型参数。这个图显示了的名字
字符串的vision.labeler.loading.PointCloudSequenceSource
类。
的描述
字符串不出现在对话框中。然而,这两个的名字
和描述
字符串作为只读属性存储在此类的实例中。
下面的代码显示的名字
和财产
字符串的vision.labeler.loading.PointCloudSequenceSource
类。
properties (Constant) Name =“点云序列”描述=“点云序列读取器”结束
在定义数据源类时,定义的名字
和描述
属性值以匹配自定义数据源的名称和说明。您还可以定义特定于加载数据源的任何其他私有属性。源的源特定属性vision.labeler.loading.PointCloudSequenceSource
类没有显示在本示例中,但您可以在类文件中查看它们。
在数据源类中,customizeLoadPanel
方法控制在应用程序的添加/删除信号对话框中加载信号面板的显示面板
对象创建的uipanel
函数。面板包含从数据源加载信号所需的参数和控件。
的加载面板vision.labeler.loading.PointCloudSequenceSource
类。在源类型列表,当您选择点云序列
,该应用程序调用customizeLoadPanel
方法并加载点云序列的面板。
下面的代码显示customizeLoadPanel
方法vision.labeler.loading.PointCloudSequenceSource
类。它使用computePositions
方法计算必须放置文本、按钮和参数等UI组件的位置值。的addUIComponents
方法然后通过添加相应的UI组件来定义面板。有关这些方法的完整实现,请参阅vision.labeler.loading.PointCloudSequenceSource
类。
函数customizeLoadPanel(面板)。面板=面板;computePositions(这个);addUIComponents(这个);结束
在开发此方法或其他数据源方法时,可以使用静态方法loadPanelChecker
预览自定义数据源的“加载”对话框的显示和功能。此方法不需要打开应用程序会话即可使用。例如,使用loadPanelChecker
方法与vision.labeler.loading.PointCloudSequence
类。
vision.labeler.loading.PointCloudSequenceSource.loadPanelChecker
在“添加/删除信号”对话框中,浏览信号后,设置必要的参数,然后单击添加源时,应用程序会连续调用这两个方法。
getLoadPanelData
-将数据输入面板。
loadSource
-将数据加载到应用程序中。
这个图显示了这些方法和添加源按钮加载点云序列信号时使用vision.labeler.loading.PointCloudSequenceSource
类。
定义自定义数据源时,必须定义getLoadPanelData
方法,该方法返回这些输出。
sourceName
—数据源的名称
sourceParams
-一个结构,包含装载数据源所需信息的字段
下面的代码显示getLoadPanelData
方法vision.labeler.loading.PointCloudSequenceSource
类。该方法集sourceName
输入的名字文件夹名称对话框的参数和sourceParams
一个空的结构。如果时间戳参数设置为从工作空间
并且加载了时间戳,然后应用程序用这些时间戳填充这个结构。
函数[sourceName, sourceParams] = getLoadPanelData(this) sourceParams = struct();如果isUIFigureBased(this) sourceName = string(this. folderpathbox . value);其他的sourceName =字符串(this.FolderPathBox.String);结束结束
您还必须定义loadSource
方法。这种方法必须采取sourceName
和sourceParams
从机场回来getLoadPanelData
方法作为输入。这个方法还必须填充这些属性,这些属性存储在应用程序创建的数据源对象的实例中。
SignalName
-数据源中每个信号的字符串标识符
SignalType
-数组vision.labeler.loading.SignalType
定义数据源中每个信号的类型的枚举
时间戳
-数据源中每个信号的时间戳矢量或单元数组
源名称
—数据源的名称
SourceParams
-一个结构,包含装载数据源所需信息的字段
下面的代码显示loadSource
方法vision.labeler.loading.PointCloudSequenceSource
类。这个方法执行这些操作。
检查点云序列有正确的扩展,并保存读取点云所需的信息到fileDatastore
对象
设置时间戳
属性。
如果时间戳是从工作区变量加载的(时间戳=从工作空间
),然后该方法设置时间戳
的时间戳sourceParams
输入。
如果时间戳是从点云序列本身派生的(时间戳=使用默认
),然后该方法设置时间戳
到持续时间
秒向量,每点云一秒。
验证加载的点云序列。
设置SignalName
属性设置为数据源文件夹的名称。
设置SignalType
财产PointCloud
信号类型。
设置源名称
和SourceParams
属性到sourceName
和sourceParams
分别输出。
函数loadSource (sourceName, sourceParams)%加载文件ext = {“.pcd”,“每”};这一点。pcd = fileDatastore (sourceName,“ReadFcn”,@pcread,“文件扩展名”,分机);%填充时间戳如果isempty (this.Timestamp)如果isfield (sourceParams“时间戳”) setTimestamps(这sourceParams.Timestamps);其他的这一点。时间戳={秒(0:1:元素个数(this.Pcds.Files) 1) '};结束其他的如果~ iscell (this.Timestamp)。时间戳= {this.Timestamp};结束结束进口vision.internal.labeler.validation。*checkPointCloudSequenceAndTimestampsAgreement (this.Pcds this.Timestamp {1});%填充信号名称和类型[~, folderName, ~] = fileparts(sourceName);这一点。SignalName = makeValidName(this, string(folderName),“pointcloudSequence_”);这一点。SignalType = vision.labeler.loading.SignalType.PointCloud;这一点。SourceName = SourceName;这一点。SourceParams = SourceParams;结束
必须定义的最后一个必需方法是readFrame
方法。此方法从存储在数据源中的信号中读取帧。每次导航到新帧时,应用程序都会调用这个方法。中特定时间戳的索引时间戳
属性传递给此方法。
下面的代码显示readFrame
方法vision.labeler.loading.PointCloudSequenceSource
类。该方法从点云序列中读取帧pcread
函数。
函数frame = readFrame(this, signalName, index)如果~strcmpi(signalName,this.signalName)帧=[];其他的帧= pcread (this.Pcds.Files{指数});结束结束
您还可以定义任何附加的私有属性,这些属性是特定于加载数据源的。的源特定方法vision.labeler.loading.PointCloudSequenceSource
类没有显示在本示例中,但您可以在类文件中查看它们。
这个例子展示了如何使用vision.labeler.loading.PointCloudSequenceSource
类来帮助您创建自己的自定义类。此表显示了可以用作自己类起点的数据源类的完整列表。
类 | 由类加载的数据源 | 查看类源代码的命令 |
---|---|---|
vision.labeler.loading.VideoSource |
视频文件 |
编辑vision.labeler.loading.VideoSource
|
vision.labeler.loading.ImageSequenceSource |
图像序列的文件夹 |
编辑vision.labeler.loading.ImageSequenceSource
|
vision.labeler.loading.VelodyneLidarSource |
Velodyne数据包捕获(PCAP)文件 |
编辑vision.labeler.loading.VelodyneLidarSource
|
vision.labeler.loading.RosbagSource |
Rosbag文件 |
编辑vision.labeler.loading.RosbagSource
|
vision.labeler.loading.PointCloudSequenceSource |
点云序列文件夹 |
编辑vision.labeler.loading.PointCloudSequenceSource
|
vision.labeler.loading.CustomImageSource |
自定义图像格式 |
编辑vision.labeler.loading.CustomImageSource
|