Создайте класс для загрузки пользовательских источников достоверные данные

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

В этом пути matlabroot является корнем папки MATLAB.

Сохраните созданные классы источников данных в этой папке. Кроме того, создайте свою собственную +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 класс. Этот метод выполняет эти действия.

  1. Проверьте, что последовательность облаков точек имеет правильное расширение, и сохраните информацию, необходимую для чтения облаков точек в fileDatastore объект.

  2. Установите Timestamp свойство объекта источника данных.

    • Если метки времени загружены из переменной рабочей области (Timestamps = From workspace), затем метод устанавливает Timestamp к временным меткам, хранящимся в sourceParams вход.

    • Если временные метки получают из самой последовательности облаков точек (Timestamps = Use Default), затем метод устанавливает Timestamp в a duration вектор секунд с одной секундой на облако точек.

  3. Проверьте последовательность загруженных облаков точек.

  4. Установите SignalName свойство имени папки источника данных.

  5. Установите SignalType свойство для PointCloud тип сигнала.

  6. Установите 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

См. также

Приложения

Классы

Объекты