В приложении 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 |