【问题标题】:Using MATLAB to process files in real-time after every instance a file is created by a separate program在每个实例由单独的程序创建文件后,使用 MATLAB 实时处理文件
【发布时间】:2011-11-23 20:56:55
【问题描述】:

我正在使用 MATLAB 处理由相机创建并存储在 Windows 目录中的图像文件。我正在尝试将反馈合并到对相机的控制中,因此每次创建新图像并出现在目录中时都需要 MATLAB 处理图像。我从未创建过连续运行并等待事件发生的 MATLAB 程序。

从我在线阅读的内容看来,我最好的选择是使用计时器对象并让 MATLAB 程序重复读取目录的内容。这是一个好方法还是我可以实施的替代方法?

我想知道是否有一种方法可以通过目录中文件的出现来“触发”MATLAB 程序,而不是不断地查看该目录的内容。我希望有,因为随着目录填满,我发现 MATLAB 中的“dir”命令真的很慢;足够慢,我可能无法按照我的要求快速处理图像。

作为后续。关于如何部署这个程序有什么建议吗?我喜欢的一个想法是一个带有“开始”和“停止”按钮的简单 GUI。

谢谢。

【问题讨论】:

    标签: matlab process real-time


    【解决方案1】:

    您可以执行以下操作:

    创建计时器对象,它将每 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);
    

    【讨论】:

    • 您可能应该在 imread 周围添加一个带有暂停/重试循环的 try/catch,以处理尝试读取部分写入文件时出错的情况。计时器逻辑会注意到文件何时被创建,但它不知道它们是否仍然打开并被写入。
    【解决方案2】:

    正确的方法是购买 MATLAB Image Acquisition Toolbox (http://www.mathworks.com/products/imaq/)。此功能有意不包含在基本 Matlab 环境中。

    或者,通过一些巧妙的编程,您可以实现一种变通方法。内置的 MATLAB 函数可能会太慢。最好的办法是用 Java 编写您需要的功能(参见 http://www.exampledepot.com/egs/java.io/GetFiles.html),然后直接从 Matlab 调用您的 Java 代码(参见 http://www.mathworks.com/help/techdoc/matlab_external/f44062.html)。

    基本上,除非您直接访问相机驱动程序或帧抓取器,否则您将始终需要实现某种目录轮询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多