Выполните сбор изображений веб-камеры параллельно с постобработкой

Этот пример показывает, как выполнить сбор систем координат от веб-камеры параллельно с постобработкой данных.

В примере вы используете параллельный рабочий процесс для сбора изображений, а затем отправляете данные обратно в клиент для постобработки с помощью DataQueue объект.

Для выполнения постобработки с использованием рабочих процессов вместо клиента MATLAB, смотрите Выполнение сбора изображений и Параллельная обработка изображений.

Настройка параллельного окружения

Запустите параллельный пул с одним рабочим в локальном кластере.

parpool('local',1);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 1).

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

D = parallel.pool.DataQueue;

Создайте объект рисунка и установите 'Visible' на 'on' чтобы он открылся вне live скрипта. Отображать изображения каждый раз, когда они прибывают из DataQueue объект, использование afterEach.

fig = figure('Visible','on');
afterEach(D,@processDisp);

Получение данных и выполнение постобработки параллельно

Задайте частоту захвата, то есть сколько системы координат в секунду вы хотите вытащить из камеры.

freq = 5;

Выберите значение, которое учитывает, сколько времени занимает постобработка. В противном случае видеопоток может значительно задержаться со временем.

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

f = parfeval(@getFrameFromCamera,0,D,freq);

Получите системы координат на период 30 секунд. Этот пример применяет фильтр размытия как шаг постобработки и показывает исходные и обработанные системы координат один за другим.

pause(30);

Чтобы остановить видеотрансляцию, отмените приобретение.

cancel(f);

Для более подробного примера, показывающего постобработку работников, смотрите Выполните сбор изображений и параллельную обработку изображений.

Определите вспомогательные функции

The getFrameFromCamera функция соединяется с веб-камерой, затем получает системы координат изображения и отправляет их в DataQueue объект в бесконечном цикле.

function getFrameFromCamera(D,freq)
    cam = webcam;
    while true
        img = snapshot(cam);
       
        send(D,img);
        pause(1/freq);
    end
end

The processDisp функция постпроцессирует кадры и отображает исходные и обработанные системы координат каждый раз, когда данные времени поступают в DataQueue объект.

function processDisp(img)
    imgBlur = imgaussfilt(img,3);
    imshow([img, imgBlur],'Parent',gca)
end

См. также

| | | |

Похожие темы