dc.contributor.advisor | Cerquides Bueno, José Ramón | es |
dc.creator | Lerma Trevilla, Alfonso | es |
dc.date.accessioned | 2021-10-26T16:05:49Z | |
dc.date.available | 2021-10-26T16:05:49Z | |
dc.date.issued | 2021 | |
dc.identifier.citation | Lerma Trevilla, A. (2021). Interfaz web de intérprete de comandos de MATLAB. (Trabajo Fin de Grado Inédito). Universidad de Sevilla, Sevilla. | |
dc.identifier.uri | https://hdl.handle.net/11441/126877 | |
dc.description.abstract | En un principio, el presente trabajo de fin de grado estaba basado en un programa de MATLAB que
implementaba un sistema de reconocimiento de huella digital de audio, o audio fingerprint [1] [2]. El programa
era capaz de identificar, usando el micrófono del ordenador, pistas de audio que hubieran sido previamente
almacenadas en la memoria de programa, simulando una base de datos. Prácticamente se trataba de la misma
funcionalidad que el software comercial Shazam, de hecho, el artículo con el cual comenzó la investigación
para este trabajo es el que presentaba dicha tecnología [3].
La necesidad de facilitar el uso del programa y dar usabilidad a una pieza de software en la que se había
empleado cierto esfuerzo, motivó la búsqueda de una manera de implementar una interfaz gráfica. Estudiando
a fondo las herramientas que brinda MATLAB para convertir uno o varios scripts en una aplicación, se llegó a
compilar como ejecutable para Windows, resultando en un programa que, aun funcionando correctamente
apenas imprimía algo de información en la terminal, y la experiencia de uso era poco satisfactoria. El mal
rendimiento de dicha aplicación sirvió de estímulo para seguir probando otros caminos, en concreto, organizar
el código en un MATLAB Live Script, de forma que se pudiera visualizar un desglose de las etapas del
procesamiento para la extracción de fingerprints, incluyendo representaciones gráficas. El análisis de las
peculiaridades de los live scripts inspiró una inquietud que permitió tomar la decisión que más sentido pudo
aportar al proyecto: salir de MATLAB.
Salir de MATLAB se sentía como una buena idea tanto como una obsesión. En primer lugar, técnicamente
hablando, aun pareciendo buena idea, carecía de significado. Un motor de MATLAB, o MATLAB Runtime,
¿puede ser invocado desde cualquier “lugar” de un sistema operativo? ¿Es necesario tener abierta la aplicación
MATLAB? ¿Se puede usar en sí mismo el lenguaje MATLAB desde cualquier otro entorno de programación?
En otras palabras, ¿existe algo parecido a una API (Application Programming Interface) para comunicarse con
el interior de MATLAB desde una aplicación externa?
El entorno integrado de programación (IDE) Visual Studio Code, en adelante VSCode, de licencia libre, que
es utilizado ampliamente en todo el mundo por su versatilidad, cuenta con una gran cantidad de extensiones, y
resulta que algunas de ellas, brindan soporte para MATLAB. En concreto, inspeccionando la extensión
“MATLAB Interactive Terminal” [4] que no es más que un fragmento de código de Python, se halló la pieza
que dio sentido a este rompecabezas: MATLAB Engine API para Python. Este motor es simplemente un
paquete de Python que, tal y como su nombre indica, permite ejecutar funciones de MATLAB, y es uno de los
requisitos para poder usar correctamente la extensión de VSCode.
Una vez que fue posible ejecutar con éxito funciones propias de MATLAB desde un IDE externo, incluyendo
el sistema de audio fingerprint, se llegó a un punto de inflexión en el desarrollo del proyecto [5]. Estando en un
intérprete de comandos de Python, y conociendo las potentes herramientas o frameworks (entornos de trabajo)
que existen para programar aplicaciones con dicho lenguaje, la ocurrencia de diseñar y desarrollar una interfaz
web para acceder a MATLAB era prácticamente obvia. Aun existiendo MATLAB Online, que pagando una
licencia ya ofrece exactamente eso, la motivación de hacerlo con tecnología libre y moderna fue suficiente
para considerarlo algo útil.
De modo que, finalmente, el presente proyecto ofrece un prototipo de interfaz web para comunicarse con un
motor de MATLAB. El sistema cuenta con la estructura típica de frontend y backend de una aplicación web,
pudiéndose considerar como backend la combinación de la aplicación Python que hace uso del MATLAB
Engine API, y el motor en sí. Dicho backend se ha implementado usando FastAPI, un framework moderno y
de alto rendimiento para desarrollar APIs en Python [6]. Para la parte de la interfaz de usuario o frontend, por
comodidad y por existir algo de experiencia profesional previa, se ha optado por usar Angular, una de las
plataformas de desarrollo de aplicaciones web más usadas y con más soporte hoy en día. Dicha interfaz de
usuario será la que permita disfrutar de una experiencia más parecida al uso típico de la aplicación MATLAB,
ya que cuenta con el intérprete de comandos y la visualización de figuras. | es |
dc.description.abstract | Initially, this project was based on a MATLAB program that implemented an audio fingerprinting system. The
code was able to identify previously stored audio files using the computer’s built-in microphone, just the way
comercial software Shazam does. In fact, the article that triggered this projects’ research process is the one that
introduced that technology in 2001.
The quite poor experience that piece of software offered, motivated the research of implementing a user
interface. At one point, after going deep into the available tools MATLAB and MathWorks provide, it was
possible to compile the whole set of scripts into one single Windows executable file, but even working
properly as a console application, it merely prompted some text, and the user experience was nonexistent.
Furthermore, the bad performance encouraged other research paths, for example setting up a MATLAB Live
Script, so a step-by-step breakdown of the program could be analized and even visualized. Exploring and the
main particularities of the aforementioned Live Script allowed to make the most helpful decision so far:
stepping out of MATLAB.
Stepping out of MATLAB felt as a good idea the same way it felt like some sort of obsession. First of all,
technically speaking, while being a good plan, it was meaningless. Can a MATLAB engine or MATLAB
Runtime be invoked within “anywhere” in an operating system? Is it required to open MATLAB desktop
window? Can MATLAB language be used itself from any other environment? In other words, is there such
thing as an API (Application Programming Interface) that allows to communicate with MATLAB within an
external application?
The open source integrated development environment (IDE) Visual Studio Code, or VSCode, which is
globally spread beacuse of its versatility, has a wide variety of extensions to add support for different
languages, and luckily some of them provided tools related to MATLAB. More precisely, going deep into
“MATLAB Interactive Terminal”, which is just a short piece of Python code, it was found the main character
of this puzzle: MATLAB Engine API for Pyhton. This engine is just a Python package that, as its name
suggests, allows to run MATLAB functions.
Once it was posible to run MATLAB functions succesfully from VSCode, including the audio fingerprinting
system, a turning point was reached. Being placed in a Python command line interface, and, taking a look at
the powerful open source state-of-the-art tools available to build applications with that language, the idea of
designing and developing a web interface to access MATLAB was essentially obvious. Even with the
existence of MATLAB Online, which offers something similar, the fact of doing it with modern and open
source technology was enough for it to be considered something.
So, finally, this project delivers a prototype for a web application which interfaces with a MATLAB engine.
The system is structured as a typical frontend-backend web stack, considering as backend the combination of
the Pyhton application that makes use of the MATLAB Engine API, and the engine itself. This backend was
implemented using FastAPI, a high performance framework designed to build APIs using Python language.
For the graphical user interface or frontend, for the sake of simplicity and not having to learn yet another new
technology, Angular, a widely supported web development platform, was chosen. This user interface would
take it closer to the classic MATLAB application use, providing command-line interpreter functionality and
the visualization of figures. | es |
dc.format | application/pdf | es |
dc.format.extent | 67 | es |
dc.language.iso | spa | es |
dc.rights | Attribution-NonCommercial-NoDerivatives 4.0 Internacional | * |
dc.rights.uri | http://creativecommons.org/licenses/by-nc-nd/4.0/ | * |
dc.title | Interfaz web de intérprete de comandos de MATLAB | es |
dc.type | info:eu-repo/semantics/bachelorThesis | es |
dc.type.version | info:eu-repo/semantics/publishedVersion | es |
dc.rights.accessRights | info:eu-repo/semantics/openAccess | es |
dc.contributor.affiliation | Universidad de Sevilla. Departamento de Teoría de la Señal y Comunicaciones | es |
dc.description.degree | Universidad de Sevilla. Grado en Ingeniería de las Tecnologías de Telecomunicación | es |
dc.publication.endPage | 51 p. | es |