В этом примере показано, как снимать и обрабатывать изображения из модуля 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).
Требования к хосту разработки
Кодер графического процессора для генерации кода CUDA. Учебное пособие см. в разделе Начало работы с кодером графического процессора.
Набор инструментов NVIDIA CUDA на хосте.
Переменные среды для компиляторов и библиотек. Дополнительные сведения см. в разделах Аппаратное обеспечение сторонних производителей и Настройка необходимых продуктов.
Следующая строка кода создает папку в текущей рабочей папке на хосте и копирует все соответствующие файлы в эту папку. Если невозможно создать файлы в этой папке, перед выполнением этой команды измените текущую рабочую папку.
nvidiademo_setup('sobel_edge_detection');
Пакет поддержки использует 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);

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