Запуск кода matlab из php

Как указано в заголовке, у меня есть код Matlab для распознавания выраженных словесных слов, и я хочу иметь возможность интегрировать этот проект с другим, сделанным с помощью PHP для некоторых цель. Я раньше не сталкивался с такой проблемой, другими словами, это первый раз для меня, когда мне нужно интегрировать PHP и Matlab, поэтому я действительно не знаю где начать и как. Я прочитал несколько статей, но я не мог сделать это действительным.

У меня есть PHP 5.4.9, Matlab r2012a и Windows 7 OS. файлы проекта matlab можно увидеть на github

Любая помощь будет принята с благодарностью.

Ответы

Ответ 1

У вас есть несколько вариантов:

  • установлен MATLAB на сервере, где будет развернуто приложение PHP (а не текущая среда разработки)? Если это так, вы можете вызвать его прямо так же, как любая другая программа (maltab -r "..."), используя все, что эквивалентно команде EXECUTE в PHP. Вот некоторые ресурсы (обязательно проверьте также связанные вопросы):

    Другие прокомментировали, как передать ввод/вывод между PHP и вашим MATLAB script. Например, вы можете создать свою функцию 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 NE и MATLAB Builder JA.

    Они будут скомпилировать вашу программу в исполняемый файл /Assembly Assembly/JAR, соответственно, и все они требуют свободно доступного MCR Runtime быть установленным. Другими словами, исполняемым файлам не требуется полная установка MATLAB на целевой машине, а только время выполнения MCR.

    Вы выполнили бы исполняемый файл таким же образом, как и раньше.

    Другим продуктом является MATLAB Coder, который преобразует ваш код MATLAB в программу на С++. При компиляции он может работать без каких-либо внешних требований.

    Новый продукт Mathworks - Сервер производства MATLAB. Лично я ничего об этом не знаю:)

  • Еще один вариант - использовать TCP/IP для связи между PHP и MATLAB. Сервер будет запускаться на стороне MATLAB, используя программирование сокетов, написанное как C MEX файл или Java-класс. См:

    Клиент, являющийся вашим PHP-приложением. Идея состоит в том, чтобы MATLAB прослушивал соединения, считывая любой вход, предоставленный клиентом, eval it и возвращает результат. Это более активно, чем другие варианты, поскольку вам приходится иметь дело с сериализацией и другими вещами вроде concurrency. Преимущество состоит в том, что MATLAB можно запускать на отдельном сервере, даже на нескольких серверах в облаке (см. этот пост).

Итак, во-первых, решите, какой подход лучше всего подходит вашему проекту, тогда было бы легче ответить на конкретные вопросы. Просто всегда консультируйтесь с документами, панели инструментов MATLAB очень хорошо документированы и обычно включают в себя множество примеров. Вот еще несколько ресурсов, характерных для семейства продуктов MATLAB Compiler:

Обратите внимание, что они сосредоточены на приложениях ASP.NET и Java JSP/сервлетов. В вашем случае приложение PHP будет взаимодействовать со средним уровнем, на котором запущен веб-сервис, построенный с использованием одного из указанных выше двух параметров (или просто создайте CGI-подобный сайт, на котором выполняются простые исполняемые файлы, созданные с использованием MATLAB-компилятора, как объяснялось ранее)

НТН

Ответ 2

Чтобы помочь 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 - это программа для окон, да? Мой опыт заключается в том, что вам потребуются абсолютные пути для программы и любые файлы, переданные в качестве аргументов, например: $command="c:\\matlab\\matlab.exe c:\\www\\somefile.wav" И тогда одиночные кавычки, необходимые для глупых имен NTFS, завершение командной строки TAB хорошо подходит для примеров. Или используйте правильное имя 8.3 с ~ в нем.

Ответ 3

Одним быстрым взломом будет скомпилировать ваш код Matlab в исполняемый файл, а затем использовать PHP shell_exec().

Трудная часть будет адаптировать ваш код Matlab (извините, я его не читал) таким образом, что:

  • Он получит свой ввод в стиле командной строки (как char),
  • Он выводит свои результаты в виде текста на стандартный вывод (идентификатор файла # 1 в Matlab).

Тогда все, что требуется, это разобрать вывод Matlab обратно в PHP...

Ответ 4

мой ответ будет состоять из двух частей:

1- как запустить matlab script с терминала?  - Я приведу пример о запуске matlab script из терминала

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 в окнах, должно быть в вашем пути к среде. как?

если вам нужно скомпилировать ваш script в java:

java -jar yourjarfile.jar

2- как выполнить команду терминала из php? Я думаю, что ответы выше хорошо, не нужно их повторять.

больше примечаний:

  • следите за своей безопасностью, вы можете быть xss ed легко
  • отрисуйте свой код и улучшите его, чтобы сохранить параметры и вывести их в базу данных, запустите свой код в параллелей или диспетчера очередей, вы можете создать службу REST.
  • unit test.
  • использовать linux, его гораздо более мощный.