正如标题所示,我有孤立的口语识别的MATLAB代码,我希望能够将这个项目与另一个用 PHP 制作的项目集成到一起目的
我以前不习惯处理这样的问题。换句话说,这是我第一次需要集成PHP和MATLAB时,所以我真的不知道从哪里开始以及如何。
我已阅读了几篇文章,但我无法使其有效。
我有PHP 5.4.9,MATLAB R2012A和Windows 7。 可以看到MATLAB项目文件on GitHub。
答案 0 :(得分:19)
你有几个选择:
是在部署PHP应用程序的服务器上安装MATLAB(而不是当前的开发环境)?如果是这样,您可以像使用PHP中的maltab -r "..."
命令相同的任何其他程序(EXECUTE
)直接调用它。以下是一些资源(同时也要检查链接的问题):
其他人评论了如何在PHP和MATLAB脚本之间传递输入/输出。例如,您可以设计MATLAB函数以接收WAV文件的路径作为输入,处理它并将任何结果图像保存到磁盘:
function myFunc(filename)
[y,Fs] = audioread(filename);
img = my_process_func(y,FS);
imwrite(img, 'out.png');
end
从PHP调用的是:
% of course you have to make sure "myFunc" is available on the MATLAB path.
% think: "addpath(..)" or just "cd(..)" into the directory first
matlab -wait -nodisplay -r "myFunc('audio.wav'); quit;"
然后您可以在PHP应用程序中读取输出图像。
如果没有,您可以使用哪些与部署相关的工具箱? MATLAB Compiler以及MATLAB Builder NE和MATLAB Builder JA等相关工具箱。
这些将分别将您的程序编译为可执行/ .NET程序集/ JAR文件,并且所有这些程序都需要安装免费的MCR Runtime。换句话说,可执行文件不需要在目标机器上安装完整的MATLAB,只需要在MCR运行时安装。
您将以与以前相同的方式运行可执行文件。
另一个产品是MATLAB Coder,它将您的MATLAB代码转换为C ++程序。编译时,它可以在没有任何外部要求的情况下运行。
Mathworks的新产品是MATLAB Production Server。我个人对此一无所知:)
另一种选择是使用TCP / IP在PHP和MATLAB之间进行通信。服务器将在MATLAB端运行,使用编写为C MEX文件或Java类的套接字编程。参见:
客户端是您的PHP应用程序。我们的想法是让MATLAB监听连接,读取客户端给出的任何输入,eval
,然后返回结果。这比其他选项更复杂,因为您必须处理序列化和其他事情,如并发。优点是MATLAB可以在单独的服务器上运行,甚至可以在云上的多个服务器上运行(参见this post)。
首先,确定哪种方法最适合您的项目,然后更容易回答具体问题。只需要首先查阅文档,MATLAB工具箱有很好的文档记录,通常包含很多示例。以下是MATLAB Compiler产品系列的一些特定资源:
请注意,它们专注于ASP.NET和Java JSP / servlet应用程序。在您的情况下,PHP应用程序将与运行使用上述两个选项之一构建的Web服务的中间层进行通信(或者只是设计一个类似CGI的站点,运行使用MATLAB编译器构建的普通可执行文件,如前所述)
HTH
答案 1 :(得分:4)
为了帮助OP从php网页运行系统命令,my post here是相关的(复制如下)。
我们一直这样做。我把它们称为伏都教页面。这是一些有效的代码:
<?php
$command="uptime"; $output; $retval; $errors="";
exec ( $command , &$output, &$retval );
echo $output[0]."\n";
unset($output);
?>
输出到网页:
13:40:19 up 22 days, 23:14, 0 users, load average: 0.04, 0.02, 0.00
我在下面的评论中添加了附加说明:
相对vs绝对路径可能很痛苦...... $command
可能需要/usr/bin/uptime
或另一个可能是/usr/bin/ls /home/chris/ftp
。通常,脚本的工作目录是它们存在于文件系统中的位置。 MATLAB是一个Windows程序,是吗?我的经验是你将需要程序的绝对路径和作为参数传递的任何文件,例如:$command="c:\\matlab\\matlab.exe c:\\www\\somefile.wav"
然后是愚蠢的NTFS名称所需的单引号,TAB命令行完成适用于示例。或者在其中使用适当的8.3名称。
答案 2 :(得分:3)
一个快速的黑客就是将你的Matlab代码编译成executable file,然后使用PHP的shell_exec()
。
困难的部分是调整你的Matlab代码(对不起,我没有读过它),以这样的方式:
char
字符串); 然后只需将Matlab输出解析回PHP ...
答案 3 :(得分:3)
我的回答分为两部分:
1-如何从终端运行matlab脚本? - 我将举一些关于从终端
运行matlab脚本的例子matlab -nojvm -nodesktop -r "run <the-script>.m"
matlab -nojvm -nodesktop -r "<the-script>"
matlab -nojvm -nodesktop -r "run <the/path>/<the-script>.m"
Windows中的 matlab
必须位于您的环境路径中。 how to ?
如果您需要将脚本编译为java:
java -jar yourjarfile.jar
2-如何从php执行终端命令? 我认为上面的答案是好的,不需要重复它们。
更多说明:
xss