如何从PHP运行MATLAB代码进行隔离的口语识别?

时间:2013-04-11 18:19:05

标签: php matlab matlab-deployment

正如标题所示,我有孤立的口语识别的MATLAB代码,我希望能够将这个项目与另一个用 PHP 制作的项目集成到一起目的

我以前不习惯处理这样的问题。换句话说,这是我第一次需要集成PHP和MATLAB时,所以我真的不知道从哪里开始以及如何。

我已阅读了几篇文章,但我无法使其有效。

我有PHP 5.4.9,MATLAB R2012A和Windows 7。 可以看到MATLAB项目文件on GitHub

4 个答案:

答案 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 NEMATLAB 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代码(对不起,我没有读过它),以这样的方式:

  1. 它将以命令行界面样式(如char字符串);
  2. 接收其输入
  3. 它会将结果作为文本输出到标准输出(Matlab中的文件ID#1)。
  4. 然后只需将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执行终端命令? 我认为上面的答案是好的,不需要重复它们。

更多说明:

  1. 注意您的安全性,您可能很容易xss
  2. 抽象你的代码并改进它以保存params&amp;输出到数据库,运行你的代码 parallels或队列管理器,您可以创建REST服务。
  3. 单元测试。
  4. 使用linux,它的功能更强大。