如何从Matlab移植到Web的Headless Octave

时间:2018-12-01 21:01:58

标签: matlab octave

我有一个我编写的Matlab应用程序,希望放在运行Octave的AWS服务器上,以使服务可以通过Web公开使用。我从没用过八度音阶。

我已经读过“ --no-window-system”将使我无头运行,而且我知道我可以使用“ saveas(fig,FileName,format)”保存我的图形。我的问题是,在Octave中,plot()和histogram()是否可以正常工作,如果可以的话,我该如何处理? (我希望这些数字转到将在网页中引用的gif或jpeg。)

TIA

2 个答案:

答案 0 :(得分:1)

理论上,它应该按预期工作。

记住并尝试解决的问题包括:

  1. 如果您的环境未提供X DISPLAY,则仅gnuplot图形工具包可用。如果您想“伪装” x显示以允许使用其他图形工具包(例如graphics_toolkit('qt')),请考虑通过xvfb-run运行八度,它模拟了一个“哑” x服务器。 (即以xvfb-run octave的形式启动八度,请参见https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=805295)。

  2. 有时,当您尝试绘制“屏幕外”内容时,OpenGl会抱怨。如果您的图像默认设置为不可见,则可以解决此问题,这仍然允许打印图像而不必出现在屏幕上。为此,在绘制任何东西之前,将“根”图形对象设置为不可见:

    set(0, 'defaultfigurevisible', 'off')
    

具体来说,您的代码可能如下所示:

gnuplot_toolkit('qt';)   # optional, if run via xvfb-run or the AWS supports an X Display
set(0, 'defaultfigurevisible', 'off');
h = plot( 1 : 10 );
saveas( h, 'out.png', 'png' ); # you can replace 'png' with 'gif' or 'jpg' etc.

答案 1 :(得分:0)

我下载了Octave并将其安装在Mac上的VMware上运行的Ubuntu Mace操作系统上。这部分是无缝且容易的。首先,我使用以下命令在Mac上使用Matlab在无头模式下测试了代码:

/Applications/MATLAB_R2018a.app/bin/matlab -nodisplay  -nosplash -nodesktop -r "run('mycode.m');quit;"

它产生了正确的输出,该输出是将四个图形另存为jpeg并将某些分析文本存储到stdout的图形。

然后,我使用Octave切换到Ubuntu计算机。这导致了多次失败。 Octave缺少Matlab核心中的许多功能。就像readtable()一样,它读取一个csv文件。它还缺少表对象的概念。因此,我被水淹死了。

我启动了Octave的交互式版本,以查看它具有什么功效,并且绘图无法正常工作。要制作plot()函数,我必须执行以下操作:

graphics_toolkit ("gnuplot");

然后,Plot很好地工作,并且与Matlab保持一致,但是在没有大量努力和全新代码分支的情况下,缺少太多其他内容来移植我的项目。

所有这些,我认为Octave是一个非常不错的工具,但是我也相信它与Matlab 2018a的差异如此之大,以至于几乎不可能互换使用两者。

我叫Mathworks,我的许可证允许我运行2个副本,但我不知道它们不必在同一操作系统上。因此,我可以在数据服务器上安装Linux版本,然后继续在Mac上进行开发。问题解决了。谢谢Mathworks。