¿Cómo puedo ejecutar el código MATLAB para el reconocimiento de palabras habladas aisladas de PHP? -- php campo con matlab campo con matlab-deployment camp Relacionados El problema

How can I run MATLAB code for isolated spoken words recognition from PHP?


18
vote

problema

Español

Como lo indica el título, tengo un código MATLAB para Reconocimiento de palabras habladas aisladas , y quiero poder integrar este proyecto con otro hecho con php para algunos propósito.

No he usado para lidiar con dicho problema antes. En otras palabras, es la primera vez para mí cuando necesito integrar PHP y Matlab, así que realmente no sé por dónde empezar y 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 .

Original en ingles

As the title indicates, I have MATLAB code for isolated spoken words recognition, and I want to be able to integrate this project with another one made with PHP for some purpose.

I have not used to deal with such problem before. In other words, it's the first time for me when I need to integrate PHP and MATLAB, so I really don't know where to start and how.

I have read a couple of articles, but I couldn't make it valid.

I have PHP 5.4.9, MATLAB R2012A and Windows 7. The MATLAB project files can be seen on GitHub.

        
 
 

Lista de respuestas

19
 
vote
vote
La mejor respuesta
 

Tienes algunas opciones aquí:

  • Si MATLAB instaló en el servidor donde se implementaría la aplicación PHP (no su entorno de desarrollo actual), puede invocarlo directamente como cualquier otro programa ( matlab -r "..." ) usando lo que sea El equivalente al comando EXECUTE en PHP. Aquí hay algunos recursos (asegúrese de realizar también las preguntas vinculadas también):

    • Cómo llamar a MATLAB desde la línea de comandos e imprimir a STDOUT antes de salir
    • Ejecución de un archivo CMD sin aparecer
    • parámetros de paso _ script shell - script de octava

    Otros han comentado cómo pasar la entrada / salida entre PHP y su script Matlab. Por ejemplo, puede 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 de 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;"   

    Puede leer la imagen de salida en la aplicación PHP.

  • Si no, ¿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 de ensamblaje / jar, respectivamente, y todos requieren los libremente disponibles MCR Runtime que se instalará. 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ía el ejecutable de la misma manera que antes.

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

    Un nuevo producto de MathWorks es Servidor de producción de MATLAB . Personalmente no sé nada al respecto :)

  • Otra opción es usar TCP / IP para comunicarse entre PHP y Matlab. Un servidor se ejecutará en el lado de MATLAB, utilizando la programación de zócalo escrita como C Mex-Archivo o una clase de Java. Ver:

    • Biblioteca de envoltorio Matlab Mex Socket
    • Escribiendo pw.println () escribiendo java etc. en matlab

    El cliente es su aplicación PHP. La idea es tener a MATLAB que escucha las conexiones, leyendo cualquier entrada que reciba un cliente, 9988777664 y devuelva el resultado. Esto es más involucrado 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 separado, incluso en varios servidores en la nube (consulte esta publicación ).

Primero, decida qué enfoque se adapta mejor a su proyecto, entonces sería más fácil responder preguntas específicas ... Simplemente siempre consulte la documentación primero, las cajas de herramientas MATLAB están muy bien documentadas y generalmente incluyen muchos ejemplos. Aquí hay un par de más recursos específicos de Matlab Compiler Products Family:

  • webinar: implementación de aplicaciones con MATLAB
  • Archivo PDF: Matlab Application Deployment - Guía de ejemplo web < / li>

Tenga en cuenta que se concentran en aplicaciones ASP.NET y JAVA JSP / SERVLET. En su caso, la aplicación PHP se comunicaría con un nivel medio que ejecute un servicio web construido usando una de las dos opciones anteriores (o simplemente diseñar un sitio similar a CGI que ejecuta los ejecutables se basa en el compilador MATLAB como se explica anteriormente).

 

You have a few options here:

  • If MATLAB installed on the server where the PHP application would be deployed (not your current development environment), you can invoke it directly just like any other program (matlab -r "...") using whatever is the equivalent of EXECUTE command in PHP. Here are some resources (make sure to also checkout the linked questions as well):

    • How to call MATLAB from command-line and print to stdout before exiting
    • Running a cmd file without GUI popping up
    • Pass Parameters _ Shell Script - Octave Script

    Others have commented on how to pass input/output between PHP and your MATLAB script. For example, you could design your MATLAB function to receive the path of WAV file as input, process it and save any resulting image to disk:

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

    Which is invoked from PHP as:

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

    You could then read the output image in the PHP application.

  • If not, what deployment-related toolboxes do you have available? MATLAB Compiler and related toolboxes like MATLAB Builder NE and MATLAB Builder JA.

    Those will compile your program into an executable/.NET Assembly/JAR file respectively, and all of them require the freely available MCR Runtime to be installed. In other words, the executables do not need to have a full MATLAB installation on the target machine, only the MCR runtime.

    You would run the executable in the same manner as before.

    Another product is the MATLAB Coder, which converts your MATLAB code into C++ program. When compiled, it can run without any external requirement.

    A new product by MathWorks is MATLAB Production Server. Personally I know nothing about it :)

  • Yet another option is to use TCP/IP to communicate between PHP and MATLAB. A server would be run on the MATLAB side, using socket programming written as C MEX-file or a Java class. See:

    • MATLAB Mex Socket Wrapper Library
    • Writing Java's pw.println(), etc. in MATLAB

    The client being your PHP application. The idea is to have MATLAB listening for connections, reading whatever input is given by a client, eval it, and return the result. This is more involved than the other options, as you have to deal with serialization and other things like concurrency. The advantage is that MATLAB can be run on a separate server, even on multiple servers on the cloud (see this post).

So first, decide what approach best suits your project, then it would be easier to answer specific questions... Just always consult the documentation first, MATLAB toolboxes are very well documented and usually include many examples. Here are a couple more resources specific to MATLAB Compiler products family:

  • Webinar: Application Deployment with MATLAB
  • PDF File: MATLAB Application Deployment - Web Example Guide

Note that they concentrate on ASP.NET and Java JSP/servlet applications. In your case, the PHP application would communicate with a middle tier running a web service built using one of the above two options (or simply design a CGI-like site running plain executables built using the MATLAB Compiler as explained earlier).

 
 
   
   
4
 
vote

Para ayudar a la OP con los comandos del sistema de ejecución desde una página web de PHP, Mi post aquí es relevante (copiado a continuación).

Hacemos exactamente esto todo el tiempo. Les llamo las páginas de Voodoo. Aquí hay algún código de trabajo:

  <?php     $command="uptime"; $output; $retval; $errors="";     exec ($command, &$output, &$retval);     echo $output[0] . " ";     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: RELATIVOS VS Absolute Los caminos pueden ser un dolor ... $command Es posible que deba ser /usr/bin/uptime u otro podría ser /usr/bin/ls /home/chris/ftp . Normalmente, el directorio de trabajo de Scripts es 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 cualquier archivo pasado como argumentos, ejemplo: $command="c:\matlab\matlab.exe c:\www\somefile.wav" y luego se requieren comillas individuales para los nombres de NTFS tontos, la Ficha Command Line Termination funciona bien para ejemplos. O use el nombre de 8.3 adecuado con el ~ en él.

 

To help the OP with running system commands from a PHP webpage, my post here is relevant (copied below).

We do exactly this all the time. I call them voodoo pages. Here's some working code:

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

And the output to the webpage served:

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

And the additional note I added in the comments below: Relative vs absolute paths may be a pain... $command might need to be /usr/bin/uptime or another could be /usr/bin/ls /home/chris/ftp. Normally, scripts' working directory is where they live in the file system. MATLAB is a windows program, yes? My experience is you will need absolute paths for the program and any files passed as arguments, example: $command="c:\\matlab\\matlab.exe c:\\www\\somefile.wav" And then single quotes required for silly NTFS names, TAB command line completion works well for examples. Or use proper 8.3 name with the ~ in it.

 
 
     
     
4
 
vote

Mi respuesta estaría en dos partes:

  1. ¿Cómo ejecuto un guión de Matlab desde el terminal? Le daré un ejemplo sobre la ejecución de un script Matlab desde el 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 la ruta de su entorno. how-to .

    Si necesita compilar su script a Java:

      java -jar yourjarfile.jar   
  2. ¿Cómo ejecuto el comando terminal de PHP? Creo que las respuestas anteriores son buenas, y no hay necesidad de repetirlas.

Más notas:

  1. observa su seguridad. Usted podría ser XSS 'ed facilmente.
  2. Resumen su código y lo mejore para guardar parámetros y salida a la base de datos. Ejecute tu código en Parallels o jefe de cola. Puede crear una resto .
  3. prueba de unidad.
  4. usa linux. Es mucho más poderoso.
 

My answer would be in two parts:

  1. How do I run a MATLAB script from the terminal? I will give some example about running a MATLAB script from the 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 in Windows must be in your environment path. How-to.

    If you need to compile your script to Java:

    java -jar yourjarfile.jar 
  2. How do I execute the terminal command from PHP? I think the previous answers are good, and there isn't any need to repeat them.

More notes:

  1. Watch for your security. You might be XSS'ed easily.
  2. Abstract your code and improve it to save parameters and output to the database. Run your code in Parallels or queue manager. You might create a REST service.
  3. Unit test.
  4. Use Linux. It's much more powerful.
 
 
3
 
vote

Un hack rápido sería compilar su código MATLAB en un Archivo ejecutable Luego use el matlab -nojvm -nodesktop -r "run <the-script>.m" matlab -nojvm -nodesktop -r "<the-script>" matlab -nojvm -nodesktop -r "run <the/path>/<the-script>.m" 10 de PHP .

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

  1. recibirá su entrada en el estilo de la interfaz de la línea de comandos (como 13:40:19 up 22 days, 23:14, 0 users, load average: 0.04, 0.02, 0.00 11111 cadenas);
  2. Producirá sus resultados como texto a la salida estándar (ID de archivo # 1 en MATLAB).

Entonces, todo lo que se necesita es analizar la salida MATLAB en PHP ...

 

One quick hack would be to compile your MATLAB code into an executable file then use PHP's shell_exec().

The difficult part would be adapting your MATLAB code (sorry, I didn't read it) in such a way that:

  1. It will receive its input in command-line-interface style (as char strings);
  2. It will output its results as text to standard output (file id #1 in MATLAB).

Then all it takes is to parse the MATLAB output back into PHP...

 
 
       
       

Relacionados problema

-5  ¿Cómo verificar si el registro DNS para el dominio existe en la base de datos WHOIS en MATLAB?  ( How to check whether dns record for domain exist in whois database on matlab ) 
Caso 1: Si "Facebook.com" existe en la base de datos WHOIS (ya registrada), Matlab devolverá 0 Caso 2: Si "FGHASD.com" no existe en la base de datos WHOIS ...

2  No se pueden usar métodos .NET en MATLAB DLL desplegado  ( Cant use net methods in deployed matlab dll ) 
usando compilador de matlab sdk puedo desplegar mi matlab Código en una DLL que se puede cargar en una aplicación C #. Ahora también agregaría una referenci...

2  ¿Cómo puedo escribir el "Filtro" de Matlab -Function yo mismo?  ( How can i write the matlab filter function myself ) 
Me gustaría usar un filtro de Butterworth en una señal 1D. En Matlab, el guión se vería así: f=100; f_cutoff = 20; fnorm =f_cutoff/(f/2); [b,a] = butt...

1  ¿Cómo compilar la clase con Matlab Compiler SDK?  ( How to compile class with matlab compiler sdk ) 
Me gustaría compilar un paquete Java del código MATLAB. Tengo una clase en MATLAB: classdef MyClass properties Prop1 end events Event...

1  ¿Cómo incrustar MATLAB CTF en la biblioteca compartida?  ( How to embed matlab ctf in shared library ) 
He usado MCC para construir una biblioteca compartida que tiene la CTF incrustada, y luego creó una segunda biblioteca compartida que realmente expone la inte...

5  ¿Qué es Matlab? ¿Generate ejecutables?  ( What is matlab does it generate executables ) 
¿Qué es exactamente matlab / simulink? He tratado de entenderlo, pero solo me han confundido más confundido en el proceso. Sé que puede escribir programas...

0  ¿Cómo integrar MATLAB en C #?  ( How to integrate matlab in to c ) 
Tengo uis implementada utilizando el procedimiento C # .NET y de procesamiento de imágenes desarrollado en Matlab ..., debo saber una forma de integrar MATLAB...

1  MATLAB despliegue las rutas de la aplicación y otras dependencias  ( Matlab deploy application paths and other dependencies ) 
Tengo un código MATLAB que contiene varios archivos .M en sub carpetas. Cuando llamo al matlab, estoy usando la siguiente función. addpath(genpath('myfolde...

0  Podría estar creciendo dentro del bucle. Considere la preparación de la velocidad  ( Might be growing inside the loop consider prealocating for speed ) 
clear all k_1 = 37.6; miu_1 = 41; Den = 2.7; N = 100; n=1; phi(1)=1; for n=1:N phi(n)= 0.3*(n/N); K_s(n)= K_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n)); miu_s(n)= miu...

4  ¿Es posible llamar a las funciones de MATLAB desde Silverlight / C #?  ( Is it possible to call matlab functions from silverlight c ) 
¿Es posible llamar a Matlab Funciones de Silverlight / C #? ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos