php matlab matlab-deployment

¿Cómo puedo ejecutar el código MATLAB para el reconocimiento de palabras habladas aisladas desde PHP?



matlab-deployment (4)

Como lo indica el título, tengo un código MATLAB para el reconocimiento de palabras habladas aisladas , y quiero poder integrar este proyecto con otro hecho con PHP para algún propósito.

No he usado para tratar este problema antes. En otras palabras, es la primera vez que necesito integrar PHP y MATLAB, así que realmente no sé por dónde empezar ni cómo.

He leído un par de artículos, pero no pude hacerlo válido.

Tengo PHP 5.4.9, MATLAB R2012A y Windows 7. Los archivos del proyecto MATLAB se pueden ver en GitHub .


Mi respuesta sería en dos partes:

1- ¿Cómo ejecutar el script matlab desde la terminal? - Daré un ejemplo de cómo ejecutar el script matlab desde la terminal.

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 en windows, debe estar en su ruta de entorno. cómo ?

Si necesita compilar su script a java:

java -jar yourjarfile.jar

2- ¿Cómo ejecutar el comando de terminal de php? Creo que las respuestas anteriores son buenas, no hay necesidad de repetirlas.

más notas:

  1. xss atento a su seguridad, usted podría ser xss fácilmente
  2. abstraiga su código y mejore para guardar parámetros y resultados en la base de datos, ejecute su código en paralelo o en el administrador de colas, puede crear un servicio REST
  3. prueba de unidad .
  4. Usa Linux, es mucho más potente.

Para ayudar a OP a ejecutar comandos del sistema desde una página web de php, mi publicación aquí es relevante (se copia a continuación).

Hacemos exactamente esto todo el tiempo. Los llamo páginas de vudú. Aquí hay un código de trabajo:

<?php $command="uptime"; $output; $retval; $errors=""; exec ( $command , &$output, &$retval ); echo $output[0]."/n"; unset($output); ?>

Y la salida a la página web servida:

13:40:19 up 22 days, 23:14, 0 users, load average: 0.04, 0.02, 0.00

Y la nota adicional que agregué en los comentarios a continuación: Las rutas relativas frente a las rutas absolutas pueden ser una molestia ... $command podría necesitar ser /usr/bin/uptime u otro podría ser /usr/bin/ls /home/chris/ftp . Normalmente, el directorio de trabajo de los scripts es el lugar donde viven en el sistema de archivos. MATLAB es un programa de Windows, ¿sí? Mi experiencia es que necesitará rutas absolutas para el programa y todos los archivos pasados ​​como argumentos, por ejemplo: $command="c://matlab//matlab.exe c://www//somefile.wav" Y luego se requieren comillas simples para los nombres tontos de NTFS, la finalización de la línea de comandos TAB funciona bien para los ejemplos. O use el nombre correcto 8.3 con ~ en él.


Tienes algunas opciones aquí:

  • ¿MATLAB está instalado en el servidor donde se implementaría la aplicación PHP (no en su entorno de desarrollo actual)? Si es así, puede invocarlo directamente como cualquier otro programa ( maltab -r "..." ) usando cualquier comando equivalente a EXECUTE en PHP. Aquí hay algunos recursos (asegúrese de revisar también las preguntas vinculadas):

    • Cómo llamar a MATLAB desde la línea de comandos e imprimir en stdout antes de salir
    • Ejecutando un archivo cmd sin que aparezca GUI
    • Parámetros de paso _ Shell Script - Octave Script

    Otros han comentado sobre cómo pasar la entrada / salida entre PHP y su script MATLAB. Por ejemplo, podría diseñar su función MATLAB para recibir la ruta del archivo WAV como entrada, procesarla y guardar cualquier imagen resultante en el disco:

    function myFunc(filename) [y,Fs] = audioread(filename); img = my_process_func(y,FS); imwrite(img, ''out.png''); end

    Que se invoca desde PHP como:

    % 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;"

    A continuación, puede leer la imagen de salida en la aplicación PHP.

  • Si no es así, ¿qué cajas de herramientas relacionadas con la implementación tiene disponibles? Compilador de MATLAB y cajas de herramientas relacionadas como MATLAB Builder NE y MATLAB Builder JA .

    Esos compilarán su programa en un archivo ejecutable / .NET Assembly / JAR, respectivamente, y todos ellos requieren la instalación gratuita de MCR Runtime . En otras palabras, los ejecutables no necesitan tener una instalación completa de MATLAB en la máquina de destino, solo el tiempo de ejecución de MCR.

    Ejecutarías el ejecutable de la misma manera que antes.

    Otro producto es MATLAB Coder , que convierte su código MATLAB en un programa C ++. Cuando se compila, se puede ejecutar sin ningún requisito externo.

    Un nuevo producto de Mathworks es MATLAB Production Server . Personalmente no sé nada al respecto :)

  • Otra opción más es usar TCP / IP para comunicarse entre PHP y MATLAB. Un servidor se ejecutaría en el lado de MATLAB, utilizando la programación de socket escrita como archivo C MEX o una clase Java. Ver:

    • Matlab Mex Socket Wrapper Library
    • ¿Escribir código Java en Matlab?

    El cliente es tu aplicación PHP. La idea es que MATLAB escuche las conexiones, lea la información que proporciona un cliente, la eval y devuelva el resultado. Esto es más complicado que las otras opciones, ya que tiene que lidiar con la serialización y otras cosas como la concurrencia. La ventaja es que MATLAB se puede ejecutar en un servidor independiente, incluso en varios servidores en la nube (consulte esta publicación ).

Entonces, primero, decida qué enfoque se adapta mejor a su proyecto, entonces sería más fácil responder preguntas específicas. Siempre consulte primero los documentos, las cajas de herramientas de MATLAB están muy bien documentadas y generalmente incluyen muchos ejemplos. Aquí hay un par de recursos más específicos para la familia de productos de MATLAB Compiler:

Tenga en cuenta que se concentran en las aplicaciones ASP.NET y Java JSP / servlet. En su caso, la aplicación PHP se comunicaría con un nivel intermedio que ejecuta un servicio web creado con una de las dos opciones anteriores (o simplemente diseñaría un sitio similar a CGI que ejecute ejecutables simples creados con el Compilador de MATLAB como se explicó anteriormente)

HTH


Un truco rápido sería compilar su código Matlab en un archivo ejecutable y luego usar shell_exec() PHP.

La parte difícil sería adaptar su código Matlab (lo siento, no lo leí) de tal manera que:

  1. Recibirá su entrada en el estilo de interfaz de línea de comandos (como cadenas de caracteres);
  2. Enviará sus resultados como texto a salida estándar (ID de archivo # 1 en Matlab).

Entonces, todo lo que se necesita es analizar la salida de Matlab de nuevo en PHP ...