exponenta event banner

Обнаружение края Sobel на NVIDIA Jetson Nano с помощью модуля Raspberry Pi Camera V2

В этом примере показано, как снимать и обрабатывать изображения из модуля Raspberry Pi Camera Module V2 подключенного к NVIDIA ® Jetson Nano. Пакет поддержки Coder™ MATLAB ® для платформ NVIDIA Jetson и NVIDIA DRIVE позволяет снимать изображения из модуля Camera Module V2 и переносить их в среду MATLAB для обработки. В этом примере описывается разработка алгоритма обнаружения краев Собеля с помощью этой возможности.

Предпосылки

Требования к целевой плате

  • Встраиваемая платформа NVIDIA Jetson Nano.

  • Модуль камеры Raspberry Pi V2 подключен к порту хоста CSI целевого устройства.

  • Кросс-кабель Ethernet для подключения целевой платы и хост-ПК (если невозможно подключить целевую плату к локальной сети).

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

  • Библиотеки V4L2 и SDL (версия 1.2) на плате.

  • Библиотеки GStreamer на доске.

  • Переменные среды в целевом объекте для компиляторов и библиотек. Дополнительные сведения см. в разделе Предварительные условия установки и установки плат NVIDIA (пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE).

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

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

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

nvidiademo_setup('sobel_edge_detection');

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

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

Для связи с аппаратным обеспечением NVIDIA создайте объект подключения аппаратного обеспечения в реальном времени с помощью jetson(Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE). Для создания объекта аппаратного подключения в реальном времени необходимо знать имя хоста или IP-адрес, имя пользователя и пароль целевой платы. Например, при первом подключении к целевой плате создайте активный объект для оборудования 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 модуля камеры в 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 для оперативных данных

Создайте функцию точки входа 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 Edge Detection с функцией ввода-вывода на NVIDIA Jetson Nano (пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE).

Очистка

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

cleanup

См. также

Объекты

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

Связанные темы