主要内容

为加载自定义地面真理数据源创建类

在里面地面真理贴标机应用程序,您可以从图像和点云数据源标记信号。这些来源包括视频,图像序列,点云序列,无力®数据包捕获(PCAP)文件和ROSBAGS。要加载应用程序未自然支持的数据源,您可以创建一个类来将该源加载到应用程序中。金宝app

此示例显示如何使用将信号从数据源加载到的预定义数据源类之一地面真理贴标机应用程序:Vision.Labeler.loading.PointCloudSequenceSource.类。该应用程序使用此特定类从文件夹加载点云数据(PCD)或多边形(PLY)文件的序列。

要开始,打开Vision.Labeler.loading.PointCloudSequenceSource.类。使用此类描述的属性和方法来帮助您编写自己的自定义类。

编辑Vision.Labeler.loading.PointCloudSequenceSource.

自定义类文件夹

地面真理贴标机仅当这些文件处于其中时,应用程序才识别数据源类+ Vision / +标签/ +装载在matlab上的文件夹®搜索路径。

Vision.Labeler.loading.PointCloudSequenceSource.类和其他预定义数据源类存储在此文件夹中。

matlabroot\ Toolbox \ Vision \ Vision \ + Vision \ + Labeler \ + Loading

在这条路上,matlabroot是您的matlab文件夹的根。

保存要为此文件夹创建的数据源类。或者,创建自己的+ Vision / +标签/ +装载文件夹,将其添加到MATLAB搜索路径,然后将类保存到此文件夹中。

班级定义

数据源类必须从中继承Vision.Labeler.Loading.MultiSignAlsource.类。的类定义Vision.Labeler.loading.PointCloudSequenceSource.类。

Classdef.pointcloud sequenceSource 
              

将点云序列信号加载到其中地面真理贴标机应用程序,该应用程序创建类的实例,即,apointcloudsequenceSource.对象。在应用程序中标记这个信号后,当你导出标签时,导出的TroundtruthmultiSignal.对象存储这一点pointcloudsequenceSource.对象在它数据源财产。

定义数据源类时,替换pointcloudsequenceSource.使用自定义数据源类的名称。

类属性

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

  • 姓名—指定数据源类型的字符串标量

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

在里面地面真理贴标机应用程序,当您从添加/删除信号对话框中加载信号时,姓名控件中的选项源类型范围。这个数字显示了姓名绳子Vision.Labeler.loading.PointCloudSequenceSource.类。

添加/删除信号对话框显示源类型参数,该对应于名称字符串

描述字符串不会出现在对话框中。但是,两者都是姓名描述字符串作为只读属性存储在该类的实例中。

此代码显示姓名财产弦圈为Vision.Labeler.loading.PointCloudSequenceSource.类。

属性=(常数)的名字“点云序列”描述=“一个PointCloud序列阅读器”结尾

定义数据源类时,定义姓名描述属性值以匹配自定义数据源的名称和描述。您还可以定义任何附加的私有属性,这些属性是特定于加载数据源的。的源特定属性Vision.Labeler.loading.PointCloudSequenceSource.此示例中未显示类,但您可以在类文件中查看它们。

自定义负载面板的方法

在数据源类中,CustomizeloadPanel.方法控制用于在应用程序的“添加/删除信号”对话框中加载信号的面板的显示。这个面板是一个控制板对象创建的Uipanel.功能。面板包含从数据源加载信号所需的参数和控件。

该图显示了装载面板Vision.Labeler.loading.PointCloudSequenceSource.类。在里面源类型列表,选择时点云序列,该应用程序调用了CustomizeloadPanel.方法,并为点云序列加载面板。

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

此代码显示CustomizeloadPanel.Vision.Labeler.loading.PointCloudSequenceSource.类。它使用了computePositions计算必须放置诸如文本,按钮和参数之类的UI组件的位置值的方法。这果实组分然后,方法通过相应地添加UI组件来定义面板。要完成这些方法的完整实现,请参阅该方法的代码Vision.Labeler.loading.PointCloudSequenceSource.类。

功能CustomizeLoadPanel(此,面板)这个.Panel = Panel;算子(这个);adduicomponents(这个);结尾

在开发此方法或其他数据源方法时,您可以使用静态方法loadpanelchecker.预览自定义数据源的加载对话框的显示和功能。这个方法不需要你打开一个应用程序会话来使用它。例如,使用theloadpanelchecker.方法与Vision.Labeler.Loading.PointCloudsequence.类。

Vision.Labeler.Loading.PointCloudSequencesSource.LoadPanelChecker.

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

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

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

  • loadsource.-加载数据到应用程序。

这个图显示了这些方法和添加来源使用使用时加载点云序列信号时按钮Vision.Labeler.loading.PointCloudSequenceSource.类。

使用getloadPaneldata和LoadSource方法名称添加/删除信号对话框指向“添加源”按钮

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

  • Sourcename.- 数据源的名称

  • SourceParams.- 包含包含加载数据源所需信息的字段的结构

此代码显示getLoadPaneldata.Vision.Labeler.loading.PointCloudSequenceSource.类。这种方法集Sourcename.输入的名称文件夹名称参数和SourceParams.到空的结构。如果是时间戳参数设置为来自工作区并加载时间戳,那么该应用程序将这种结构填充了这些时间戳。

功能[sourcename,sourceparams] = getLoadPaneldata(此)SourceParams = struct();如果isuifigurebased(这个)sourcename = string(this.folderpathbox.value);别的sourcename = string(this.folderpathbox.string);结尾结尾

您还必须定义loadsource.方法。这种方法必须采取Sourcename.SourceParams.返回的getLoadPaneldata.作为输入的方法。此方法还必须填充这些属性,这些属性存储在应用程序创建的数据源对象的实例中。

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

  • SignalType.- 一系列Vision.Labeler.Load.SignalType.枚举定义数据源中的每个信号的类型

  • 时间戳- 数据源中的每个信号的时间戳的矢量或单元格阵列

  • SourceName- 数据源的名称

  • SourceParams.- 包含包含加载数据源所需信息的字段的结构

此代码显示loadsource.Vision.Labeler.loading.PointCloudSequenceSource.类。此方法执行这些操作。

  1. 检查点云序列是否具有正确的扩展,并保存读取点云所需的信息filedatastore.对象。

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

    • 如果时间戳是从工作区变量加载的(时间戳=来自工作区),然后设置方法时间戳到存储在中的时间戳SourceParams.输入。

    • 如果时间戳来自点云序列本身(时间戳=默认情况下使用),然后设置方法时间戳到一个期间秒数矢量,每点云一秒钟。

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

  4. 设定signalName.属性到数据源文件夹的名称。

  5. 设定SignalType.财产到pointcloud.信号类型。

  6. 设定SourceNameSourceParams.属性的Sourcename.SourceParams.输出分别。

功能loadsource(此,sourcename,sourceparams)%加载文件ext = {'.pcd''.pless'};这个.pcds = filedataStore(Sourcename,'readfcn'@pcread,“FileExtensions”ext);%填充时间戳如果isempty(this.timestamp)如果Isfield(SourceParams,'时间戳')SettimeStamps(这是sourceparams.timestamps);别的this.timestamp = {秒(0:1:numel(this.pcds.files)-1)'};结尾别的如果〜Iscell(this.timestamp)这个.Timestamp = {this.timestamp};结尾结尾进口Vision.Internal.Labeler.Validation。*checkpointcloud sequenceandtimestampsagrement(this.pcds,this.timestamp {1});%填充信号名称和类型[〜,foldername,〜] = fileparts(sourcename);this.mignalname = makevalivalname(这个,string(foldername),“pointcloudsequence_”);this.SignalType = vision.labeler.loading.SignalType.PointCloud;这个.sourcename = sourcename;这个.sourceparams = sourceparams;结尾

读取框架的方法

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

此代码显示Readframe.Vision.Labeler.loading.PointCloudSequenceSource.类。该方法通过使用点云序列读取帧p功能。

功能Frame = ReadFrame(此,SignalName,索引)如果~strcmpi(signalName, this.SignalName) frame = [];别的Frame = PCHRADE(this.pcds.files {index});结尾结尾

您还可以定义任何附加的私有属性,这些属性是特定于加载数据源的。特定于源的方法Vision.Labeler.loading.PointCloudSequenceSource.在此示例中未显示类,但您可以在类文件中查看它们。

使用预定义数据源类

此示例显示了如何使用Vision.Labeler.loading.PointCloudSequenceSource.类来帮助您创建自己的自定义类。该表显示了数据源类的完整列表,您可以将其用作自己的类的起始点。

班级 由类加载的数据源 命令查看类源代码
Vision.Labeler.Loading.videoSource. 视频文件
编辑Vision.Labeler.Loading.videoSource.
Vision.Labeler.Loading.imageSquencesource. 图像序列文件夹
编辑Vision.Labeler.Loading.imageSquencesource.
Vision.Labeler.Loading.velodynelidarsource. Velodyne数据包捕获(PCAP)文件
编辑Vision.Labeler.Loading.velodynelidarsource.
Vision.Labeler.Loading.rosbagsource. 罗斯巴格文件
编辑Vision.Labeler.Loading.rosbagsource.
Vision.Labeler.loading.PointCloudSequenceSource. 点云序列文件夹
编辑Vision.Labeler.loading.PointCloudSequenceSource.
Vision.Labeler.Loading.CustomimageSource. 自定义图像格式
编辑Vision.Labeler.Loading.CustomimageSource.

也可以看看

应用

班级

对象