Этот пример показывает вам, как получить и обработать изображения от Модуля Камеры Raspberry Pi V2, соединенный с NVIDIA® Jetson Nano с помощью Пакета Поддержки GPU Coder™ для NVIDIA графические процессоры. Пакет Поддержки GPU Coder для NVIDIA графические процессоры позволяет вам получать изображения от Модуля Камеры V2 и приносить им в среду MATLAB® для обработки. В этом примере вы изучаете, как разработать алгоритм обнаружения ребра Sobel при помощи этой возможности.
Требования требуемой платы
NVIDIA Нано Джетсона встроил платформу.
Модуль Камеры Raspberry Pi V2, соединенный с серверным портом CSI цели.
Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если вы не можете соединить требуемую плату с локальной сетью).
NVIDIA инструментарий CUDA установлен на плате.
V4L2 и SDL (v1.2) библиотеки по плате.
Библиотеки GStreamer по плате.
Переменные окружения на цели для компиляторов и библиотек. Для получения дополнительной информации смотрите Необходимые условия Установки и Setup для Советов NVIDIA (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).
Требования узла разработки
GPU Coder для генерации кода CUDA. Для примера смотрите Начало работы с GPU Coder.
NVIDIA инструментарий CUDA на хосте.
Интерфейс GPU Coder для Библиотек Глубокого обучения поддерживает пакет. Чтобы установить этот пакет поддержки, используйте Add-On Explorer
MATLAB.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Стороннее Оборудование и Подготовку Необходимых как условие продуктов.
Следующая строка кода создает папку в вашей текущей рабочей папке на хосте и копирует все соответствующие файлы в эту папку. Если вы не можете сгенерировать файлы в этой папке, прежде, чем запустить эту команду, изменить вашу текущую рабочую папку.
gpucoderdemo_setup('sobel_edge_detection');
Пакет Поддержки GPU Coder для NVIDIA графические процессоры использует связь SSH по TCP/IP, чтобы выполнить команды при создании и выполнении сгенерированного кода CUDA по платформам Нано Джетсона. Соедините целевую платформу с той же сетью как хост - компьютер или используйте кабель перекрестного соединения Ethernet, чтобы соединить плату непосредственно с хостом - компьютером. Для получения информации о том, как настроить и сконфигурировать вашу плату, видит документацию NVIDIA.
Чтобы связаться с оборудованием NVIDIA, создайте живой аппаратный объект связи при помощи jetson
(Пакет Поддержки GPU Coder для NVIDIA графические процессоры) функция. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например, при соединении с требуемой платой впервые, создайте живой объект для оборудования Джетсона при помощи команды:
hwobj = jetson('jetson-nano-name','ubuntu','ubuntu');
Во время оборудования живое создание объекта пакет поддержки выполняет аппаратные и программные проверки, установку сервера IO, и собирает периферийную информацию о цели. Эта информация отображена в Командном окне.
Запустите getCameraList
функция hwobj
возразите, чтобы найти доступные камеры. Если этот функциональные выходные параметры пустая таблица, то попытайтесь повторно подключить камеру и выполните функцию снова.
camlist = getCameraList(hwobj);
Чтобы проверить, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно, используйте coder.checkGpuInstall
функция.
envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);
Создайте объект камеры при помощи имени от getCameraList
функция.
camObj = camera(hwobj,"vi-output, imx219 6-0010",[640 480]);
camObj
указатель на объект камеры. Чтобы отобразить изображения, полученные от Модуля Камеры V2 в MATLAB, используйте эти команды:
for i = 1:100 img = snapshot(camObj); imagesc(img); drawnow; end
Этот объект камеры получает RGB и полутоновые изображения с 3 каналами.
Чтобы создать экранный объект, используйте imageDisplay
функция. Этот объект является системным объектом, который использует imshow
функционируйте, чтобы отобразить изображения в MATLAB.
dispObj = imageDisplay(hwobj); img = snapshot(camObj); image(dispObj,img);
Алгоритм обнаружения ребра Sobel является 2D пространственной операцией градиента на полутоновом изображении. Эта операция подчеркивает высокие пространственные области частоты pf изображение, которое соответствует ребрам.
Вычислите градиенты
Найдите горизонтальный градиент (h) и вертикальный градиент (v) из входного изображения с соответствующими ядрами Sobel. Эти два ядра Sobel являются ортогональными друг другу. Прежде, чем обработать живые данные изображения от камеры, протестируйте алгоритм на демонстрационном изображении.
kern = [1 2 1; 0 0 0; -1 -2 -1]; img = imread('peppers.png'); imagesc(img); h = conv2(img(:,:,2),kern,'same'); v = conv2(img(:,:,2),kern','same');
Вычислите величину градиента
Найдите величину градиента от горизонтальных и вертикальных градиентов (h и v).
e = sqrt(h.*h + v.*v);
Порог изображение ребра
Порог изображение, чтобы найти области изображения, которые являются ребрами.
edgeImg = uint8((e > 100) * 240); imagesc(edgeImg);
Создайте функцию точки входа MATLAB, sobelEdgeDetectionAlg.m
, из кода MATLAB, разработанного в предыдущих разделах этого примера. Просмотрите код в редакторе MATLAB.
edit('sobelEdgeDetectionAlg.m');
Функциональный sobelEdgeDetectionAlg()
берет изображение и пороговый вход для обнаружения ребра и возвращает результаты алгоритма обнаружения ребра. Вызовите эту функцию на изображениях, полученных из цикла. Можно варьироваться пороговая переменная thresh
получить соответствующее изображение ребра. Таким образом, можно использовать возможность доступа к камере пакета поддержки настроить алгоритм, подходящий для заданной камеры.
for i = 1:200 img = snapshot(camObj); thresh = 100; edgeImage = sobelEdgeDetectionAlg(img, thresh); image(dispObj,edgeImage); end
Чтобы развернуть этот пример как автономное приложение на требуемой плате, смотрите, Развертываются и Запуск Обнаружение Ребра Sobel с вводом-выводом на NVIDIA Нано Джетсона (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).
Чтобы удалить файлы в качестве примера и возвратиться к исходной папке, вызовите cleanup
функция. очистка