В этом примере показано, как захватывать и обрабатывать изображения из модуля Raspberry Pi Camera V2 подключенного к NVIDIA ® Jetson Nano. MATLAB ® Coder™ Support Package для платформ NVIDIA Jetson и NVIDIA DRIVE позволяет захватывать изображения из V2 Camera Module и выводить их в окружение MATLAB для обработки. В этом примере вы узнаете, как разработать алгоритм обнаружения ребер Собеля с помощью этой возможности.
Требования к целевой плате
Встроенная платформа NVIDIA Jetson Nano.
Модуль Raspberry Pi Camera V2 подключен к главному порту CSI целевого устройства.
Перекрестный кабель Ethernet для подключения целевой платы и хост-ПК (если вы не можете подключить целевую плату к локальной сети).
На плате установлен набор инструментов NVIDIA CUDA.
V4L2 и библиотеки SDL (v1.2) на плате.
Библиотеки GStreamer на плате.
Переменные окружения целевого компьютера для компиляторов и библиотек. Для получения дополнительной информации см. раздел Установка и Setup Необходимых условий для плат NVIDIA (MATLAB CODER пакет поддержки для платформ NVIDIA Jetson и NVIDIA DRIVE).
Требования к узлу разработки
GPU Coder для генерации кода CUDA. Для получения руководства «Запуск с GPU Coder».
Набор инструментов NVIDIA CUDA на хосте.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации см. раздел «Оборудование сторонних производителей» и «Настройка продуктов для подготовки».
Следующая строка кода создает папку в текущей рабочей папке на хосте и копирует все соответствующие файлы в эту папку. Если вы не можете сгенерировать файлы в этой папке, перед запуском этой команды измените текущую рабочую папку.
nvidiademo_setup('sobel_edge_detection');
Пакет поддержки использует SSH-соединение через TCP/IP для выполнения команд во время создания и выполнения сгенерированного кода CUDA на платформах Jetson Nano. Подключите целевую платформу к той же сети, что и хосту-компьютеру, или используйте перекрестный кабель Ethernet, чтобы подключить плату непосредственно к хосту-компьютеру. Для получения информации о настройке и конфигурировании системной платы см. документацию NVIDIA.
Для связи с оборудованием NVIDIA создайте объект подключения к активному оборудованию с помощью jetson
(MATLAB Coder Support Package for NVIDIA Jetson и NVIDIA DRIVE Platforms). Для создания объекта подключения к активному оборудованию необходимо знать имя хоста или IP-адрес, имя пользователя и пароль целевой платы. Например, при первом подключении к целевой плате создайте объект live для оборудования Jetson с помощью команды:
hwobj = jetson('jetson-nano-name','ubuntu','ubuntu');
Во время создания оборудования объект пакет поддержки выполняет проверку аппаратных и программного оборудования, установку сервера ввода-вывода и собирает периферийную информацию для целевого устройства. Эта информация отображается в Командном окне.
Запуск getCameraList
функция hwobj
объект для поиска доступных камер. Если эта функция выводит пустую таблицу, попробуйте повторно подключить камеру и выполните функцию снова.
camlist = getCameraList(hwobj);
Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall
функция.
envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);
Создайте объект камеры с помощью имени из getCameraList
функция. Например, если камера имеет имя vi-output, imx219 6-0010
, использовать:
camObj = camera(hwobj,"vi-output, imx219 6-0010",[640 480]);
camObj
- указатель на объект камеры. Чтобы отобразить изображения, полученные из V2 Camera Module в 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);
Алгоритм обнаружения ребер Собеля является 2-D пространственной операцией градиента на полутоновом изображении. Эта операция подчеркивает высокие пространственные частотные области pf изображения, которое соответствует ребрам.
Вычисление градиентов
Найдите горизонтальный градиент (h) и вертикальный градиент (v) входного изображения с соответствующими ядрами Собеля. Эти два ядра Собеля ортогональны друг другу. Перед обработкой данных живого изображения с камеры протестируйте алгоритм на образцовом изображении.
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 Нано Джетсона (Пакет Поддержки MATLAB CODER для NVIDIA, Джетсон и NVIDIA ВЕДУТ Платформы).
Чтобы удалить файлы примера и вернуться в исходную папку, вызовите cleanup
функция.
cleanup
drive
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | jetson
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)