主要内容

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

地面真理贴标机应用程序,您可以标记来自图像和点云数据源的信号。这些源包括视频、图像序列、点云序列和Velodyne®数据包捕获(PCAP)文件和数据包。要加载应用程序本机不支持的数据源,可以创建一个类将该源加载到应用程序中。万博1manbetx

此示例演示如何使用预定义的数据源类之一,该类将信号从数据源加载到地面真理贴标机应用程序:thevision.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
              

将点云序列信号加载到地面真理贴标机app,app创建类的一个实例,即点云序列源对象。在应用程序中标记此信号后,当导出标签时,导出的地面多路信号对象存储此点云序列源对象在其数据来源所有物

定义数据源类时,替换点云序列源使用自定义数据源类的名称。

类属性

数据源类必须定义这些抽象的常量属性。

  • 名称-指定数据源类型的字符串标量

  • 描述-描述类的字符串标量

地面真理贴标机应用程序,从“添加/删除信号”对话框加载信号时名称字符串作为选项显示在源类型参数。此图显示名称字符串vision.labeler.loading.PointCloudSequenceSource

“添加/删除信号”对话框,显示与名称字符串相对应的源类型参数

这个描述字符串不会出现在对话框中。然而,两个名称描述字符串作为只读属性存储在此类的实例中。

此代码显示名称所有物字符串vision.labeler.loading.PointCloudSequenceSource

性质(常量)名称=“点云序列”描述=“点云序列读取器”终止

定义数据源类时,请定义名称描述属性值以匹配自定义数据源的名称和说明。您还可以定义特定于加载数据源的任何其他私有属性。源的源特定属性vision.labeler.loading.PointCloudSequenceSource类,但您可以在类文件中查看它们。

方法自定义加载面板

在数据源类中阿托巴奈尔方法控制应用程序的“添加/删除信号”对话框中加载信号面板的显示。此面板是面板通过使用uipanel作用面板包含从数据源加载信号所需的参数和控件。

此图显示了的加载面板vision.labeler.loading.PointCloudSequenceSource在教室里源类型列表,当您选择点云序列,应用程序调用阿托巴奈尔方法并加载点云序列的面板。

“添加/删除信号”对话框,其中customizeLoadPanel方法名称指向源类型参数中的“点云序列”选择

此代码显示阿托巴奈尔方法vision.labeler.loading.PointCloudSequenceSource班它使用计算位置方法计算必须放置文本、按钮和参数等UI组件的位置值。这个添加组件方法然后通过相应地添加UI组件来定义面板。有关这些方法的完整实现,请参阅vision.labeler.loading.PointCloudSequenceSource

作用自定义ADPANEL(此,面板)此。面板=面板;计算位置(本);添加组件(本);终止

在开发此方法或其他数据源方法时,可以使用静态方法装载面板检查器预览自定义数据源的加载对话框的显示和功能。此方法不需要打开应用程序会话即可使用。例如,使用装载面板检查器方法与vision.labeler.loading.PointCloudSequence

vision.labeler.loading.PointCloudSequenceSource.loadPanelChecker

获取加载面板数据和加载数据源的方法

在“添加/删除信号”对话框中,浏览信号后,设置必要的参数,然后单击添加源,应用程序会依次调用这两个方法。

  • getLoadPanelData-获取输入到面板中的数据。

  • 负载源-将数据加载到应用程序中。

此图显示了这些方法与添加源使用加载点云序列信号时的按钮vision.labeler.loading.PointCloudSequenceSource

添加/删除信号对话框,getLoadPanelData和loadSource方法名称指向“添加源”按钮

定义自定义数据源时,必须定义getLoadPanelData方法,该方法返回这些输出。

  • 源名称-数据源的名称

  • 源参数-包含字段的结构,其中包含加载数据源所需的信息

此代码显示getLoadPanelData方法vision.labeler.loading.PointCloudSequenceSource此方法设置源名称输入的名称文件夹名对话框的参数和源参数到一个空的结构。如果时间标记参数设置为从工作空间并加载了时间戳,然后应用程序用这些时间戳填充此结构。

作用[sourceName,sourceParams]=getLoadPanelData(此)sourceParams=struct();如果isUIFigureBased(this)sourceName=string(this.FolderPathBox.Value);其他的sourceName=string(this.FolderPathBox.string);终止终止

您还必须定义负载源方法。此方法必须采用源名称源参数从机场回来getLoadPanelData方法作为输入。此方法还必须填充这些属性,这些属性存储在应用程序创建的数据源对象的实例中。

  • 信号名-数据源中每个信号的字符串标识符

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

  • 时间戳-数据源中每个信号的时间戳向量或单元格数组

  • 源名称-数据源的名称

  • 源参数-包含字段的结构,其中包含加载数据源所需的信息

此代码显示负载源方法vision.labeler.loading.PointCloudSequenceSource此方法执行这些操作。

  1. 检查点云序列是否具有正确的扩展名,并将读取点云所需的信息保存到文件数据存储对象

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

    • 如果时间戳是从工作区变量加载的(时间标记=从工作区),然后该方法设置时间戳到存储在中的时间戳源参数输入

    • 如果时间戳是从点云序列本身派生的(时间标记=使用默认值),然后该方法设置时间戳期间秒向量,每个点云一秒。

  3. 验证加载的点云序列。

  4. 设定信号名属性设置为数据源文件夹的名称。

  5. 设定信号类型财产归点云信号类型。

  6. 设定源名称源参数属性到源名称源参数分别是产出。

作用loadSource(此、sourceName、sourceParams)%加载文件分机={“.pcd”,“.ply”}; this.Pcds=fileDatastore(sourceName,“ReadFcn”,@pcread,“文件扩展名”,分机);%填充时间戳如果isempty(此时间戳)如果isfield(源参数,“时间戳”)setTimestamps(这是sourceParams.Timestamps);其他的this.Timestamp={seconds(0:1:numel(this.Pcds.Files)-1)};终止其他的如果~iscell(this.Timestamp)this.Timestamp={this.Timestamp};终止终止进口vision.internal.labeler.validation*CheckpointCloudSequenceandTimestamsAgreement(this.Pcds,this.Timestamp{1});%填充信号名称和类型[~,folderName,~]=fileparts(sourceName);this.SignalName=makeValidName(this,string(folderName),“点云序列”); this.SignalType=vision.labeler.loading.SignalType.PointCloud;this.SourceName=SourceName;this.SourceParams=SourceParams;终止

读取帧的方法

您必须定义的最后一个必需方法是读框方法此方法从数据源中存储的信号中读取帧。每次导航到新帧时,应用程序都会调用此方法。中特定时间戳的索引时间戳属性传递给此方法。

此代码显示读框方法vision.labeler.loading.PointCloudSequenceSource该方法使用pcread作用

作用frame=readFrame(此、信号名、索引)如果~strcmpi(signalName,this.signalName)帧=[];其他的frame=pcread(this.Pcds.Files{index});终止终止

您还可以定义特定于加载数据源的任何其他私有属性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

另见

应用程序

班级

物体