在已经运行的MATLAB会话上运行MATLAB脚本

时间:2015-06-27 16:48:19

标签: php bash matlab

我在后端使用PHP服务器和一个要求用户上传图像的基本网页。该图像用作要在服务器端执行的MATLAB脚本的输入。

我需要的是像运行MATLAB脚本的服务器端已经运行的MATLAB会话(不清楚那个词)。我知道命令:"matlab -nodesktop -nojvm"可以使用,但重点是我不想一次又一次地调用MATLAB,而只需在用户上传时在运行的MATLAB实例上执行MATLAB脚本一个图像,得到输出(必要)。

有一些限制因素:
1.操作系统 - > Ubuntu的
2.不能使用python引擎。

3 个答案:

答案 0 :(得分:2)

有多个接口可以控制matlab。这种情况的最佳选择可能是matlabcontrol或python的matlab引擎(由于某些原因你不能使用它)。在Windows上,第三种选择是com。

除了控制matlab进程外,您还可以在matlab中实现一个应用程序,它接收数据,处理数据并将其发回。我在matlab中使用apache xmlrpc解决了类似的问题。

还有一些关于matlab文件交换的提交,直接提供了一个matlab控制台via web

答案 1 :(得分:2)

您可以编写Matlab代码来定期检查上传文件夹中的新图像。处理新图像,然后将处理后的图像移动到存档文件夹。

要检查新文件,请使用dir命令

FILES = dir(['path/to/upload/folder/*.PNG']);

将PNG扩展名替换为图片文件的扩展名。

使用movefile命令

移动文件
movefile('path/to/upload/folder/Filename.PNG', 'path/to/archive/folder/', 'f')

从终端运行Matlab脚本并使其在后台运行

/usr/local/MATLAB/R2014a/bin/matlab -nodisplay -nosplash -r "cd /path/to/matlab/code; MatlabScript" ; < ctrl > Z; bg; disown -h %1

答案 2 :(得分:1)

有一个C ++ API,您可以使用engOpen调用Matlab引擎。这将打开Matlab并保持运行直到您关闭它。然后你的C ++程序可以等待并监听要处理的图像。

http://www.mathworks.com/help/matlab/calling-matlab-engine-from-c-c-and-fortran-programs.html

另一种选择是将Matlab脚本编译为独立的可执行文件。硬编码输入图像名称和输出,让PHP处理输入和输出。服务器需要做的就是调用可执行文件。每次启动Matlab运行时大约需要5秒钟。