Этот пример показывает, как выполнить сбор систем координат от веб-камеры параллельно с постобработкой данных.
В примере вы используете параллельный рабочий процесс для сбора изображений, а затем отправляете данные обратно в клиент для постобработки с помощью 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
afterEach
| imshow
| parallel.pool.DataQueue
| parfeval
| parpool