matlab 定义string_MATLAB开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...
在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开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...相关推荐
- 眼图matlab仿真_MATLAB开发自动驾驶第二十课-自动驾驶场景设计器中的预建驾驶场景...
自动驾驶场景设计应用提供了一个代表常见驾驶动作的预建场景库.该应用还包括代表欧洲新车评估计划(Euro NCAP)测试协议的场景,以及3D仿真环境中使用的预建场景的3D版本. 选择一个预建场景 要开始 ...
- matlab simulink_运用MATLAB和Simulink开发自动驾驶控制系统
来自专辑< MATLAB&SIMULINK > 本文主要是mathswork在adas和自动驾驶开发方面的应用 好书推荐:<推荐理由:本书全面的讲述了驾驶员辅助系统的重要知识 ...
- matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
Ground Truth Labeler应用可以同时标注多个图像或激光雷达点云信号.当播放信号或在帧之间导航时,可以控制那个通过改变信号显示的帧率来显示每个信号的帧数. 信号帧 所标注的信号是由帧组成 ...
- Android开发笔记(六十四)网页加载与JS调用
内置浏览器 网页视图WebView 如果一个网站已经有现成的网页及业务逻辑,那么使用WebView将其内嵌到app中,省去了app重画页面与http通信的事情,无疑是更经济的做法.WebView就是A ...
- 只用CPU开发自动驾驶轮船,他们居然做到了
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 有件事情一直令我感到好奇: 都2021年了,现在有自动驾驶船在海上行驶吗? 带着这个问题,我打开谷歌,输入"Autonomous ...
- Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别
Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 目录 车牌图像数据集 视频动态演示 核心代码 相关文章 Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 Matl ...
- 听见丨前谷歌无人车负责人联手大众和现代 开发自动驾驶 自动驾驶技术研发公司AImotive获3800万美元C轮融资
Canalys:2018年智能音箱全球出货量将达5630万台 据新浪科技报道,Canalys今天发布了一份新的报告,预测2018年将是普及智能音箱的"决定性一年",相比全年出货量刚 ...
- 专利申请显示:苹果正在开发自动驾驶汽车无线充电技术
[TechWeb]7月12日消息,据国外媒体报道,当地时间周四发布的一份专利申请显示,苹果正在开发一种用于自动驾驶汽车的无线充电系统 ,这可能暗示了苹果汽车的宏伟抱负. 苹果帮助iPhone进行无线充 ...
- 中国5G进入第二阶段场景测试;苹果瑞士建秘密实验室开发自动驾驶 | IoT黑板报...
三星推出Connected Home路由器 @cnBeta 三星今天发布一款Wi-Fi路由器Connected Home.这种小型Wi-Fi路由器也作为SmartThings中枢,让用户可以更好地控制 ...
最新文章
- 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?
- Java面试笔试题大汇总三(最全+详细答案)
- 轻轻松松教你写日志-超级简单
- 同事就是同事,职场没有兄弟姐妹
- CodeForces - 225C. Barcode(DP)
- dapperpoco mysql_.NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
- ios 权限提示语_iOS工作室都在用按键v1.6.1(体验版)
- 腾讯x5加载本地html乱码,腾讯X5内核播放器遇到的问题
- 湖畔大学官微改名为“湖畔创研中心”
- 95-130-342-源码-source-kafka相关-AbstractPartitionDiscoverer
- dmol3给定关键字不在字典中_Materials Studio自学系列——软件安装常见问题及解决方法...
- 【回环检测】如何理解loopClosing中的连续性检测
- IDEA 和 Eclipse 使用对比
- php 正则预搜索?=
- 计算机使用鼠标的课件,鼠标操作ppt
- word文档中标题跳到表格的下方-解决方法
- Binomial Showdown
- 快速保存网页中所有图片的方法
- 《乔布斯传》圈点(8)
- [翻译] effective go 之 Formatting Commentary