Обнаружение ребра Sobel на NVIDIA нано Джетсона Используя модуль камеры Raspberry Pi V2

Этот пример показывает вам, как получить и обработать изображения от Модуля Камеры Raspberry Pi V2, соединенный с NVIDIA® Jetson Nano с помощью Пакета Поддержки GPU Coder™ для NVIDIA графические процессоры. Пакет Поддержки GPU Coder для NVIDIA графические процессоры позволяет вам получать изображения от Модуля Камеры V2 и приносить им в среду MATLAB® для обработки. В этом примере вы изучаете, как разработать алгоритм обнаружения ребра Sobel при помощи этой возможности.

Необходимые условия

Требования требуемой платы

  • NVIDIA Нано Джетсона встроил платформу.

  • Модуль Камеры Raspberry Pi V2, соединенный с серверным портом CSI цели.

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

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

  • V4L2 и SDL (v1.2) библиотеки по плате.

  • Библиотеки GStreamer по плате.

  • Переменные окружения на цели для компиляторов и библиотек. Для получения дополнительной информации смотрите Необходимые условия Установки и Setup для Советов NVIDIA (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).

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

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

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

gpucoderdemo_setup('sobel_edge_detection');

Соедините с NVIDIA нано Джетсона

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

Чтобы связаться с оборудованием NVIDIA, создайте живой аппаратный объект связи при помощи jetson (Пакет Поддержки GPU Coder для NVIDIA графические процессоры) функция. Необходимо знать, что имя хоста или IP-адрес, имя пользователя и пароль требуемой платы создают живой аппаратный объект связи. Например, при соединении с требуемой платой впервые, создайте живой объект для оборудования Джетсона при помощи команды:

hwobj = jetson('jetson-nano-name','ubuntu','ubuntu');

Во время оборудования живое создание объекта пакет поддержки выполняет аппаратные и программные проверки, установку сервера IO, и собирает периферийную информацию о цели. Эта информация отображена в Командном окне.

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

camlist = 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

Алгоритм обнаружения ребра Sobel является 2D пространственной операцией градиента на полутоновом изображении. Эта операция подчеркивает высокие пространственные области частоты pf изображение, которое соответствует ребрам.

Вычислите градиенты

Найдите горизонтальный градиент (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);

Запустите алгоритм обнаружения ребра 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 с вводом-выводом на NVIDIA Нано Джетсона (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).

Очистка

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

Для просмотра документации необходимо авторизоваться на сайте