В приложении Ground Truth Labeler можно пометить сигналы от источников данных облака точек и изображения. Эти источники включают видео, последовательности изображений, последовательности облака точек, пакетное получение Velodyne® (PCAP) файлы и rosbags. Чтобы загрузить источники данных, которые исходно не поддерживает приложение, можно создать класс, чтобы загрузить тот источник в приложение.
В этом примере показано, как использовать один из предопределенных классов источника данных, которые загружают сигналы от источников данных в приложение Ground Truth Labeler: vision.labeler.loading.PointCloudSequenceSource класс. Приложение использует этот определенный класс, чтобы загрузить последовательности данных об облаке точек (PCD) или многоугольника (PLY) файлы от папки.
Чтобы начать, откройте vision.labeler.loading.PointCloudSequenceSource класс. Используйте свойства и методы, описанные для этого класса, чтобы помочь вам записать свой собственный класс.
edit vision.labeler.loading.PointCloudSequenceSourceПриложение Ground Truth Labeler распознает классы источника данных, только если те файлы находятся в +vision/+labeler/+loading папка, которая находится на пути поиска файлов MATLAB®.
vision.labeler.loading.PointCloudSequenceSource класс и другие предопределенные классы источника данных хранятся в этой папке.
matlabroot\toolbox\vision\vision\+vision\+labeler\+loading
В этом пути, корень вашей папки MATLAB.matlabroot
Сохраните классы источника данных, которые вы создаете к этой папке. В качестве альтернативы создайте свой собственный +vision/+labeler/+loading папка, добавляет это к пути поиска файлов MATLAB и сохраняет ваш класс в эту папку.
Классы источника данных должны наследоваться vision.labeler.loading.MultiSignalSource класс. Просмотрите определение класса для vision.labeler.loading.PointCloudSequenceSource класс.
classdef PointCloudSequenceSource < vision.labeler.loading.MultiSignalSourceКогда вы загружаете сигнал последовательности облака точек в приложение Ground Truth Labeler, приложение создает экземпляр класса, то есть, PointCloudSequenceSource объект. После маркировки этого сигнала в приложении, когда вы экспортируете метки, экспортируемый groundTruthMultisignal объектно-ориентированная память этот PointCloudSequenceSource объект в его DataSource свойство.
При определении класса источника данных замените PointCloudSequenceSource с именем вашего пользовательского класса источника данных.
Классы источника данных должны задать эти абстрактные, постоянные свойства.
Name — Строковый скаляр, задающий тип источника данных
Description — Строковый скаляр, описывающий класс
В приложении Ground Truth Labeler, когда вы загружаете сигналы от диалогового окна Add/Remove Signal, Name строка появляется как опция в параметре Source Type. Этот рисунок показывает Name строка для vision.labeler.loading.PointCloudSequenceSource класс.

Description строка не появляется в диалоговом окне. Однако оба Name и Description строки хранятся как свойства только для чтения в экземплярах этого класса.
Этот код показывает Name и Property строки для vision.labeler.loading.PointCloudSequenceSource класс.
properties (Constant)
Name = "Point Cloud Sequence"
Description = "A PointCloud sequence reader"
end
При определении класса источника данных задайте Name и Description значения свойств, чтобы совпадать с именем и описанием вашего пользовательского источника данных. Можно также задать любые дополнительные частные свойства, которые характерны для загрузки источника данных. Специфичные для источника свойства для vision.labeler.loading.PointCloudSequenceSource класс не показывают в этом примере, но можно просмотреть их в файле класса.
В классах источника данных, customizeLoadPanel метод управляет отображением панели для загрузки сигналов в диалоговом окне Add/Remove Signal приложения. Этой панелью является Panel объект, созданный при помощи uipanel функция. Панель содержит параметры и управляет, должен был загрузить сигналы от источников данных.
Этот рисунок показывает панель загрузки для vision.labeler.loading.PointCloudSequenceSource класс. В списке Source Type, когда вы выбираете Point Cloud Sequence, приложение вызывает customizeLoadPanel метод и загрузки панель для последовательностей облака точек.

Этот код показывает customizeLoadPanel метод для vision.labeler.loading.PointCloudSequenceSource класс. Это использует computePositions метод, чтобы вычислить значения положения, куда компоненты пользовательского интерфейса, такие как текст, кнопки и параметры должны быть помещены. addUIComponents метод затем задает панель путем добавления компонентов пользовательского интерфейса соответственно. Для полноценного внедрения этих методов обратитесь к коду для vision.labeler.loading.PointCloudSequenceSource класс.
function customizeLoadPanel(this, panel) this.Panel = panel; computePositions(this); addUIComponents(this); end
При разработке этого метода или других методов источника данных, можно использовать статический метод loadPanelChecker предварительно просматривать отображение и функциональность диалогового окна загрузки для вашего пользовательского источника данных. Этот метод не требует, чтобы у вас был сеанс приложения, открытый, чтобы использовать его. Например, используйте loadPanelChecker метод с vision.labeler.loading.PointCloudSequence класс.
vision.labeler.loading.PointCloudSequenceSource.loadPanelChecker
В диалоговом окне Add/Remove Signal, после того, как вы просматриваете сигнал, устанавливают необходимые параметры и нажимают Add Source, приложение вызывает эти два метода по очереди.
getLoadPanelData — Введите в данные панель.
loadSource — Загрузите данные в приложение.
Этот рисунок показывает отношение между этими методами и кнопкой Add Source при загрузке сигнала последовательности облака точек при помощи vision.labeler.loading.PointCloudSequenceSource класс.

При определении пользовательского источника данных необходимо задать getLoadPanelData метод, который возвращает эти выходные параметры.
sourceName — Имя источника данных
sourceParams — Структура, содержащая поля с информацией, запрошенной, чтобы загрузить источник данных
Этот код показывает getLoadPanelData метод для vision.labeler.loading.PointCloudSequenceSource класс. Этот метод устанавливает sourceName к имени, введенному в параметре Folder Name диалогового окна и sourceParams к пустой структуре. Если параметр Timestamps устанавливается на From Workspace и имеет загруженные метки времени, затем приложение заполняет эту структуру с теми метками времени.
function [sourceName, sourceParams] = getLoadPanelData(this) sourceParams = struct(); if isUIFigureBased(this) sourceName = string(this.FolderPathBox.Value); else sourceName = string(this.FolderPathBox.String); end end
Необходимо также задать loadSource метод в вашем пользовательском классе данных. Этот метод должен взять sourceName и sourceParams возвращенный в getLoadPanelData метод как входные параметры. Этот метод должен также заполнить эти свойства, которые хранятся в экземпляре объекта источника данных, что приложение создает.
SignalName — Идентификаторы строки для каждого сигнала в источнике данных
SignalType — Массив vision.labeler.loading.SignalType перечисления, задающие тип каждого сигнала в источнике данных
Timestamp — Векторный массив или массив ячеек меток времени для каждого сигнала в источнике данных
SourceName — Имя источника данных
SourceParams — Структура, содержащая поля с информацией, запрошенной, чтобы загрузить источник данных
Этот код показывает loadSource метод для vision.labeler.loading.PointCloudSequenceSource класс. Этот метод выполняет эти действия.
Проверяйте, что последовательность облака точек имеет правильное расширение, и сохраните информацию, запрошенную для чтения облаков точек в a fileDatastore объект.
Установите Timestamp свойство объекта источника данных.
Если метки времени загружаются от переменной рабочей области (Timestamps = From workspace), затем метод устанавливает Timestamp к меткам времени, сохраненным в sourceParams входной параметр.
Если метки времени выведены из самой последовательности облака точек (Timestamps = Use Default), затем метод устанавливает Timestamp к a duration вектор секунд, с одной секундой на облако точек.
Подтвердите загруженную последовательность облака точек.
Установите SignalName свойство к имени папки источника данных.
Установите SignalType свойство к PointCloud тип сигнала.
Установите SourceName и SourceParams свойства к sourceName и sourceParams выходные параметры, соответственно.
function loadSource(this, sourceName, sourceParams) % Load file ext = {'.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 свойство передается этому методу.
Этот код показывает readFrame метод для vision.labeler.loading.PointCloudSequenceSource класс. Метод читает системы координат из последовательности облака точек при помощи pcread функция.
function frame = readFrame(this, signalName, index) if ~strcmpi(signalName, this.SignalName) frame = []; else frame = pcread(this.Pcds.Files{index}); end end
Можно также задать любые дополнительные частные свойства, которые характерны для загрузки источника данных. Специфичные для источника методы для vision.labeler.loading.PointCloudSequenceSource класс не показывают в этом примере, но можно просмотреть их в файле класса.
Этот пример показал, как использовать vision.labeler.loading.PointCloudSequenceSource класс, чтобы помочь вам создать свой собственный класс. Эта таблица показывает полный список классов источника данных, что можно использовать в качестве начальных точек для собственного класса.
| Класс | Источник данных, загруженный классом | Команда, чтобы просмотреть исходный код класса |
|---|---|---|
vision.labeler.loading.VideoSource | Видеофайл | edit vision.labeler.loading.VideoSource |
vision.labeler.loading.ImageSequenceSource | Папка последовательности изображений | edit vision.labeler.loading.ImageSequenceSource |
vision.labeler.loading.VelodyneLidarSource | Пакетное получение Velodyne (PCAP) файл | edit vision.labeler.loading.VelodyneLidarSource |
vision.labeler.loading.RosbagSource | Файл Rosbag | edit vision.labeler.loading.RosbagSource |
vision.labeler.loading.PointCloudSequenceSource | Папка последовательности облака точек | edit vision.labeler.loading.PointCloudSequenceSource |
vision.labeler.loading.CustomImageSource | Формат пользовательского изображения | edit vision.labeler.loading.CustomImageSource |