В приложении 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® путь поиска файлов.
The 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
класс.
The 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
метод для вычисления значений положения, в которых должны быть размещены компоненты пользовательского интерфейса, такие как текст, кнопки и параметры. The 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
класс. Этот метод выполняет эти действия.
Проверьте, что последовательность облаков точек имеет правильное расширение, и сохраните информацию, необходимую для чтения облаков точек в 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 | Файл Росбага | edit vision.labeler.loading.RosbagSource |
vision.labeler.loading.PointCloudSequenceSource | Папка последовательности облаков точек | edit vision.labeler.loading.PointCloudSequenceSource |
vision.labeler.loading.CustomImageSource | Пользовательский формат изображения | edit vision.labeler.loading.CustomImageSource |