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


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

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

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

Author: Amro, 2013-04-11

4 answers

Здесь у вас есть несколько вариантов:

  • Установлен ли MATLAB на сервере, где будет развернуто приложение PHP (не в вашей текущей среде разработки)? Если это так, вы можете вызвать его напрямую, как и любую другую программу (maltab -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 и связанные с ним наборы инструментов, такие как MATLAB Builder NE и MATLAB Builder JA.

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

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

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

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

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

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

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

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

НТХ

 19
Author: Amro, 2017-05-23 12:02:18

Чтобы помочь 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, завершение командной строки вкладки хорошо работает для примеров. Или используйте правильное имя 8.3 с ~ в нем.

 4
Author: Chris K, 2017-05-23 12:17:57

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

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

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

Затем все, что требуется, - это проанализировать вывод Matlab обратно в PHP...

 3
Author: Community, 2017-05-23 11:54:39

Мой ответ состоял бы из двух частей:

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

Если вам нужно скомпилировать свой скрипт на java:

java -jar yourjarfile.jar

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

Дополнительные примечания:

  1. смотреть для вашей безопасности вы можете быть xss легко изменены
  2. абстрагируйте свой код и улучшите его, чтобы сохранить параметры и выходные данные в базе данных, запустите свой код в параллелях или администраторе очередей, вы можете создать службу REST.
  3. модульный тест.
  4. используйте linux, он намного мощнее.
 3
Author: tawfekov, 2013-04-16 07:08:16