exponenta event banner

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

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

В этом примере для получения изображения используется параллельный работник, а затем данные передаются обратно клиенту для постобработки с помощью 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' так, что он открывается вне живого сценария. Отображение изображений при каждом их получении из DataQueue объект, использование afterEach.

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

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

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

freq = 5;

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

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

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

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

pause(30);

Чтобы остановить передачу видео, отмените получение.

cancel(f);

Более подробный пример постобработки для работников см. в разделах Выполнение сбора изображений и параллельная обработка изображений.

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

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

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

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

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

См. также

| | | |

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