В этом примере показано, как развернуть алгоритмы Image Processing Toolbox™ в плату NVIDIA® Jetson TX2 с помощью Пакета Поддержки GPU Coder™ для NVIDIA графические процессоры. imtophat
(Image Processing Toolbox) функция, которая выполняет морфологическую фильтрацию цилиндра на полутоновом изображении, используется в качестве примера, чтобы продемонстрировать эту концепцию. Фильтрация цилиндра вычисляет морфологическое открытие изображения (использующий imopen
(Image Processing Toolbox)), и затем вычитает результат оригинального изображения. Сгенерированный код CUDA® использует общую память, чтобы ускорить операции на графическом процессоре.
Требования требуемой платы *
NVIDIA Jetson TX2 встроил платформу.
Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).
NVIDIA инструментарий CUDA установлен на плате.
Библиотека OpenCV по цели для чтения и отображения изображений и видео.
Переменные окружения на цели для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек и их настройки, смотрите Необходимые условия Установки и Setup для Советов NVIDIA (Пакет Поддержки GPU Coder для NVIDIA графические процессоры) для плат NVIDIA.
Требования узла разработки
CUDA включил NVIDIA графический процессор.
NVIDIA инструментарий CUDA и драйвер.
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Стороннее Оборудование. Для подготовки переменных окружения смотрите Подготовку Необходимых как условие продуктов.
Используйте checkHardwareSupportPackageInstall
функция, чтобы проверить, что хост-система совместима, чтобы запустить этот пример.
checkHardwareSupportPackageInstall();
Пакет Поддержки GPU Coder для NVIDIA графические процессоры использует связь SSH по TCP/IP, чтобы выполнить команды при создании и выполнении сгенерированного кода CUDA по платформе Джетсона. Необходимо поэтому соединить целевую платформу с той же сетью как хост - компьютер или использовать кабель перекрестного соединения Ethernet, чтобы соединить плату непосредственно с хостом - компьютером. Обратитесь к документации NVIDIA относительно того, как настроить и сконфигурировать вашу плату.
Чтобы связаться с оборудованием NVIDIA, необходимо создать живой аппаратный объект связи при помощи jetson
(Пакет Поддержки GPU Coder для NVIDIA графические процессоры) функция. Необходимо знать, что имя хоста или 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
(Image Processing Toolbox) функция. Результат изображения вычтен из оригинального изображения. 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
инструмент помощника, чтобы запросить, установлен ли 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, создайте объект настройки графического процессора кода.
cfg = coder.gpuConfig('exe');
Используйте coder.hardware
функция, чтобы создать настройку возражает для платформы Джетсона и присвоить ее 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
функционируйте и передайте объект настройки графического процессора кода наряду с входными параметрами. На этом шаге код 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');