Как видно из названия, у меня есть код Matlab для распознавания изолированных слов, и я хочу иметь возможность интегрировать этот проект с другим, созданным с PHP для какой-либо цели. Я раньше не сталкивался с такой проблемой, другими словами, это первый раз для меня, когда мне нужно интегрировать PHP и Matlab, поэтому я действительно не знаю, с чего начать и как. Я прочитал несколько статей, но я не мог сделать это действительным.
У меня есть PHP 5.4.9
, Matlab r2012a
и Windows 7 OS
. файлы проекта matlab можно увидеть на github
Любая помощь будет принята с благодарностью.
Здесь у вас есть несколько вариантов:
установлен ли 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 .
Они будут компилировать вашу программу в исполняемый файл / сборка / 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 / сервлетов. В вашем случае приложение PHP будет взаимодействовать со средним уровнем, на котором запущен веб-сервис, построенный с использованием одного из двух вышеуказанных параметров (или просто создайте CGI-подобный сайт, на котором выполняются простые исполняемые файлы, созданные с использованием MATLAB-компилятора, как объяснялось ранее)
НТН
Чтобы помочь OP с запущенными командами системы с веб-страницы php, мой пост здесь имеет значение (скопировано ниже).
Мы делаем именно это все время. Я называю их страницами вуду. Вот какой рабочий код:
<?php $command="uptime"; $output; $retval; $errors=""; exec ( $command , &$output, &$retval ); echo $output[0]."\n"; unset($output); ?>
с<?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 с ~ в нем.
Одним быстрым взломом было бы скомпилировать ваш код Matlab в исполняемый файл, а затем использовать shell_exec()
PHP.
Трудная часть будет адаптировать ваш код Matlab (извините, я его не читал) таким образом, чтобы:
char
); Тогда все, что требуется, – это разобрать вывод Matlab обратно в PHP …
мой ответ будет состоять из двух частей:
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
в окнах, должно быть в вашем окружении. как ?
если вам нужно скомпилировать ваш скрипт в java:
java -jar yourjarfile.jar
2- как выполнить команду терминала из php? Я думаю, что ответы выше, хорошие, не нужно их повторять.
больше примечаний:
xss