Обнаружение Ребро на NVIDIA Jetson Nano с использованием модуля Raspberry Pi Camera V2

В этом примере показано, как захватывать и обрабатывать изображения из модуля 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).

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

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

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

nvidiademo_setup('sobel_edge_detection');

Подключение к NVIDIA Jetson Nano

Пакет поддержки использует 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);

Запуск алгоритма обнаружения ребер Sobel на Live Data

Создайте функцию точки входа 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

См. также

Объекты

  • (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)

Похожие темы