В приложении Ground Truth Labeler можно маркировать сигналы из источников данных изображений и облаков точек. Эти источники включают видео, последовательности изображений, последовательности облаков точек, файлы захвата пакетов (PCAP) Velodine ® и 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 строка появляется в качестве опции в параметре «Тип источника». На этом рисунке показаны 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 класс. В списке «Тип источника» при выборе 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
В диалоговом окне «Добавление и удаление сигнала» после поиска сигнала, установки необходимых параметров и нажатия кнопки «Добавить источник» приложение последовательно вызывает эти два метода.
getLoadPanelData - Получить данные, введенные в панель.
loadSource - Загрузите данные в приложение.
На этом рисунке показана взаимосвязь между этими методами и кнопкой «Добавить источник» при загрузке сигнала последовательности облаков точек с помощью 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 свойства объекта источника данных.
Если метки времени загружаются из переменной рабочей области (метки времени = From workspace), затем набор методов Timestamp к меткам времени, хранящимся в sourceParams вход.
Если временные метки получены из самой последовательности облаков точек (временные метки = Use Default), затем набор методов Timestamp в 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 | Файл захвата пакетов Velodine (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 |