exponenta event banner

Фильтрация Top-Hat для удаления неравномерного фонового освещения в комплекте разработчика NVIDIA Jetson TX2

В этом примере показано, как развернуть алгоритмы обработки изображений Toolbox™ на плате TX2 NVIDIA ® Jetson с помощью пакета поддержки GPU Coder™ для графических процессоров NVIDIA. imtophatДля демонстрации этой концепции в качестве примера используется функция (инструментарий обработки изображений), выполняющая морфологическую фильтрацию верхней части изображения в градациях серого. Фильтрация верхней шляпы вычисляет морфологическое открытие изображения (с помощью imopen(Панель инструментов обработки изображений)), а затем вычитает результат из исходного изображения. Созданный код CUDA ® использует общую память для ускорения операций с графическим процессором.

Предпосылки

Требования к целевой плате *

  • NVIDIA Jetson TX2 встроенная платформа.

  • Кросс-кабель Ethernet для подключения целевой платы и хост-ПК (если целевая плата не может быть подключена к локальной сети).

  • Набор инструментов NVIDIA CUDA, установленный на плате.

  • Библиотека OpenCV на цели для чтения и отображения изображений и видео.

  • Переменные среды в целевом объекте для компиляторов и библиотек. Сведения о поддерживаемых версиях компиляторов и библиотек и их настройке см. в разделе Установка и настройка предварительных условий для плат NVIDIA (пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE) для плат NVIDIA.

Требования к хосту разработки

Проверка установки пакета поддержки NVIDIA на хосте

Используйте checkHardwareSupportPackageInstall для проверки совместимости хост-системы с этим примером.

checkHardwareSupportPackageInstall();

Подключение к аппаратному обеспечению NVIDIA

Пакет поддержки кодеров GPU для графических процессоров NVIDIA использует SSH-соединение через TCP/IP для выполнения команд при создании и выполнении сгенерированного кода CUDA на платформе Jetson. Поэтому необходимо подключить целевую платформу к той же сети, что и хост-компьютер, или использовать кросс-кабель Ethernet для подключения платы непосредственно к хост-компьютеру. Обратитесь к документации NVIDIA по настройке и настройке платы.

Для взаимодействия с оборудованием NVIDIA необходимо создать объект подключения к оборудованию в реальном времени с помощью jetson(Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE). Для создания объекта аппаратного подключения в реальном времени необходимо знать имя хоста или IP-адрес, имя пользователя и пароль целевой платы.

hwobj= jetson('host-name','username','password');

При наличии нескольких активных объектов подключения для различных целей генератор кода выполняет удаленное построение на цели, для которой был создан недавний живой объект. Чтобы выбрать аппаратную плату для выполнения удаленной сборки, используйте setupCodegenContext() способ соответствующего активного аппаратного объекта. Если был создан только один объект реального соединения, вызывать этот метод не требуется.

hwobj.setupCodegenContext;

Проверка среды графического процессора

Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall функция.

envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);

imtophat Функция точки входа

imtophatDemo_gpu.m требования imtophat внутренне. imtophat функция выполняет морфологическое открытие на изображении с помощью imopen(Панель инструментов обработки изображений). Результат изображения вычитается из исходного изображения. imopen эксплуатация в основном imerode(Панель инструментов обработки изображений), за которой следует imdilate(Панель инструментов обработки изображений).

Этот пример показан на входном изображении в оттенках серого.

original = imread('rice.png');
imshow(original),title('Input to Top-Hat Filtering');

Создайте дискообразный структурный элемент радиусом 12. Окрестности, Nhood этого элемента структурирования передается в качестве входного аргумента для функции imtophat.

se = strel('disk',12);
Nhood = se.Neighborhood;
type imtophatDemo_gpu
function [out]  = imtophatDemo_gpu(img,Nhood,ocvFlag) %#codegen

%   Copyright 2019-2021 The MathWorks, Inc.   

coder.gpu.kernelfun;

% This example uses OpenCV for reading an image 
% and displaying output image. Update buildinfo to link with 
% OpenCV library available on target.
if ocvFlag 
    % OpenCV 4 flags
    opencv_compile_flags = '`pkg-config --cflags --libs opencv4`';
    opencv_link_flags = '`pkg-config --libs opencv4`';
else 
    % OpenCV 3 flags
    opencv_compile_flags = '`pkg-config --cflags --libs opencv`';
    opencv_link_flags = '`pkg-config --libs opencv`';
end

coder.updateBuildInfo('addLinkFlags',opencv_link_flags);
coder.updateBuildInfo('addCompileFlags',opencv_compile_flags);

out = imtophat(img,Nhood);

end

Получение версии OpenCV на конечном объекте

Используйте pkg-config средство поддержки для запроса о том, установлен ли OpenCV 4.x на целевой плате. В этом примере используется информация для обновления информации построения для связи с соответствующей библиотекой OpenCV, доступной в целевом объекте.

try
    OpenCVver = strtrim(system(hwobj,'pkg-config --modversion opencv4'));
    isOpenCV4 = 1;
catch
    OpenCVver = strtrim(system(hwobj,'pkg-config --modversion opencv'));
    isOpenCV4 = 0;
end

Создание и развертывание кода CUDA на конечном объекте

В этом примере используется imtophatDemo_gpu.m в качестве функции точки входа для генерации кода. Чтобы создать исполняемый файл CUDA, создайте объект конфигурации кода графического процессора.

cfg = coder.gpuConfig('exe');

Используйте coder.hardware чтобы создать объект конфигурации для платформы Jetson и назначить его Hardware свойство объекта конфигурации кода графического процессора cfg.

cfg.Hardware = coder.hardware('NVIDIA Jetson');

Обычай main_tophat.cu файл - это оболочка, вызывающая imtophatDemo_gpu функция точки входа в сгенерированном коде. Шаги постобработки добавляются в основной файл с помощью интерфейсов OpenCV. Флаги сборки для библиотек OpenCV включены в imtophatDemo_gpu.m функция точки входа.

cfg.CustomSource = fullfile('main_tophat.cu');

Для создания кода CUDA используйте codegen и передать объект конфигурации кода GPU вместе с входными аргументами. На этом этапе на хосте генерируется код CUDA, создаваемые файлы копируются и создаются на целевом объекте в каталоге рабочей области. Каталог рабочей области доступен как свойство, workspaceDir в аппаратном объекте, hwobj.

codegen -args {original,coder.Constant(Nhood),coder.Constant(isOpenCV4)} -config cfg imtophatDemo_gpu -report

Запуск приложения на конечном объекте

Это приложение принимает изображение в градациях серого в качестве входных данных. Скопируйте файл rice.png с хоста на целевое устройство с помощью putFile команда.

imgLoc = which('rice.png');
hwobj.putFile(imgLoc,hwobj.workspaceDir);

Используйте runApplication способ аппаратного объекта для запуска приложения на целевом аппаратном обеспечении.

hwobj.runApplication('imtophatDemo_gpu','rice.png');

Отфильтрованное изображение верхней шляпы на TX2 Jetson

Убить приложение

Используйте killApplication способ аппаратного объекта для уничтожения запущенного приложения на целевом объекте.

hwobj.killApplication('imtophatDemo_gpu');

См. также

Объекты

  • (Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE) | (Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE)

Связанные темы