在Ground Truth Labeler应用中,可以对来自图像和点云数据源的信号进行标记。这些数据源包括视频、图像序列、点云序列、Velodyne 数据包捕获、视频、图像和点云数据。
(PCAP)文件和rosbags。要加载应用程序不原生支持的数据源,可以创建一个类来将该源加载到应用程序中。
此示例展示了如何使用预定义的数据源类之一,将数据源的信号加载到Ground Truth Labeler应用程序中:vision.labeleler.loading.PointCloudSequenceSource类。该应用程序使用这个特定的类以从文件夹中加载点云数据 (PCD) 或多边形 (PLY) 文件的序列。
要开始使用,请打开 vision.labeleler.loading.PointCloudSequenceSource 类。使用该类描述的属性和方法来帮助编写自己的自定义类。

 edit vision.labeler.loading.PointCloudSequenceSource

自定义类文件夹
Ground Truth Labeler应用程序仅在这些文件处于+vision/的情况下才会识别数据源类。
MATLAB搜索路径上的+labeler/+loading文件夹。
vision.labeler.loading.PointCloudSequenceSource类和其他预定义的数据源类都存储在这个文件夹中。

 matlabroot/toolbox/vision/vision+vision/+labeler/+loading

在这个路径中,matlabroot是MATLAB文件夹的根。
将创建的数据源类保存到这个文件夹中。或者,创建自己的+vision/+labeler/+loading文件夹,将其添加到MATLAB搜索路径,并将类保存到这个文件夹中。类别定义
数据源类必须继承自vision.labeleler.loading.MultiSignalSource类。查看vision.labeleler.loading.PointCloudSequenceSource 类的类定义。

 classdef PointCloudSequenceSource < vision.labeleler.loading.MultiSignalSource

当把一个点云序列信号加载到Ground Truth Labeler应用中时,应用会创建一个类的实例,即PointCloudSequenceSource对象。在将此信号标记在app,当导出标签时,导出的groundTruthMultisignal对象会存储这个PointCloudSequenceSource对象的DataSource属性中。
在定义的数据源类时,用自定义数据源类的名称来代替PointCloudSequenceSource。类属性
数据源类必须定义这些抽象的常量属性。
- 名称 - 一个字符串标量,指定数据源的类型。
- 描述 - 描述该类的一个字符串标量。
在Ground Truth Labeler应用中,当从 "添加/删除信号 "对话框中加载信号时,Name字符串会作为一个选项出现在Source Type参数中。本图显示了ision.labeleler.loading.PointCloudSequenceSource类的Name字符串。

描述字符串不会出现在对话框中。但是,名称和 描述字符串在这个类的实例中被存储为只读属性。
这段代码显示了类的名称和属性字符串vision.labeleler.loading.PointCloudSequenceSource类。

 properties (Constant)Name = "Point Cloud Sequence"  Description = "A PointCloud sequence reader"end

在定义数据源类时,定义名称和描述属性值以匹配自定义数据源的名称和描述。还可以定义任何特定于加载数据源的附加私有属性。vision.labeleler.loading.PointCloudSequenceSource 类的特定数据源属性在本示例中没有显示,但可以在类文件中查看它们。
自定义加载面板的方法
在数据源类中,customizeLoadPanel方法控制了应用程序的 "添加/删除信号 "对话框中加载信号的面板的显示。这个面板是使用uipanel函数创建的Panel对象。该面板包含从数据源加载信号所需的参数和控件。
本图显示了vision.labeleler.loading.PointCloudSequenceSource类的加载面板。在 "源类型 "列表中,当选择点云序列时,应用程序会调用customizeLoadPanel方法,并加载到 点云序列的面板。

这段代码显示了vision.labeleler.loading.PointCloudSequenceSource类的customizeLoadPanel方法。该方法使用uicontrol函数来定义面板中的文本、按钮和参数。

 function customizeLoadPanel(this, panel) this.Panel = panel;computePositions(this);this.FolderPathText = uicontrol('Parent', this.Panel,... 'Style', 'text',...'String', 'Folder Name: ',... 'Position', this.FolderPathTextPos,... 'HorizontalAlignment', 'left',...'Tag', 'fileText');this.FolderPathBox = uicontrol('Parent', this.Panel,... 'Style', 'edit',...'String', '',...'Position', this.FolderPathBoxPos,...'Tag', 'fileEditBox');this.FolderTextBox = uicontrol('Parent', this.Panel,... 'Style', 'Text',...'String', 'Only PCD/PLY files are supported.',... 'Position', this.FolderTextPos,...'Tag', 'fileText');this.FolderBrowseButton = uicontrol('Parent', this.Panel,...'Style', 'togglebutton',...'String', 'Browse',...'Position', this.FolderBrowseButtonPos,... 'Callback', @this.browseButtonCallback,... 'Tag', 'browseBtn');this.TimeStampsText = uicontrol('Parent', this.Panel,... 'Style', 'text',...'String', 'Timestamps: ',... 'Position', this.TimeStampsTxtPos,... 'HorizontalAlignment', 'left',... 'Tag', 'timeStampTxt');this.TimeStampsDropDown = uicontrol('Parent', this.Panel,...'Style', 'popupmenu',...'String', ["Use Default", "From Workspace"],...  'Position', this.TimeStampsDropDownPos,... 'Callback', @this.timeStampsDropDownCallback,... 'Tag', 'timeStampSourceSelectList');this.TimeStampsNote = uicontrol('Parent', this.Panel,... 'Style', 'text',...'String', 'Default timestamps = (0:numPointClouds-1) s',... 'Position', this.TimeStampsNotePos,... 'HorizontalAlignment', 'left',...'Tag', 'timeStampNote');end

在开发该方法或其他数据源方法时,可以使用静态方法loadPanelChecker来预览自定义数据源的加载对话框的显示和功能。这个方法不需要打开一个应用程序会话来使用它。例如,将loadPanelChecker方法与vision.labeleler.loading.PointCloudSequence类一起使用。
vision.labeleler.loading.PointCloudSequenceSource.loadPanelChecker。

获取负载面板数据和负载数据源的方法
在 "添加/删除信号 "对话框中,浏览一个信号,设置必要的参数,并点击添加信号源后,应用程序会相继调用这两个方法。
- getLoadPanelData--获取输入面板的数据。
- loadSource--将数据加载到app中。
本图显示了这些方法与添加源头按钮之间的关系,当通过加载点云序列信号时,通过 vision.labeleler.loading.PointCloudSequenceSource类。

当定义一个自定义的数据源时,必须定义getLoadPanelData方法,它将返回这些输出。
- sourceName - 数据源的名称
- sourceParams - 一个包含加载数据源所需信息的字段的结构。
这段代码显示的是vision.labeleler.load.PointCloudSequenceSource类。该方法将sourceName设置为在对话框的文件夹名称参数中输入的名称,将sourceParams设置为一个空结构。如果将Timestamps参数设置为From Workspace并加载了时间戳,那么
应用程序用这些时间戳填充这个结构。

 function [sourceName, sourceParams] = getLoadPanelData(this);
sourceName = string(this.FolderPathBox.String);
sourceParams = struct();end

还必须在自定义数据类中定义loadSource方法。该方法必须将从 getLoadPanelData 方法返回的 sourceName 和 sourceParams 作为输入。该方法还必须填充这些属性,这些属性存储在应用程序创建的数据源对象实例中。
- SignalName - 数据源中每个信号的字符串标识符。
- SignalType - vision.labeleler.loading.SignalType枚举的数组,定义了数据源中每个信号的类型。
- 时间戳 - 数据源中每个信号的时间戳的向量或单元格阵列
- SourceName - 数据源的名称
- SourceParams - 一个包含加载数据源所需信息的字段的结构。
这段代码显示了vision.labeleler.loading.PointCloudSequenceSource类的loadSource方法。该方法执行这些操作。
1 检查点云序列的扩展名是否正确,并将读取点云所需的信息保存到fileDatastore对象中。
2 设置数据源对象的时间戳属性。
- 如果时间戳是从工作区变量中加载的(Timestamps = From workpace),那么该方法将Timestamp设置为存储在sourceParams输入中的时间戳。
- 如果时间戳是从点云序列本身导出的(Timestamps = Use Default),那么该方法将Timestamp设置为秒的持续时间向量,有一个每个点云的秒数。
3 验证加载的点云序列。
4 将SignalName属性设置为数据源文件夹的名称。
5 将SignalType属性设置为点云信号类型。
6 将 SourceName 和 SourceParams 属性设置为 SourceName 和 SourceParams。
分别为:

 function loadSource(this, sourceName, sourceParams)  % Load fileext = {'.pcd', '.ply'};this.Pcds = fileDatastore(sourceName,'ReadFcn', @pcread, 'FileExtensions', ext);  % Populate timestamps  if isempty(this.Timestamp)if isfield(sourceParams, 'Timestamps')
setTimestamps(this, sourceParams.Timestamps);
else
this.Timestamp = {seconds(0:1:numel(this.Pcds.Files)-1)'};
end
else
if ~iscell(this.Timestamp) this.Timestamp = {this.Timestamp};
end
end
import vision.internal.labeler.validation.* checkPointCloudSequenceAndTimestampsAgreement(this.Pcds,this.Timestamp{1});
% Populate signal names and types
[~, folderName, ~] = fileparts(sourceName);
this.SignalName = makeValidName(this, string(folderName), "pointcloudSequence_"); this.SignalType = vision.labeler.loading.SignalType.PointCloud;
this.SourceName = sourceName; this.SourceParams = sourceParams;
end

读取帧的方法

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

这段代码显示了 vision.labeleler.loading.PointCloudSequenceSource 类的 readFrame 方法。该方法通过使用pcread函数从点云序列中读取帧。

function frame = readFrame(this, signalName, index)
if ~strcmpi(signalName, this.SignalName)
frame = [];
else
frame = pcread(this.Pcds.Files{index});
end
end

还可以定义任何特定于加载数据源的附加私有属性。vision.labeleler.loading.PointCloudSequenceSource类的特定源方法在本例中没有显示,但您可以在类文件中查看它们。

使用预定义的数据源类

这个例子展示了如何使用vision.labeleler.loading.PointCloudSequenceSource类来帮助创建自己的自定义类。这个表格显示了完整的数据源类列表,可以将其作为您自己的类的起点。

Class Data Source
Loaded by Class
Command to View
Class Source Code
vision.labeler.loading.V
ideoSource
Video file edit vision.labeler.loading.VideoSource
vision.labeler.loading.I
mageSequenceSource
Image sequence folder edit vision.labeler.loading.ImageSequenceSource
vision.labeler.loading.V
elodyneLidarSource
Velodyne packet capture (PCAP) file edit vision.labeler.loading.VelodyneLidarSource
vision.labeler.loading.R
osbagSource
Rosbag file edit vision.labeler.loading.RosbagSource
vision.labeler.loading.P ointCloudSequenceSource Point cloud sequence folder edit vision.labeler.loading.PointCloudSequenceSource
vision.labeler.loading.C
ustomImageSource
Custom image format edit vision.labeler.loading.CustomImageSource

欢迎点赞,关注不迷路!

matlab 定义string_MATLAB开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...相关推荐

  1. 眼图matlab仿真_MATLAB开发自动驾驶第二十课-自动驾驶场景设计器中的预建驾驶场景...

    自动驾驶场景设计应用提供了一个代表常见驾驶动作的预建场景库.该应用还包括代表欧洲新车评估计划(Euro NCAP)测试协议的场景,以及3D仿真环境中使用的预建场景的3D版本. 选择一个预建场景 要开始 ...

  2. matlab simulink_运用MATLAB和Simulink开发自动驾驶控制系统

    来自专辑< MATLAB&SIMULINK > 本文主要是mathswork在adas和自动驾驶开发方面的应用 好书推荐:<推荐理由:本书全面的讲述了驾驶员辅助系统的重要知识 ...

  3. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...

    Ground Truth Labeler应用可以同时标注多个图像或激光雷达点云信号.当播放信号或在帧之间导航时,可以控制那个通过改变信号显示的帧率来显示每个信号的帧数. 信号帧 所标注的信号是由帧组成 ...

  4. Android开发笔记(六十四)网页加载与JS调用

    内置浏览器 网页视图WebView 如果一个网站已经有现成的网页及业务逻辑,那么使用WebView将其内嵌到app中,省去了app重画页面与http通信的事情,无疑是更经济的做法.WebView就是A ...

  5. 只用CPU开发自动驾驶轮船,他们居然做到了

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 有件事情一直令我感到好奇: 都2021年了,现在有自动驾驶船在海上行驶吗? 带着这个问题,我打开谷歌,输入"Autonomous ...

  6. Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别

    Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 目录 车牌图像数据集 视频动态演示 核心代码 相关文章 Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 Matl ...

  7. 听见丨前谷歌无人车负责人联手大众和现代 开发自动驾驶 自动驾驶技术研发公司AImotive获3800万美元C轮融资

    Canalys:2018年智能音箱全球出货量将达5630万台 据新浪科技报道,Canalys今天发布了一份新的报告,预测2018年将是普及智能音箱的"决定性一年",相比全年出货量刚 ...

  8. 专利申请显示:苹果正在开发自动驾驶汽车无线充电技术

    [TechWeb]7月12日消息,据国外媒体报道,当地时间周四发布的一份专利申请显示,苹果正在开发一种用于自动驾驶汽车的无线充电系统 ,这可能暗示了苹果汽车的宏伟抱负. 苹果帮助iPhone进行无线充 ...

  9. 中国5G进入第二阶段场景测试;苹果瑞士建秘密实验室开发自动驾驶 | IoT黑板报...

    三星推出Connected Home路由器 @cnBeta 三星今天发布一款Wi-Fi路由器Connected Home.这种小型Wi-Fi路由器也作为SmartThings中枢,让用户可以更好地控制 ...

最新文章

  1. 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?
  2. Java面试笔试题大汇总三(最全+详细答案)
  3. 轻轻松松教你写日志-超级简单
  4. 同事就是同事,职场没有兄弟姐妹
  5. CodeForces - 225C. Barcode(DP)
  6. dapperpoco mysql_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
  7. ios 权限提示语_iOS工作室都在用按键v1.6.1(体验版)
  8. 腾讯x5加载本地html乱码,腾讯X5内核播放器遇到的问题
  9. 湖畔大学官微改名为“湖畔创研中心”
  10. 95-130-342-源码-source-kafka相关-AbstractPartitionDiscoverer
  11. dmol3给定关键字不在字典中_Materials Studio自学系列——软件安装常见问题及解决方法...
  12. 【回环检测】如何理解loopClosing中的连续性检测
  13. IDEA 和 Eclipse 使用对比
  14. php 正则预搜索?=
  15. 计算机使用鼠标的课件,鼠标操作ppt
  16. word文档中标题跳到表格的下方-解决方法
  17. Binomial Showdown
  18. 快速保存网页中所有图片的方法
  19. 《乔布斯传》圈点(8)
  20. [翻译] effective go 之 Formatting Commentary

热门文章

  1. #研发解决方案#分布式并行计算调度和管理系统Summoner
  2. iOS ALAsset的选取和存储
  3. Hibernate two table same id
  4. No-PDO-Models-MySQL数据库层抽象类
  5. 关于如何发现忠诚的下属的讨论
  6. [探讨]一次性工具软件
  7. 技术分享:看我如何利用Outlook来创建基于电子邮件的持久化后门
  8. docker mysql容器 修改时区
  9. linux c 获取系统进程总数
  10. linux centos 丢失 grub.conf 启动系统