Использование MATLAB для обработки файлов в режиме реального времени после того, как каждый экземпляр файла создается отдельной программой - PullRequest
4 голосов
/ 23 сентября 2011

Я использую MATLAB для обработки файлов изображений, которые создаются камерой и хранятся в каталоге в Windows. Я пытаюсь включить обратную связь в управление камерой и, следовательно, требую, чтобы MATLAB обрабатывал изображение каждый раз, когда новое изображение создается и появляется в каталоге. Я никогда не создавал программу MATLAB, которая работает непрерывно и ожидает события.

Из того, что я прочитал в Интернете, я считаю, что лучше всего использовать объект таймера и заставить программу MATLAB повторно читать содержимое каталога. Это хороший подход или есть альтернативные подходы, которые я могу реализовать?

Мне интересно, есть ли способ, чтобы программа MATLAB могла "запускаться" при появлении файла в каталоге, а не постоянно просматривать содержимое этого каталога. Я надеюсь, что это происходит потому, что, когда каталог заполняется, я обнаружил, что команда "dir" в MATLAB очень медленная; достаточно медленно, чтобы я не мог обрабатывать изображения так быстро, как мне нужно.

Как продолжение. Есть ли какие-либо рекомендации о том, как развернуть эту программу? Идея, которая мне нравится, - это простой графический интерфейс с кнопками «Пуск» и «Стоп».

Спасибо.

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

Вы можете сделать следующее:

Создать объект таймера, который будет проверять ваш каталог каждые 10 секунд:

t = timer('TimerFcn', @mycallback, 'Period', 10.0, 'ExecutionMode', 'fixedSpacing');

ваша функция 'mycallback' должна выглядетьпримерно так:

DIR_TO_READ = 'C:\incoming-files';
DIR_TO_MOVE_PROCESSED = 'C:\processed-files';

% get list of files.
file_struct = dir(DIR_TO_READ)
% remove '.' and '..' directories
file_struct([file_struct.isdir]) = [];
for j = 1 : numel(file_struct)
    current_file = file_struct(j).name;
    full_filename = fullfile(DIR_TO_READ, current_file)

    % add your processing of the file here
    % e.g.
    bla = imread(full_filename);

    % now move the processed file to the processed file folder
    movefile(full_filename, fullfile(DIR_TO_MOVE_PROCESSED, current_file))

end       

Теперь вам нужно запустить объект таймера

start(t);

Вы можете остановить объект таймера с помощью

stop(t);
1 голос
/ 24 сентября 2011

Правильный способ *1001* для этого состоит в приобретении набора инструментов MATLAB Image Acquisition (http://www.mathworks.com/products/imaq/).) Эта функция намеренно не включена в базовую среду Matlab.

В качестве альтернативы, при некотором умном программировании вы можете реализовать обходной путь. Встроенные функции MATLAB, вероятно, будут слишком медленными. Лучше всего было бы написать необходимую вам функциональность в Java (см. http://www.exampledepot.com/egs/java.io/GetFiles.html), а затем вызвать свой код Java непосредственно из Matlab (см. http://www.mathworks.com/help/techdoc/matlab_external/f44062.html).

).

По сути, если вы не обращаетесь непосредственно к драйверам камеры или фреймбрейберу, вам всегда нужно будет выполнять какой-либо опрос каталога.

...