Как использовать функции imaqtool, такие как «trigger», «getdata», в «spmd» «batch» структурах (параллельная панель инструментов)? - PullRequest
0 голосов
/ 31 мая 2019

Я делаю графический интерфейс MATLAB, который получает изображения с камеры (используя imaqtool) и обрабатывает их. Чтобы сократить время, затрачиваемое на получение и передачу на мой ЦП (getdata), я хотел бы выполнить многопоточность между моей постобработкой и получением, следовательно, удалив триггер задержки -> acquisition-> getdata и создав (циклический) буфер с изображения готовы к постобработке. Идея состоит в том, чтобы постобработать, пока изображения становятся доступными для моего процессора.

Однако, это не работает.

Я пробовал что-то подобное:

delete(gcp('nocreate'))
parpool(2)
vid = videoinput('gentl', 1, 'Mono8');
src = getselectedsource(vid);
triggerconfig(vid, 'manual');
vid.TriggerRepeat=Inf;
start(vid)
trigger(vid)
Image=mean((getdata(vid)),4,'native');

spmd
    switch labindex
        case 1
            trigger(vid)
            A=getdata(vid);
            Image=mean((getdata(vid)),4,'native');
        case 2
            postprocessing
    end
end

и

vid = videoinput('gentl', 1, 'Mono8');
src = getselectedsource(vid);
triggerconfig(vid, 'manual');
vid.TriggerRepeat=Inf;
start(vid)
ite=0;

while condition==0

if ite==0
trigger(vid)
wait(vid,100,'logging')
Image=mean((getdata(vid)),4,'native');
ite=1;
job=batch('Batch_Camera_Acquisition');
elseif ite==1
    wait(job)
    load(job,'Image')
    job=batch('Batch_Camera_Acquisition');
end

postprocessing
end

%%
% Batch_Camera_Acquisition.m
% trigger(vid)
% wait(vid,100,'logging')
% Image=mean((getdata(vid)),4,'native');

Вот сообщение об ошибке, которое я получаю:

Warning: An error occurred when running a class's loadobj method. The object that was loaded from the MAT-file was a copy of the object before the loadobj method was run. The rest of the variables were also loaded from the MAT-file.
  The encountered error was:
  Undefined function or variable 'out'.

  > In parallel.internal.pool.deserialize (line 33)
    In parallel.internal.pool.deserializeFunction (line 17)
    In spmdlang.remoteBlockExecution>iDeserializeInputs (line 176)
    In spmdlang.remoteBlockExecution>iPrelude (line 119)
    In spmdlang.remoteBlockExecution (line 36)
Lab 2: 
  Warning: An error occurred when running a class's loadobj method. The object that was loaded from the MAT-file was a copy of the object before the loadobj method was run. The rest of the variables were also loaded from the MAT-file.
  The encountered error was:
  Undefined function or variable 'out'.

  > In parallel.internal.pool.deserialize (line 33)
    In parallel.internal.pool.deserializeFunction (line 17)
    In spmdlang.remoteBlockExecution>iDeserializeInputs (line 176)
    In spmdlang.remoteBlockExecution>iPrelude (line 119)
    In spmdlang.remoteBlockExecution (line 36)
Error using Untitled2 (line 162)
Error detected on worker 1.
Caused by:
    Error using Untitled2 (line 162)
    An UndefinedFunction error was thrown on the workers for 'trigger'.  This may be because the file containing 'trigger' is not accessible on the workers.  Specify the required files for this parallel pool using the command:
    addAttachedFiles(pool, ...).  See the documentation for parpool for more details.
        Undefined function 'trigger' for input arguments of type 'struct'

Если я попробую что-нибудь попроще, например:

job=batch('Batch_Cam_Acq');
wait(job)
load(job,'Image')

с Batch_Cam_Acq.m

vid = videoinput('gentl', 1, 'Mono8');
src = getselectedsource(vid);
triggerconfig(vid, 'manual');
vid.FramesPerTrigger=200;
vid.TriggerRepeat=Inf;
start(vid)
trigger(vid)
wait(vid,100,'logging')
Image=getdata(vid);
stop(vid)

Я получаю сообщение об ошибке:

Error using parallel.Job/load (line 36)
Error encountered while running the batch job. The error was:
Error using videoinput (line 235)
There are no devices installed for the specified ADAPTORNAME. See IMAQHWINFO.

Error in Batch_Cam_Acq (line 1)
vid = videoinput('gentl', 1, 'Mono8');

Error in Untitled101 (line 8)
load(job,'Image')

Однако, запуск Batch_Cam_Acq.m работает, когда нет вызова с помощью пакета ... И Imaqhwinfo возвращает мне вызванный адаптер в любом случае.

Любая помощь будет принята с благодарностью.

Спасибо Tual

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...