【问题标题】:How can I run MATLAB code for isolated spoken words recognition from PHP?如何从 PHP 运行 MATLAB 代码以识别孤立的口语单词?
【发布时间】:2013-04-04 01:46:48
【问题描述】:

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

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

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

我有 PHP 5.4.9、MATLAB R2012A 和 Windows 7。 MATLAB工程文件可见on GitHub

【问题讨论】:

  • 如果您不想在服务器上安装 MATLAB,您可以使用 SaturnAPI,它提供了一个 REST 接口供您进行 HTTP 调用和来回传输数据。 saturnapi.com

标签: php matlab matlab-deployment


【解决方案1】:

一个快速的技巧是将您的 MATLAB 代码编译成 executable file,然后使用 PHP 的 shell_exec()

困难的部分是调整您的 MATLAB 代码(抱歉,我没有阅读它):

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

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

【讨论】:

  • 感谢您的回复,问题是输入是.wav 格式,输出是图像和字符串...这样有效吗?
  • 如果我尝试可执行的 Matlab 方式,我会将 path+filename.wav 作为参数传递给 Matlab 可执行文件,程序将输出 2 个字符串(例如,由换行符分隔) : 一个是你需要的字符串,另一个是 path+filename.png。
  • 还有一件事 --- 这是另一个处理将参数传递给 Matlab 可执行文件的 Stackoverflow 条目:stackoverflow.com/questions/3335505/…
  • 注意这里的安全问题。如果 PHP 应用程序对不受信任的用户开放,请确保转义任何未硬编码到应用程序中的参数。
【解决方案2】:

为了帮助 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

还有我在下面的 cmets 中添加的附加说明: 相对路径与绝对路径可能会很痛苦...$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代码你会发现它不能这样做,
  • Matlab 我不知道。如果您可以通过终端命令完成您所寻求的(如以下答案),那么我认为我的答案将有助于解决问题的更简单部分。
  • 这不是通过终端命令获得它。是的,最终这可能是一个很好的方法。但我所追求的不仅仅是执行一个程序,因为我需要与 matlab 代码进行交互。我可以使用 java builder 和/或 matlab 中的任何其他功能来进行完全控制,但我需要知道其中的所有步骤是什么,因为这不是一个常见的问题,恐怕我应该做出改变做到这一点。但那是什么转折?
【解决方案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'ed。
  2. 抽象代码并改进它以保存参数并输出到数据库。运行你的代码 Parallels 或队列管理器。您可以创建一个REST 服务。
  3. 单元测试。
  4. 使用 Linux。它更强大。

【讨论】:

    【解决方案4】:

    你有几个选择:

    • 如果 MATLAB 安装在将要部署 PHP 应用程序的服务器上(不是您当前的开发环境),您可以像任何其他程序 (matlab -r "...") 一样使用与 EXECUTE 等效的命令直接调用它php。以下是一些资源(请务必同时查看链接的问题):

      其他人评论了如何在 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 编译器构建的普通可执行文件,如前所述)。

    【讨论】:

    • +1 以获得如此精彩的描述。我正在尝试的是使用matlab builder JA。所以编译为 jar 文件是我开始的第一个选择。但像往常一样,我无法完全控制部署服务器。啊,使用java 和php 应该不是问题。我只需要考虑一些安全问题。非常感谢您的回答。我会接受它。但是,如果您有任何其他关于 Matlab->JAR->PHP(语音输入 -- 字符串和图像输出)的信息,我将不胜感激。谢谢。
    • @mamdouhalramadan:目前有 another open question 关于您可能感兴趣的 PHP/MATLAB 集成。具体来说,Sam Roberts 对如何减少 MCR 启动开销有一些很好的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多