主要内容

创建类加载自定义地面实况数据源

地面实况贴标签机应用程序,您可以从图像和点云数据标签信号来源。这些来源包括视频、图像序列,点云序列,调速发电机®数据包捕获(PCAP)文件,rosbags。加载应用程序本身不支持的数据源,您可以创建一个类加载源到应用程序。金宝app

这个例子展示了如何使用一个预先定义的数据源加载的类从数据源到信号地面实况贴标签机应用:vision.labeler.loading.PointCloudSequenceSource类。应用程序使用这个特定的类加载的点云数据序列(PCD)或多边形(厚度)文件从文件夹中。

首先,打开vision.labeler.loading.PointCloudSequenceSource类。使用这个类的属性和方法描述,以帮助您编写自己的自定义类。

编辑vision.labeler.loading.PointCloudSequenceSource

自定义类文件夹

地面实况贴标签机应用程序识别数据源类只有这些文件+视觉/ +贴标签机/ +加载在MATLAB的文件夹®搜索路径。

vision.labeler.loading.PointCloudSequenceSource类和其他类预定义数据来源都存储在这个文件夹。

matlabroot\工具箱\ \视力\ +视觉\ +贴标签机\ +加载

在这条路,matlabrootMATLAB的根文件夹。

将您创建的数据源类保存到该文件夹。另外,创建你自己的+视觉/ +贴标签机/ +加载文件夹,将其添加到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方法名称指向对话框选择“点云序列”源类型参数

这个代码显示了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 loadSource方法名称指向“添加源”按钮

当定义一个自定义的数据源,您必须定义getLoadPanelData方法,该方法返回这些输出。

  • sourceName——数据源的名称

  • sourceParams——一个包含字段的结构加载数据源所需的信息

这个代码显示了getLoadPanelData方法vision.labeler.loading.PointCloudSequenceSource类。该方法集sourceName名称中输入文件夹名称参数的对话框sourceParams一个空的结构。如果时间戳参数设置为从工作空间,加载时间戳,然后应用填充这个结构与时间戳。

函数[sourceName, sourceParams] = getLoadPanelData(这)sourceParams =结构();如果isUIFigureBased(这)sourceName =字符串(this.FolderPathBox.Value);其他的sourceName =字符串(this.FolderPathBox.String);结束结束

您还必须定义loadSource方法在您的自定义数据类。这个方法必须采取sourceNamesourceParams返回的getLoadPanelData方法作为输入。这种方法也必须填充这些属性,这是存储在实例的应用程序创建的数据源对象。

  • SignalName——为每个数据源中的信号字符串标识符

  • SignalType——一个数组vision.labeler.loading.SignalType枚举定义数据源中的每个信号的类型

  • 时间戳——一个向量或单元阵列每个信号的时间戳的数据源

  • SourceName——数据源的名称

  • SourceParams——一个包含字段的结构加载数据源所需的信息

这个代码显示了loadSource方法vision.labeler.loading.PointCloudSequenceSource类。这个方法执行这些操作。

  1. 检查点云序列具有正确的扩展并保存阅读点云到所需信息fileDatastore对象。

  2. 设置时间戳数据源对象的属性。

    • 如果从工作空间变量(加载时间戳时间戳=从工作空间),那么该方法集时间戳中存储的时间戳sourceParams输入。

    • 如果时间戳是从点云序列本身(时间戳=使用默认),那么该方法集时间戳到一个持续时间向量的秒,一秒每点云。

  3. 验证加载点云序列。

  4. 设置SignalName属性数据源的名称文件夹。

  5. 设置SignalType财产PointCloud信号类型。

  6. 设置SourceNameSourceParams属性的sourceNamesourceParams分别输出。

函数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

另请参阅

应用程序

对象