exponenta event banner

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

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

По этому пути 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 строка появляется в качестве опции в параметре «Тип источника». На этом рисунке показаны 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 класс. Этот метод выполняет эти действия.

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

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

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

    • Если временные метки получены из самой последовательности облаков точек (временные метки = Use Default), затем набор методов Timestamp в 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Файл захвата пакетов 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

См. также

Приложения

Классы

Объекты