如何从PHP运行用于孤立口语词识别的MATLAB代码?
正如标题所示,我有用于孤立口语词识别的MATLAB代码,出于某种目的,我希望能够将此项目与另一个使用PHP制作的项目集成 我以前从未处理过这样的问题。换句话说,这是我第一次需要集成PHP和MATLAB,所以我真的不知道从哪里开始,如何开始 我读过几篇文章,但我不能使它有效 我有PHP5.4.9、MatlabR2012A和Windows7。如何从PHP运行用于孤立口语词识别的MATLAB代码?,php,matlab,matlab-deployment,Php,Matlab,Matlab Deployment,正如标题所示,我有用于孤立口语词识别的MATLAB代码,出于某种目的,我希望能够将此项目与另一个使用PHP制作的项目集成 我以前从未处理过这样的问题。换句话说,这是我第一次需要集成PHP和MATLAB,所以我真的不知道从哪里开始,如何开始 我读过几篇文章,但我不能使它有效 我有PHP5.4.9、MatlabR2012A和Windows7。 可以看到MATLAB项目文件。一个快速的方法是将MATLAB代码编译成一个文件,然后使用PHP的shell\u exec() 困难的部分是调整您的MATLAB
可以看到MATLAB项目文件。一个快速的方法是将MATLAB代码编译成一个文件,然后使用PHP的
shell\u exec()
困难的部分是调整您的MATLAB代码(对不起,我没有读过),使之:
char
strings)李>
然后只需将MATLAB输出解析回PHP…就可以帮助OP从PHP网页运行系统命令,这是相关的(复制如下) 我们一直都在这样做。我称之为巫毒页面。下面是一些工作代码:
<?php
$command="uptime"; $output; $retval; $errors="";
exec ($command, &$output, &$retval);
echo $output[0] . "\n";
unset($output);
?>
我在下面的评论中添加了补充说明:
相对路径与绝对路径可能是一种痛苦
$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名称,并在名称中加上~。我的答案将分为两部分:
matlab -nojvm -nodesktop -r "run <the-script>.m"
matlab -nojvm -nodesktop -r "<the-script>"
matlab -nojvm -nodesktop -r "run <the/path>/<the-script>.m"
XSS
'ed您在这里有几个选项:
- 如果MATLAB安装在部署PHP应用程序的服务器上(不是您当前的开发环境),您可以像其他任何程序一样直接调用它(
),使用PHP中与MATLAB-r“…”
命令等效的任何命令。以下是一些资源(请确保也签出链接的问题):EXECUTE
它从PHP调用为: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;"
- 如果没有,您有哪些与部署相关的工具箱?以及相关的工具箱,如和
它们将分别将您的程序编译成可执行文件/.NET Assembly/JAR文件,并且所有这些文件都需要安装免费提供的。换句话说,可执行文件不需要在目标机器上安装完整的MATLAB,只需要在MCR运行时安装即可
您将以与以前相同的方式运行可执行文件
另一个产品是将MATLAB代码转换成C++程序的产品。编译后,它可以在没有任何外部要求的情况下运行
MathWorks的一个新产品是。我个人对此一无所知:) - 另一种选择是使用TCP/IP在PHP和MATLAB之间进行通信。服务器将在MATLAB端运行,使用以CMEX文件或Java类编写的套接字编程。见:
it,然后返回结果。这比其他选项更复杂,因为您必须处理序列化和其他事情,如并发性。优点是MATLAB可以在单独的服务器上运行,甚至可以在云上的多个服务器上运行(请参阅)eval
注意,它们主要关注ASP.NET和JavaJSP/servlet应用程序。在您的情况下,PHP应用程序将与运行使用上述两个选项之一构建的web服务的中间层通信(或者简单地设计一个类似CGI的站点,运行前面解释的使用MATLAB编译器构建的普通可执行文件)。感谢您的回复,问题是输入是
.wav
格式,输出是图像和字符串。。。这是否有效?如果我尝试Matlab可执行文件的方式,我会将path+filename.wav作为参数传递给Matlab可执行文件,程序将输出2个字符串(例如,用新行分隔):一个是您需要的字符串,另一个是path+filename.png。还有一件事——这里是另一个Stackoverflow条目,处理将参数传递给Matlab可执行文件的问题:注意安全问题
function myFunc(filename)
[y,Fs] = audioread(filename);
img = my_process_func(y, FS);
imwrite(img, 'out.png');
end
% 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;"