Этот пример показывает вам, как получить и обработать изображения от Модуля Камеры Raspberry Pi V2, соединенный с NVIDIA® Jetson Nano с помощью GPU Coder™ Support Package for NVIDIA GPUs
. Пакет Поддержки GPU Coder для NVIDIA графические процессоры позволяет вам получать изображения от Модуля Камеры V2 и приносить им прямо в среду MATLAB® для обработки. В этом примере вы изучите, как разработать алгоритм обнаружения ребра Sobel при помощи этой возможности.
Требования требуемой платы
NVIDIA Нано Джетсона встроил платформу.
Модуль Камеры Raspberry Pi V2, соединенный с серверным портом CSI цели.
Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).
Библиотека V4L2 по цели.
Библиотеки GStreamer по цели.
Переменные окружения на цели для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек и их настройки, смотрите предпосылки установки и подготовки для плат NVIDIA.
Требования узла разработки
GPU Coder для генерации кода. Если вы плохо знакомы с GPU Coder, посещаете страницу продукта GPU Coder для обзора и примеров.
Пакет Поддержки GPU Coder для NVIDIA графические процессоры. Если вы плохо знакомы с этим пакетом поддержки, мы рекомендуем завершить Начало работы с Пакетом Поддержки GPU Coder для NVIDIA графические процессоры (Пакет Поддержки GPU Coder для NVIDIA графические процессоры) пример.
Инструментарий NVIDIA CUDA® на хосте.
Переменные окружения на хосте к компиляторам и библиотекам. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Соединитесь с нано Джетсона NVIDIA
Пакет Поддержки GPU Coder для NVIDIA графические процессоры использует связь SSH по TCP/IP, чтобы выполнить команды при создании и выполнении сгенерированного кода CUDA по платформам Джетсона или ДИСКУ. Необходимо поэтому соединить целевую платформу с той же сетью как хост - компьютер или использовать кабель перекрестного соединения Ethernet, чтобы соединить плату непосредственно с хостом - компьютером. Обратитесь к документации NVIDIA относительно того, как настроить и сконфигурировать вашу плату.
Чтобы связаться с Нано Джетсона NVIDIA, необходимо создать живой аппаратный объект связи при помощи функции jetson или диска. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например, используйте следующую команду, чтобы создать живой объект для оборудования Джетсона,
hwobj = jetson('jetson-nano-name','ubuntu','ubuntu');
Запустите 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 пространственная операция градиента на полутоновом изображении. Эта операция подчеркивает высокие пространственные области частоты, который соответствует ребрам.
Вычислите градиенты
Мы найдем горизонтальный градиент (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 графические процессоры).
close all
Этот пример ввел приложение, где изображения, прибывающие из камеры, соединенной с Нано Джетсона NVIDIA, обрабатываются в MATLAB с помощью алгоритма обнаружения ребра Sobel.