web-dev-qa-db-ja.com

PHPから分離された音声認識用のMATLABコードを実行するにはどうすればよいですか?

タイトルが示すように、分離された音声認識のMATLABコードがあり、このプロジェクトをで作成された別のプロジェクトと統合できるようにしたい〜#〜] php [〜#〜]何らかの目的で。

私は以前にそのような問題に対処するのに慣れていません。言い換えれば、PHPとMATLABを統合する必要があるのは初めてなので、どこからどのように始めればよいのか本当にわかりません。

いくつかの記事を読みましたが、有効にすることができませんでした。

私はPHP 5.4.9、MATLAB R2012AおよびWindows 7を使用しています。MATLABプロジェクトファイルは GitHub上 で確認できます。

18

ここにはいくつかのオプションがあります。

  • PHPアプリケーションが展開されるサーバー(現在の開発環境ではない)にMATLABがインストールされていますか?その場合は、PHPのEXECUTEコマンドと同等のコマンドを使用して、他のプログラム(maltab -r "...")と同じように直接呼び出すことができます。ここにいくつかのリソースがあります(リンクされた質問もチェックアウトしてください):

    他の人は、PHPとMATLABスクリプトの間で入出力を渡す方法についてコメントしています。たとえば、WAVファイルのパスを入力として受け取り、それを処理して、結果のイメージをディスクに保存するようにMATLAB関数を設計できます。

    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ランタイム をインストールする必要があります。言い換えると、実行可能ファイルは、ターゲットマシンに完全なMATLABをインストールする必要はなく、MCRランタイムのみが必要です。

    以前と同じ方法で実行可能ファイルを実行します。

    別の製品は MATLAB Coder で、MATLABコードをC++プログラムに変換します。コンパイルすると、外部の要件なしで実行できます。

    Mathworksの新製品は MATLAB Production Server です。個人的に私はそれについて何も知りません:)

  • さらに別のオプションは、PHPとMATLABの間の通信にTCP/IPを使用することです。サーバーは、C MEXファイルまたはJavaクラスとして記述されたソケットプログラミングを使用して、MATLAB側で実行されます。見る:

    クライアントはPHPアプリです。アイデアは、MATLABが接続をリッスンし、クライアントから与えられた入力を読み取り、それをevalして、結果を返すことです。これは他のオプションよりも複雑です。なぜなら、シリアライゼーションや並行処理のような他のものに対処しなければならないからです。利点は、MATLABをクラウド上の複数のサーバー上でも別のサーバーで実行できることです( この投稿 を参照)。

したがって、最初にプロジェクトに最適なアプローチを決定し、次に特定の質問に答えるのが簡単になります。最初に常にドキュメントを参照してください。MATLABツールボックスは十分に文書化されており、通常は多くの例が含まれています。以下は、MATLAB Compiler製品ファミリーに固有のリソースです。

ASP.NETおよびJava JSP /サーブレットアプリケーションに集中していることに注意してください。あなたの場合、PHPアプリケーションは、上記の2つのオプションのいずれかを使用して構築されたWebサービスを実行する中間層と通信します(または、前述のように、MATLAB Compilerを使用して構築されたプレーンな実行可能ファイルを実行するCGIのようなサイトを設計します)。

HTH

19
Amro

PHPのWebページからシステムコマンドを実行する際にOPを支援するには、 ここに私の投稿 が適切です(以下にコピー)。

私たちは常にこれを正確に行っています。私はそれらをブードゥー教のページと呼びます。ここにいくつかの作業コードがあります:

<?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名に〜を付けて使用します。

4
Chris K

私の答えは2つの部分にあります:

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"

matlab in windows、環境パスにある必要があります。 方法?

スクリプトをJavaにコンパイルする必要がある場合:

Java -jar yourjarfile.jar

2- PHPからターミナルコマンドを実行する方法は?上記の答えは良いと思います。繰り返す必要はありません。

より多くのメモ:

  1. セキュリティに注意してください。簡単にxssになる可能性があります
  2. コードを抽象化し、パラメーターと出力をデータベースに保存するようにコードを改善し、コードを並列で実行するか、キューマネージャーを実行すると、RESTサービスを作成できます。
  3. 単体テスト 。
  4. はるかに強力なlinuxを使用します。
3
tawfekov

1つの簡単なハックは、Matlabコードを 実行可能ファイル にコンパイルして、PHPのShell_exec()を使用することです。

難しいのは、次のような方法でMatlabコードを修正することです(申し訳ありませんが、読みませんでした)。

  1. コマンドラインインターフェイススタイルで入力を受け取ります(char文字列として)。
  2. 結果をテキストとして標準出力(MatlabのファイルID#1)に出力します。

次に、Matlabの出力を解析してPHPに戻すだけです...

3
user2271770