创建类加载自定义地面实况数据源
在地面实况贴标签机应用程序,您可以从图像和点云数据标签信号来源。这些来源包括视频、图像序列,点云序列,调速发电机®数据包捕获(PCAP)文件,rosbags。加载应用程序本身不支持的数据源,您可以创建一个类加载源到应用程序。金宝app
这个例子展示了如何使用一个预先定义的数据源加载的类从数据源到信号地面实况贴标签机应用:vision.labeler.loading.PointCloudSequenceSource
类。应用程序使用这个特定的类加载的点云数据序列(PCD)或多边形(厚度)文件从文件夹中。
首先,打开vision.labeler.loading.PointCloudSequenceSource
类。使用这个类的属性和方法描述,以帮助您编写自己的自定义类。
编辑vision.labeler.loading.PointCloudSequenceSource
自定义类文件夹
的地面实况贴标签机应用程序识别数据源类只有这些文件+视觉/ +贴标签机/ +加载
在MATLAB的文件夹®搜索路径。
的vision.labeler.loading.PointCloudSequenceSource
类和其他类预定义数据来源都存储在这个文件夹。
matlabroot\工具箱\ \视力\ +视觉\ +贴标签机\ +加载
在这条路,
MATLAB的根文件夹。matlabroot
将您创建的数据源类保存到该文件夹。另外,创建你自己的+视觉/ +贴标签机/ +加载
文件夹,将其添加到MATLAB的搜索路径,并保存您的类来此文件夹。
类定义
数据源类必须继承vision.labeler.loading.MultiSignalSource
类。视图的类定义vision.labeler.loading.PointCloudSequenceSource
类。
classdefPointCloudSequenceSource < vision.labeler.loading.MultiSignalSource
当你点云序列信号加载到地面实况贴标签机应用程序,应用程序创建类的实例,也就是说,PointCloudSequenceSource
对象。在app标签这个信号之后,导出标签时,出口groundTruthMultisignal
对象存储PointCloudSequenceSource
对象在其数据源
财产。
当定义数据源类,取代PointCloudSequenceSource
与您的自定义数据源类的名称。
类属性
数据源类必须定义这些抽象的、恒定的属性。
的名字
——一个字符串标量指定数据源的类型描述
——一个字符串标量描述类
在地面实况贴标签机应用程序,当你从添加/删除加载信号信号对话框的名字
作为一个选项出现在字符串源类型参数。这图显示了的名字
字符串的vision.labeler.loading.PointCloudSequenceSource
类。
的描述
没有出现在对话框的字符串。然而,这两个的名字
和描述
字符串作为只读属性存储在这个类的实例。
这个代码显示了的名字
和财产
字符串的vision.labeler.loading.PointCloudSequenceSource
类。
属性=(常数)的名字“点云序列”描述=“读者PointCloud序列”结束
当定义数据源类,定义的名字
和描述
属性值以匹配您的自定义数据源的名称和描述。您还可以定义任何额外的私人特定属性加载您的数据源。数据源特定的属性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(这)sourceParams =结构();如果isUIFigureBased(这)sourceName =字符串(this.FolderPathBox.Value);其他的sourceName =字符串(this.FolderPathBox.String);结束结束
您还必须定义loadSource
方法在您的自定义数据类。这个方法必须采取sourceName
和sourceParams
返回的getLoadPanelData
方法作为输入。这种方法也必须填充这些属性,这是存储在实例的应用程序创建的数据源对象。
SignalName
——为每个数据源中的信号字符串标识符SignalType
——一个数组vision.labeler.loading.SignalType
枚举定义数据源中的每个信号的类型时间戳
——一个向量或单元阵列每个信号的时间戳的数据源SourceName
——数据源的名称SourceParams
——一个包含字段的结构加载数据源所需的信息
这个代码显示了loadSource
方法vision.labeler.loading.PointCloudSequenceSource
类。这个方法执行这些操作。
检查点云序列具有正确的扩展并保存阅读点云到所需信息
fileDatastore
对象。设置
时间戳
数据源对象的属性。如果从工作空间变量(加载时间戳时间戳=
从工作空间
),那么该方法集时间戳
中存储的时间戳sourceParams
输入。如果时间戳是从点云序列本身(时间戳=
使用默认
),那么该方法集时间戳
到一个持续时间
向量的秒,一秒每点云。
验证加载点云序列。
设置
SignalName
属性数据源的名称文件夹。设置
SignalType
财产PointCloud
信号类型。设置
SourceName
和SourceParams
属性的sourceName
和sourceParams
分别输出。
函数loadSource (sourceName, sourceParams)%加载文件ext = {“.pcd”,“每”};这一点。pcd = fileDatastore (sourceName,“ReadFcn”@pcread,“FileExtensions”ext);%填充时间戳如果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(字符串(folderName),这“pointcloudSequence_”);这一点。SignalType = vision.labeler.loading.SignalType.PointCloud;这一点。SourceName = SourceName;这一点。SourceParams = SourceParams;结束
方法阅读框架
最后,您必须定义要求的方法readFrame
方法。该方法从一个信号读取一帧存储在数据源。应用程序调用这个方法每次你导航到一个新的框架。索引中一个特定的时间戳时间戳
属性传递给这个方法。
这个代码显示了readFrame
方法vision.labeler.loading.PointCloudSequenceSource
类。点云的方法读取帧序列通过使用pcread
函数。
函数帧= readFrame (signalName,指数)如果~ 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 |
调速发电机数据包捕获(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
|