Я использую PHP-сервер на задней панели и базовую веб-страницу, которая просит пользователя загрузить изображение. Это изображение используется как вход в скрипт MATLAB для выполнения на стороне сервера.
То, что мне нужно, это нечто вроде сеанса MATLAB (непонятно для этого слова), который уже запущен на стороне сервера, который запускает сценарий MATLAB. Я знаю о команде: "matlab -nodesktop -nojvm"
которую можно использовать, но дело в том, что я не хочу снова и снова ссылаться на MATLAB, а просто выполняю сценарий MATLAB на текущем экземпляре MATLAB всякий раз, когда пользователь загружает изображение, получает результат (необходимо).
Есть некоторые ограничения:
1. ОС → Ubuntu
2. Невозможно использовать движок python.
Вы можете написать код Matlab, чтобы регулярно проверять папку для загрузки для новых изображений. Обработайте новые изображения, а затем переместите обработанные изображения в папку архива.
Чтобы проверить наличие новых файлов, используйте команду dir
FILES = dir(['path/to/upload/folder/*.PNG']);
Замените PNG-расширение на файлы изображений.
Для перемещения файлов используйте команду movefile
movefile('path/to/upload/folder/Filename.PNG', 'path/to/archive/folder/', 'f')
Чтобы запустить скрипт Matlab с терминала и сохранить его в фоновом режиме
/usr/local/MATLAB/R2014a/bin/matlab -nodisplay -nosplash -r "cd /path/to/matlab/code; MatlabScript" ; < ctrl > Z; bg; disown -h %1
Существует несколько интерфейсов для управления матрицей. Вероятно, лучшим вариантом для этого случая является matlabcontrol или механизм matlab для python (который по какой-то причине вы не можете использовать). На окнах третьей альтернативой будет com.
Помимо управления процессом Matlab, вы можете реализовать приложение в Matlab, которое получает данные, обрабатывает их и отправляет обратно. Я решил аналогичную проблему, используя apache xmlrpc в matlab.
Есть также некоторые материалы по обмену файлами в matlab, напрямую предоставляя консоль matlab через веб-интерфейс
Существует API для C++, где вы вызываете механизм Matlab, используя engOpen. Это откроет Matlab и опустит его, пока вы его не закроете. Затем ваша программа C++ может подождать и прослушать обработку изображения.
http://www.mathworks.com/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html
Другой вариант - скомпилировать скрипт Matlab как отдельный исполняемый файл. Жесткий код имени входного изображения и вывода и пусть PHP обрабатывает перемещение входов и выходов. Все, что требуется серверу, это вызвать исполняемый файл. Каждый раз, когда запускается Matlab, требуется около 5 секунд.