18

如标题所示,我有用于孤立口语识别的 MATLAB 代码,我希望能够将此项目与另一个使用PHP制作的项目集成,以达到某种目的。

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

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

我有 PHP 5.4.9、MATLAB R2012A 和 Windows 7。可以在 GitHub 上查看 MATLAB 项目文件。

4

4 回答 4

19

你有几个选择:

  • 如果 MATLAB 安装在将要部署 PHP 应用程序的服务器上(不是您当前的开发环境),您可以像使用任何其他程序 ( ) 一样使用PHPmatlab -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 编译器和相关工具箱,例如MATLAB Builder NEMATLAB Builder JA

    这些将分别将您的程序编译成可执行/.NET 程序集/JAR 文件,并且所有这些都需要安装免费提供的MCR 运行时。换句话说,可执行文件不需要在目标机器上安装完整的 MATLAB,只需要 MCR 运行时。

    您将以与以前相同的方式运行可执行文件。

    另一种产品是MATLAB Coder,它将您的 MATLAB 代码转换为 C++ 程序。编译后,无需任何外部要求即可运行。

    MathWorks 的新产品是MATLAB Production Server。我个人对此一无所知:)

  • 还有一种选择是使用 TCP/IP 在 PHP 和 MATLAB 之间进行通信。服务器将在 MATLAB 端运行,使用编写为 C MEX 文件或 Java 类的套接字编程。看:

    客户端是您的 PHP 应用程序。这个想法是让 MATLAB 监听连接,读取客户端给出的任何输入eval,然后返回结果。这比其他选项涉及更多,因为您必须处理序列化和并发等其他事情。优点是 MATLAB 可以在单独的服务器上运行,甚至可以在云上的多台服务器上运行(参见这篇文章)。

因此,首先,决定哪种方法最适合您的项目,然后回答具体问题会更容易......请始终先查阅文档,MATLAB 工具箱的文档非常详尽,通常包含许多示例。以下是一些特定于 MATLAB Compiler 产品系列的资源:

请注意,它们专注于 ASP.NET 和 Java JSP/servlet 应用程序。在您的情况下,PHP 应用程序将与运行使用上述两个选项之一构建的 Web 服务的中间层进行通信(或者简单地设计一个类似 CGI 的站点,运行使用 MATLAB 编译器构建的普通可执行文件,如前所述)。

于 2013-04-19T07:59:10.677 回答
4

为了帮助 OP 从 PHP 网页运行系统命令,我的帖子是相关的(复制如下)。

我们一直都在这样做。我称它们为巫毒教页面。这是一些工作代码:

<?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

我在下面的评论中添加的附加说明:相对路径与绝对路径可能很痛苦......$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 名称。

于 2013-04-15T23:12:55.597 回答
4

我的回答将分为两部分:

  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"
    

    matlabin Windows 必须在您的环境路径中。操作方法

    如果您需要将脚本编译为 Java:

    java -jar yourjarfile.jar
    
  2. 如何从 PHP 执行终端命令?我认为前面的答案很好,没有必要重复。

更多注释:

  1. 注意您的安全。你可能XSS很容易上当。
  2. 抽象您的代码并改进它以保存参数并输出到数据库。在Parallels或队列管理器中运行您的代码 。您可以创建一个REST服务。
  3. 单元测试。
  4. 使用 Linux。它更强大。
于 2013-04-16T07:08:16.183 回答
3

一种快速的技巧是将您的 MATLAB 代码编译成可执行文件,然后使用 PHP 的shell_exec().

困难的部分是以如下方式调整您的 MATLAB 代码(抱歉,我没有阅读):

  1. 它将以命令行界面样式(作为char字符串)接收其输入;
  2. 它将其结果作为文本输出到标准输出(MATLAB 中的文件 id #1)。

然后只需将 MATLAB 输出解析回 PHP ......

于 2013-04-11T22:26:47.530 回答