В этом примере показано, как развернуть алгоритмы Image Processing Toolbox™ на TX2 плате NVIDIA ® Jetson с помощью пакета поддержки GPU Coder™ для графических процессоров NVIDIA. The imtophat
(Image Processing Toolbox) функция, которая выполняет морфологическую фильтрацию верхней шляпы на полутоновом изображении, используется в качестве примера, чтобы продемонстрировать эту концепцию. Фильтрация Top-hat вычисляет морфологическое открытие изображения (используя imopen
(Image Processing Toolbox)), а затем вычитает результат из исходного изображения. Сгенерированный код CUDA ® использует общую память для ускорения операций на графическом процессоре.
Требования к системной плате *
NVIDIA Jetson TX2 встраиваемая платформа.
Перекрестный кабель Ethernet для подключения целевой платы и хост-ПК (если целевая плата не может быть подключена к локальной сети).
На плате установлен набор инструментов NVIDIA CUDA.
Библиотека OpenCV на цели для чтения и отображения изображений и видео.
Переменные окружения целевого компьютера для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек и их настройке см. в разделе Установка и Setup необходимых условий для плат NVIDIA (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) для плат NVIDIA
Требования к узлу разработки
CUDA включает графический процессор NVIDIA.
Инструментарий и драйвер NVIDIA CUDA.
Переменные окружения для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Оборудование сторонних производителей. Для настройки переменных окружения смотрите Настройка обязательных продуктов.
Используйте checkHardwareSupportPackageInstall
функция, чтобы убедиться, что хост-система совместима для запуска этого примера.
checkHardwareSupportPackageInstall();
Пакет поддержки GPU Coder для графических процессоров NVIDIA использует SSH-соединение через TCP/IP для выполнения команд во время создания и выполнения сгенерированного кода CUDA на платформе Jetson. Поэтому необходимо подключить целевую платформу к той же сети, что и хосту-компьютеру, или использовать перекрестный кабель Ethernet, чтобы подключить плату непосредственно к хосту-компьютеру. См. документацию NVIDIA по настройке и конфигурированию системной платы.
Для связи с оборудованием NVIDIA необходимо создать объект подключения к активному оборудованию при помощи jetson
(MATLAB Coder Support Package for NVIDIA Jetson и NVIDIA DRIVE Platforms). Для создания объекта подключения к активному оборудованию необходимо знать имя хоста или IP-адрес, имя пользователя и пароль целевой платы.
hwobj= jetson('host-name','username','password');
Когда существует несколько объектов live connection для разных целей, генератор кода выполняет удаленную сборку для цели, для которой был создан недавний объект live. Чтобы выбрать плату оборудования для выполнения удаленной сборки, используйте setupCodegenContext()
способ соответствующего объекта оборудование. Если был создан только один объект live connection, вызывать этот метод не обязательно.
hwobj.setupCodegenContext;
Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall
функция.
envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);
imtophat
Функция точки входаThe imtophatDemo_gpu.m
вызывает imtophat
внутренне. The imtophat
функция выполняет морфологическое открытие изображения с помощью imopen
(Image Processing Toolbox) функция. Результат изображения вычитается из оригинального изображения. The imopen
операция в основном imerode
(Image Processing Toolbox) операция с последующим imdilate
(Image Processing Toolbox).
Этот пример показан на входном полутоновом изображении.
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
Используйте pkg-config
helper tool, чтобы запросить, установлен ли 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
Этот пример использует imtophatDemo_gpu.m
как функцию точки входа для генерации кода. Чтобы сгенерировать исполняемый файл CUDA, создайте объект строения кода GPU.
cfg = coder.gpuConfig('exe');
Используйте coder.hardware
функция для создания объекта строения для платформы Jetson и назначения его Hardware
свойство объекта строения кода GPU 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');
Используйте killApplication
метод аппаратного объекта, чтобы убить выполняемое приложение на цели.
hwobj.killApplication('imtophatDemo_gpu');
drive
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | jetson
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)