Фильтрация цилиндра, чтобы удалить неровное фоновое освещение на NVIDIA комплект разработчика Джетсона TX2

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

Предпосылки

Требования требуемой платы

  • NVIDIA Джетсон Tegra TX2 встроил платформу.

  • Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).

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

  • OpenCV 3.0 (или выше) библиотека по цели для чтения и отображения изображений/видео.

  • Переменные окружения на цели для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек и их настройки, смотрите Предпосылки Установки и Setup для плат NVIDIA.

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

  • GPU Coder для генерации кода. Для обзора и примеров, посетите страницу продукта GPU Coder.

  • NVIDIA инструментарий CUDA на хосте.

  • Переменные окружения на хосте к компиляторам и библиотекам. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.

Создайте папку и скопируйте соответствующие файлы

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

gpucoderdemo_setup('gpucoderdemo_topHatFilteringOnJetsonTX2');

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

Используйте checkHardwareSupportPackageInstall функция, чтобы проверить, что хост-система совместима, чтобы запустить этот пример.

checkHardwareSupportPackageInstall();

Свяжите с оборудованием NVIDIA

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

Чтобы связаться с оборудованием NVIDIA, необходимо создать живой аппаратный объект связи при помощи функции jetson. Необходимо знать, что имя хоста или 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 вызывает 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) %#codegen

%   Copyright 2019 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.
opencv_link_flags = '`pkg-config --cflags --libs opencv`';
coder.updateBuildInfo('addLinkFlags',opencv_link_flags);
coder.updateBuildInfo('addCompileFlags','-std=c++11');

out = imtophat(img,Nhood);

end

Generate & Deploy Код CUDA по цели

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

cfg = coder.gpuConfig('exe');

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

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

Пользовательский основной файл является оберткой, которая вызывает imtophat функцию в сгенерированном коде. Отправьте шаги обработки, добавляются в основном использовании файла интерфейсы OpenCV. Флаги сборки для Библиотек OpenCV включены в функцию imtophatDemo_gpu.m.

cfg.CustomSource = fullfile('main.cpp');

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

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

Запустите приложение на цели

Это приложение берет полутоновое изображение в качестве входа. Скопируйте rice.png файл с хоста на целевое устройство при помощи putFile команда. hwobj.putFile ('rice.png', hwobj.workspaceDir);

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

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

Цилиндр фильтрованное изображение на Джетсоне TX2

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

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

hwobj.killApplication('imtophatDemo_gpu');

Команда выполнения: Очистка

Запустите cleanup функция, чтобы удалить сгенерированные файлы и возвратиться к исходной папке.

cleanup