APICulture

Generación dinámica de servicios web con funcionalidades CRUD

Tecnologías:

Logo de GoLogo de .NetIcono de AngularIcono de React


Keywords: Web development, web services, databases
Complejidad: 7.5

En muchas ocasiones nos es necesario implementar APIs sencillas para almacenar y consultar datos de un tipo determinado. Aunque ya existen plantillas y herramientas de scaffolding, al final termina siendo obligatoria la implementación de determinados componentes: handlers/controllers, conversores de datos, repositorios para almacenar dichos datos, filtros, etc.

El proyecto consiste en la creación de una aplicación web (tanto backend como frontend) que permita la creación dinámica de otros servicios web en base a unos datos determinados, unas operaciones que se deseen realizar sobre ellos (ejemplo: leer = GET, crear = PUT, borrar = DELETE) y unas fuentes de datos y almacenaje, como pueden ser bases de datos relacionales, no relacionales o simples archivos en disco. El nuevo servicio no se generará en código para su ejecución independiente, sino que, una vez almacenada su configuración, se interpretará de forma dinámica y se servirá a través de una ruta anidada del dominio principal.

El usuario configurará a través de la interfaz qué datos quiere almacenar en su servicio, cómo quiere almacenarlos y qué operaciones se pueden realizar sobre ellos. Asimismo, sería deseable poder establecer filtros adicionales para algunas operaciones (ejemplo: “dame los compradores cuyo nombre empiece por la letra A”), y además poder securizar determinados endpoints mediante una operación de login + un token proporcionado por los llamantes.

Audire

Aplicación para el registro de emociones e interacción con profesionales de la salud mental

Tecnologías:

Icono de Android Icono de Java kotlin typescript Icono de Angular Icono de React


Keywords: Web development, web services, databases
Complejidad: 7.5

Aproximadamente un 5% de la población española padece trastorno por ansiedad generalizada1. Uno de los problemas que sufren las personas afectadas y que acuden a terapia es la dificultad para registrar y poder comunicar efectivamente a los profesionales de la salud las emociones y sucesos de utilidad para su terapia. Mediante este proyecto queremos proporcionar una aplicación móvil para que estos pacientes puedan ir registrando estos datos entre sus diferentes sesiones de tratamiento.

Se pide desarrollar por tanto un sistema que comprenda los siguientes elementos:

  • Una aplicación móvil para el sistema Android en el que los usuarios puedan registrar sus emociones y los sucesos de su día a día. Este registro se llevará a cabo mediante un sistema de etiquetas asociadas a cada emoción. También se aceptará la introducción de texto libre, pero se preferirá una aproximación sistemática al problema.
  • Un servicio web que registrará estos datos. Se propone la utilización Google Firebase para la configuración del almacén de datos, así como para la creación de endpoints utilizando Cloud Functions para una aproximación serverless.
  • Una aplicación web para que los profesionales sanitarios puedan visualizar los datos enviados por los usuarios de la aplicación móvil. Se puede utilizar para ello Flutter u otro almacenamiento para archivos estáticos como S3.

Aunque ya existen aplicaciones similares2, están más orientadas a un registro personal y no tanto al envío de estos datos a los terapeutas.

Para la realización del proyecto se recomienda la utilización de tecnologías Cloud como las propuestas, aunque el alumno contará con cierto margen de decisión técnica.

[1] https://psiquiatria.com/ansiedad/epidemiologia-del-trastorno-de-ansiedad-generalizada
[2] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5977660/

AutoComics

Ilustración de comics a partir de descripciones textuales utilizando Deep Learning

Tecnologías:

Pytorch Icono de Phyton


Keywords: Deep Learning, Generative Modeling
Complejidad: 10

Los modelos generativos aprenden a describir un dataset como una colección de muestras aleatorias extraídas de una distribución de probabilidad de alta dimensionalidad. Una tarea generativa se consigue a partir de tomar nuevas muestras, como imágenes o texto, que no existen en el conjunto de entrenamiento pero que mantienen las características generales, tales como la coherencia y el realismo, de los datos originales. En los años recientes hemos presenciado avances notables en este campo, especialmente relacionados con imagen realista (GANs, VAEs, modelos de difusión) y el modelado de lenguaje natural (GPT, BERT).

Modelos de lenguaje grandes como GPT-3 han sido utilizados también para la creación de CLIP, un modelo que es capaz de anotar imágenes automáticamente con texto autogenerado. En este proyecto, se propone utilizar CLIP para dirigir un modelo generativo de imágenes naturales que ilustrarán las páginas de un comic a partir de textos que narren la historia. La idea de utilizar CLIP para guiar la generación de imágenes ha sido ya explorada por parte de la comunidad de ML/IA y está dando pie a una nueva ola de arte generada mediante IA, en la que el artista “crea” descripciones textuales ingeniosas que se utilizan para dirigir el modelo generativo y brindar un resultado artísticamente atractivo.

Dada la misma descripción textual, la imagen resultante depende de qué tipo de conocimiento visual y qué asociaciones entre imagen y texto han aprendido el modelo generativo y CLIP. El objetivo de este proyecto es entrenar un modelo generativo utilizando un dataset de imágenes de comics (dataset de ejemplo) para habilitar la ilustración guiada por CLIP de comics. Al ser ejecutado, el proyecto debería proporcionar una demostración visual de que este entrenamiento personalizado habilita la creación de ilustraciones más adecuadas que aquellas que se pueden obtener de modelos disponibles en la comunidad entrenados con datasets estándar tales como ImageNet.

Automatron

Crear una extensión para el IDE Visual Studio 2019 Community que permita a los usuarios grabar macros de tal manera que puedan automatizar la ejecución de tareas repetitivas.

Tecnologías:

Logo de .Net Icono de C#


Keywords: Visual Studio, Automation, Macros
Complejidad: 7

Crear una extensión para el IDE Visual Studio 2019 Community que permita a los usuarios añadir y gestionar macros de tal manera que puedan automatizar la ejecución de tareas repetitivas.

La extensión tiene que ser distribuible como un fichero VSIX de tal forma que pueda ser instalada en el IDE Visual Studio. El usuario tiene que poder crear macros, guardarlas y organizarlas, así como ejecutarlas en cualquier momento desde la ventana de macros o mediante alguna combinación de teclas.

Las macros deben consistir en un código que el usuario pueda editar y ejecutar para realizar tareas sobre el IDE. Para ello, las macros deben dar acceso al usuario a las APIs de automatización de Visual Studio.

Una vez desarrollada la infraestructura básica, se creará un conjunto de macros de ejemplo para demostrar su funcionamiento. Se proponen los siguientes ejemplos:

  • Macro “Nuevo setting”. Supongamos una aplicación que tiene un conjunto de settings de configuración en un fichero XML. Cuando el desarrollador quiere añadir un nuevo setting tiene que modificar el fichero de configuración y todo el código que procesa esos settings. La tarea es repetitiva porque siempre consiste en el mismo tipo de cambios para cada settings nuevo. Crear una macro que permita automatizar esta tarea preguntando al usuario por la información necesaria.
  • Macro “Event handlers checker”. Crear una macro que cuando sea ejecutada en un proyecto C# revise los ficheros fuente de una solución comprobando si todas las subscripciones realizadas a un “event handler” son posteriormente destruidas.
  • Macro “Documentación mínima”. Crear una macro que cuando sea ejecutada sobre un fichero de código fuente C# añada los comentarios de documentación mínimos en aquellos elementos (clase, métodos, propiedades, etc.) que no los tengan.

Una funcionalidad opcional avanzada sería la grabación automática de macros en base a las acciones del usuario durante el tiempo de grabación, posibilitando que algunos elementos de dicha macro (valores, nombres de archivo) sean parametrizables al después ejecutarla.

BloodSugarVoiceAssistant: What’s My Blood-Sugar Level?

Información y alertas sobre nivel de azúcar utilizando asistentes de voz

Tecnologías:

Icono de Android Icono de Node JS Logo de Go


Keywords: Diabetes, Voice Assistance, NFC, AI
Complejidad: 8

Hoy en día es sencillo medir el nivel de azúcar en sangre tanto con lectores NFC como con un Smartphone, pero siempre has de tener el dispositivo cerca. Con la aparición de los asistentes de voz como Alexa, Google Home, o incluso Siri o Bixby (Samsung), ya no tendría por qué ser necesario estar pendiente del dispositivo en sí, y poder preguntar a tu asistente cuál es tu nivel de azúcar en cada momento, o incluso configurar alertas para que te avise cuando llegues a un nivel peligroso, tanto a ti como a otra persona.

El alumno deberá crear un servicio en la nube que dará valores aleatorios de glucosa en sangre en intervalos de tiempo (un minuto). Este servicio, en función del kit de desarrollo elegido será un servidor en Golang o NodeJS.

El siguiente paso, consistirá en crear el Skill para el voice assistant deseado, que se conectará con el servicio en la nube para obtener los datos.

A continuación, deberá crear un servicio en Android (puede ser una aplicación móvil fake) que suba valores de glucosa al servicio en la nube en intervalos de tiempo (será los datos que recupere el asistente de voz).

El happy path por tanto será:

  1. Servicio en nube que recoja datos de una App Móvil donde los guardará en una base de datos.
  2. App Móvil que suba datos de glucosa ficticios a intervalos.
  3. Asistente de voz conectado al servicio en nube para responder a comandos de glucosa.

El proyecto continuará con las siguientes extensiones:

  1. Configurar alertas en la App Móvil para que cuando sobrepase el nivel máximo de hiperglucemia o el nivel mínimo de hipoglucemia aparezca una alerta en la App Móvil y el asistente de voz nos informe.
  2. Sincronizar el servicio en la nube con sensores de glucosa, tipo FreeStyle de Abbott, donde suban los datos al servicio en la nube, y permita leer las alertas de glucosa.

ChronoStreetTurist

Continuación del proyecto ChronoTurist, desarrollando una plataforma que permita a los usuarios subir sus propias imágenes y alinear las imágenes antiguas utilizando Google Street View

Tecnologías:

Icono de Unity Icono de Android Icono de Java kotlin Icono de C#


Keywords: Computer Vision, Augmented Reality
Complejidad: 7

ChronoTurist es una aplicación móvil que permite, mediante realidad aumentada, mostrar imágenes antiguas en la pantalla del móvil al apuntar la cámara hacia un edificio o localización de la que se disponen imágenes antiguas.

Fue realizada por alumnos de TFG en el curso académico 2020-21. Se desea evolucionar el proyecto ChronoTurist en tres fases diferentes:

  1. Permitir almacenamiento de las imágenes en la nube. Las primeras versiones de ChronoTurist tenían las imágenes y las localizaciones integradas en código. Se desea que la imágenes y localizaciones se puedan obtener de un servidor en la nube.
  2. En una segunda fase se desea evolucionar ChronoTurist de manera que los usuarios puedan subir sus propias imágenes, indicando la localización exacta, dirección e inclinación de la imagen. Estas imágenes subidas por los usuarios deberán ser aprobadas por un “administrador” para que sean accesibles al resto de usuarios. Opcionalmente esta localización, dirección e inclinación podría ser obtenida “en el campo” utilizando la propia aplicación.
  3. La tercera fase consiste en agregar una nueva funcionalidad a ChronoTurist de manera que se puedan integrar las imágenes antiguas en las fotos actuales de Google Street View.

El alumno recibirá el código de ChronoTurist, y deberá primero hacerlo funcionar en sus dispositivos. A continuación, deberá modificarlo para que las imágenes se almacenen en el cloud (por ejemplo, Google Drive asociado a la aplicación). También las localizaciones de éstas.

Para la segunda fase será necesario desarrollar un servicio web que permita mantener la plataforma de gestión de las imágenes y los usuarios.

La fase 3 es opcional dependiendo de los créditos del TFG y de la evolución del alumno.

CompulsaSegura

Aplicación para compartir documentos de forma segura con autenticación biométrica y detección de manipulación

Tecnologías:

Icono de Android Logo de GoIcono de Java kotlin


Keywords: Mobile development, Biometrics, Secure Sharing, DRM
Complejidad: 8

Compartir datos de forma segura se vuelve cada vez más complicado. Aunque existen muchos mecanismos de autenticación, compartir documentos o fotografías sensibles sigue siendo un problema tanto para usuarios como para administraciones públicas, ya que son muy reticentes.

Por eso, con CompulsaSegura pretendemos estudiar la viabilidad de implementar un mecanismo seguro para compartir información sensible.

CompulsaSegura es una aplicación para dispositivos móviles en las que dos personas podrán compartir información sensible de forma segura. La aplicación hará lo siguiente:

  1. Se utilizará información biométrica para el intercambio de documentos. Idealmente, reconocimiento facial, por lo tanto, se registrará la cara del usuario. Esta información estará almacenada en el dispositivo móvil de forma segura. Como segunda opción se utilizarán las huellas dactilares.
  2. Un segundo usuario, enviará un documento o fotografía al primero, donde especificará el tiempo de vida de ese documento (tanto en visualización como almacenamiento en el dispositivo, si lo hubiera)
  3. El usuario que reciba el documento sólo lo podrá visualizar si la cámara delantera reconoce la cara del usuario y mientras haya una cara. Si no hay cara, entonces no se mostrará.
  4. Se bloqueará las capturas de pantalla.
  5. Opcionalmente, si se detecta, a través de la cámara delantera que hay un móvil u otro objeto que no sea la cara con intención de capturar la pantalla, el contenido se bloqueará y se enviará un mensaje al emisor del documento/fotografía.
    • Siempre que se intente romper el mecanismo de seguridad se lanzará una alerta que llegará al emisor (se obtendrá información del receptor a través de su smartphone, email, IP, etc.).

CryptoCards

Creación de un juego de cartas basado en blockchain Ethereum y NFTs

Tecnologías:


Keywords: Blockchain, Ethereum, NFT, Juego, Web services, Web development
Complejidad: 8,5

Los NFTs (non-fungible token) son unidades de datos almacenados en un libro de transacciones como puede ser una blockchain. Al contrario que las criptomonedas, se caracterizan por representar algo único, indivisible y con capacidad de ser transferido entre individuales.

Este proyecto consistiría en la creación de un juego de cartas coleccionables (al estilo de Magic) basado en la red Ethereum. Las cartas estarían representadas dentro de la blockchain como NFTs y podrían ser intercambiadas entre usuarios.

El juego debe de permitir la creación de nuevas cartas (por ejemplo, al registrarse mediante la obtención de unas cuantas cartas aleatorias de bajo valor, al ganar partidas a otros usuarios o mediante sobres sorpresa que se pudieran comprar con Ether y que contuviesen cartas aleatorias de más alto valor), así como jugar contra otros usuarios. Asimismo, también debe de permitir el intercambio de estas cartas entre los usuarios, creando un mercado virtual de compra-venta de las mismas.

El desarrollo del juego en sí mismo podrá realizarse utilizando Android (Java/Kotlin), tecnologías web o Unity. El juego podrá interactuar directamente con la blockchain, aunque se recomienda la creación de un backend (servicio web) que servirá tanto para este propósito como para la gestión de usuarios.

DeepScan4Failure

Detección de comportamiento anómalo en impresoras HP utilizando técnicas de Deep Learning

Tecnologías:

Icono de Phyton Pytorch


Keywords: Deep Learning, Anomaly Detection, Unsupervised Learning
Complejidad: 8

La detección de anomalías es el problema de identificar observaciones “raras” que son cualitativamente diferentes a la mayoría de los datos disponibles. Algunos ejemplos comunes de este tipo de observaciones singulares son los fraudes bancarios, las intrusiones en redes de computadores, los defectos en fabricación a gran escala, etc. Uno de los desafíos para desarrollar métodos efectos para detectar anomalías es la baja disponibilidad de datos etiquetados, lo que requiere conocimiento detallado de expertos en el dominio en concreto y anotaciones manuales que tienen un alto coste. Técnicas de Deep Learning deben de ser, en principio, capaces de extraer patrones anómalos a partir de una cantidad grande de datos no etiquetados.

Se propone el desarrollo de un modelo de machine learning para detectar comportamiento anómalo en las impresoras HP a partir de la inspección de archivos de log, que contienen información copiosa sobre una variedad de sensores y otros checks internos realizados por sofware. Una detección rápida de este tipo de comportamiento anómalo puede permitir llevar a cabo arreglos o mantenimientos antes de que la impresora se estropee completamente, o habilitar periodos de mantenimiento de la máquina más cortos.

Para este proyecto, HP SCDS proporcionará un dataset sintético, generado para simular el comportamiento estándar de impresoras reales, así como también el comportamiento anómalo causado por los problemas más comunes. La solución propuesta debe aprovechar técnicas de Deep Learning como los autoencoders (variacionales, VAEs). El dataset sintético estará completamente etiquetado, habilitando la validación rigurosa del rendimiento del modelo propuesto. No obstante, la aproximación del alumno debe de ser completamente no supervisada para ser utilizada sobre datos reales. Una posible extensión del proyecto podría ser el aprendizaje semi-supervisado para sacar partido a la disponibilidad de datos parcialmente etiquetados.

DeepScheduler

Gestión y ejecución de proyectos de Machine/Deep Learning en un entorno compartido

Tecnologías:

Icono de Angular Icono de React Logo de .Net Logo de Go Icono de Phyton


Keywords: Web development, web services, Deep Learning, Docker
Complejidad: 9,5

Uno de los problemas que se producen con frecuencia al desarrollar proyectos relacionados con Machine Learning, Deep Learning y similares es la disponibilidad de máquinas de adecuadas de cara a poder entrenar y validar los modelos desarrollados.

El proyecto consiste en la creación de una aplicación web que permita enviar solicitudes de trabajo remoto a un sistema compartido para la ejecución de este tipo de proyectos. Para ello deberán desarrollarse dos componentes principales:

  • La propia aplicación web donde los usuarios podrán reservar un periodo de tiempo para la ejecución de su código. Se deberá proporcionar la referencia a una imagen de Docker y su versión. Dicha imagen será autocontenida de cara a ejecutar el proyecto incluyendo tanto el código como los datos (dataset) necesarios.
  • El interfaz web tendrá ejemplos de Dockerfiles para proyectos estándar (Pytorch, TensorFlow, etc) y comandos para generar las imágenes.
  • Se deberán poder descargar los resultados una vez se ha ejecutado un trabajo, así como ver el estado de éste.
  • Un agente que debe ejecutarse en la máquina on-premises con el hardware especializado para ML/DL y que recibirá los trabajos aprobados escuchando a una cola de mensajes, creando las instancias Docker adecuadas para ellos.

Asimismo, será necesario desarrollar un código de orquestación que se incluirá en las imágenes base que se proporcionarán, que realice las funciones de ejecución del código, timeout cuando se supere el periodo máximo de ejecución y publicación de resultados hacia el nodo maestro.

DistributedRaspCloud

Creación de una nube privada distribuida de almacenamiento en Raspberry Pi

Tecnologías:


Keywords: Cloud, ARM, storage, web services, distributed computing, Docker
Complejidad: 7,5

Hoy en día, tanto el almacenamiento como el aprovechamiento de recursos está pasando a realizarse mediante sistemas en la nube, aprovechando ventajas como la contratación o baja automatizada de servidores dependiendo de las necesidades de cada momento, o la seguridad y redundancia que aportan las bases de datos distribuidas. Sin embargo, para garantizar una mayor confidencialidad, es posible que una empresa quiera construir su propia nube privada.

El proyecto consiste en montar un servicio de almacenamiento en una nube privada con las siguientes características:

  • Es una red distribuida, por lo que en cualquier momento puede añadirse o retirarse un servidor de la red, y que se configure de forma automática.
  • Se construirá una aplicación web para acceder a ella, y permitirá subir, borrar y descargar archivos, organizarlos en carpetas y compartirlos.
  • Contará con autenticación de usuarios para que cada uno sólo pueda acceder a los suyos (o aquellos que hayan sido compartidos con él).

El proyecto está pensado para ser desplegado sobre dispositivos Raspberry Pi (o similares) en la parte del servidor, pero deberá permitir que pueda añadirse cualquier servidor Linux, teniendo en cuenta que las dependencias del software desarrollado deben estar disponibles en la arquitectura ARM.

DoctorWritingOCR

Utilizando técnicas de visión artificial y machine learning se quiere desarrollar una aplicación que permita procesar un listado manuscrito perteneciente censos de habitantes del siglo XIX

Tecnologías:

Icono de Phyton Pytorch


Keywords: Computer Vision, Deep Learning, OCR
Complejidad: 7

Uno de los desafíos actuales es la incorporación a ficheros digitales de documentos escritos en la era pre-digital, de forma manuscrita y por personas con diferentes estilos de escritura y diferentes calidades caligráficas.

Se desea desarrollar una aplicación que permita analizar las imágenes escaneadas de un censo de habitantes como el de León de 1897. Dicho censo es un listado de 490 imágenes perteneciente a un libro donde se almacenaban, en columna, el nombre, la fecha de nacimiento, la edad, la profesión, la dirección y otra información de interés de cada habitante de la ciudad de León. El alumno sería libre de utilizar otros documentos diferentes.

Las columnas de información están bien delimitadas y en ocasiones (como con las fechas), los posibles valores son muy reducidos (números de 1 a 31, meses de enero a diciembre, etc). Empezando por estos campos más simples se desea ir desarrollando un modelo de Machine Learning y Visión Artificial que permita realizar un OCR de la escritura manuscrita realizada de este censo.

El alumno deberá generar un dataset a partir de las letras, dígitos y palabras encontrados en las primeras imágenes del censo, para, tras entrenar el clasificador, probar con el resto del dataset. Ya existe ejemplos desarrollados como Recognizing hand-written digits o OCR: Handwriting recognition with OpenCV, Keras, and TensorFlow.

Sin embargo, es muy probable que estas soluciones no funcionen bien con los textos propuestos. Por lo que sea necesario obtener un dataset nuevo con las muestras de escritura obtenidas de este censo y utilizarlo para entrenar un sistema de Deep Learning capaz de procesar el censo de 1897 (o equivalente).

El resultado final debería de ser un procesamiento completo del censo permitiendo disponer de la información disponible en un formato digital apto para su tratamiento posterior, por ejemplo, en archivos CSV con los campos separados en columnas.

EStudIA

Recomendador de estudios basado en ML/DL

Tecnologías:

Icono de Phyton Pytorch Icono de Node JS Icono de Angular


Keywords: Machine Learning, Deep Learning, Recommender, Web development
Complejidad: 7

Los estudiantes de Bachillerato se enfrentan, cuando lo terminan, a una difícil decisión: si deben continuar sus estudios y, en ese caso, ¿qué estudiar? Pueden escoger entre múltiples carreras universitarios, módulos formativos, formación profesional, etc.

Mediante este proyecto se quiere crear un sistema de recomendación de estudios basado en inteligencia artificial. Como entrada, este sistema realizará una serie de preguntas al usuario que se utilizarán como entrada al modelo de Machine Learning y que devolverá aquellas carreras y otros estudios más adecuados en base a las respuestas. Cabe decir que ya existe arte previo al respecto1,2, incluso basándose en la exploración de redes sociales.

Para el entrenamiento del sistema de Machine Learning será necesaria la recogida de datos de cara a la elaboración de un dataset. Para ello el alumno realizará entrevistas a diversos estudiantes y profesionales y utilizará los datos para el entrenamiento del modelo.

Finalmente, el sistema de cara al usuario será una aplicación web, opcionalmente con una vista móvil para el acceso desde este tipo de dispositivos.

[1] Career guidance based on machine learning
[2] How AI can help choose your next career and stay ahead of automation

IA/Boratory

Plataforma para la creación de experimentos utilizando A/B testing

Tecnologías:

Logo de .Net Logo de Go Icono de Java Icono de Angular Icono de React


Keywords: Web services, Web development, Cloud, A/B testing
Complejidad: 7

Las pruebas A/B son un tipo de experimentos que se utilizan en el contexto del marketing digital y la analítica web para identificar cambios que maximizan un resultado determinado. Por ejemplo, clientes diferentes de una página de compras online pueden ver productos diferentes, anuncios en diferentes lugares, o precios diferentes para el mismo producto, basados en dicho experimento. Mediante la obtención de métricas vinculadas al experimento se puede determinar la optimalidad de cada opción y finalmente tomar una decisión en base a los resultados.

Este proyecto consiste en la creación de una plataforma para la creación de experimentos A/B. El usuario podrá configurar mediante un interfaz web un experimento, con un nombre determinado (clave única), así como un conjunto de activaciones, que serán normalmente el tratamiento C (grupo de control) y la activación A1 (experimento activo), pero que pueden ser más: A2, A3, etc. Asimismo, podrá asignar determinados porcentajes de asignación a las activaciones, totalizando el 100%, por ejemplo 50% al grupo de control, 25% a la activación A1 y 25% a la activación A2. Opcionalmente se proporcionará la funcionalidad para deshabilitar el experimento totalmente (100% de asignación a C) o para lanzar completamente alguna de las activaciones (100% a A1, A2 o la activación deseada).

Por otro lado, un usuario de una web que a su vez utilice este servicio de experimentación siempre debería obtener el mismo tratamiento. Por lo tanto, el proyecto incluirá un servicio web que expondrá una API que permitirá obtener el valor (C, A1, A2, etc) del experimento para una determinada clave única: user ID, customer ID, la semántica debe de ser abstracta. Cuando se consulte el tratamiento para un experimento por primera vez para una clave, se asignará un valor aleatorio en base a los porcentajes fijados para él. Sin embargo, posteriores consultas para la misma clave deben devolver el mismo valor para garantizar coherencia del experimento de cara al usuario final. Cuando se cambie la asignación de las activaciones se intentará mantener la asignación en la medida de lo posible para las parejas clave/tratamiento ya generadas, respetando no obstante los nuevos porcentajes. Finalmente, debe de ser posible crear una excepción (override) para una determinada clave, asignando un tratamiento específico.

Se valorará la utilización de tecnologías Cloud para la creación del servicio web en aras de garantizar la escalabilidad y redundancia de éste.

LecturApp

Aplicación para fomentar la lectura en niños, mostrando clips de realidad aumentada sobre la portada de un libro

Tecnologías:

Logo de .Net Icono de Angular Icono de Android


Keywords: Augmented reality, web development, mobile app
Complejidad: 8,5

La lectura es una base de formación crucial para los niños. Un libro no es solo un complemento de estudio, también es un portal a aventuras fantásticas y un compañero inseparable. Sin embargo, actualmente estamos inundados por multitud de entretenimientos audiovisuales mucho más fáciles de consumir, cuyos contenidos en muchos casos no se ajustan a la edad del consumidor.

El objetivo de esta aplicación es fomentar el hábito de la lectura en los más pequeños, facilitando varios puntos que inicialmente pueden ser un problema a la hora de decidirse por leer un libro:

  1. Desconocimiento de libros apropiados o recomendados: la aplicación podrá recomendar libros para el niño en base a varios factores, como la edad, los gustos personales o temas que puedan estar relacionados con el temario de las asignaturas del curso escolar.
  2. Desconocimiento de si un libro determinado pueda ser interesante: la aplicación deberá conectarse a algún servicio cloud (existente o no) para obtener información del libro. También podremos “escanear” el libro físico para mostrar un pequeño clip audiovisual con el resumen del mismo a modo de “trailer”, utilizando para ello realidad aumentada.
  3. Falta de alicientes para asumir el esfuerzo de leer: la aplicación “gamificará” la lectura. Al finalizar cada libro se podrá acceder a un “desafío” tipo quiz para ganar medallas y puntos. Puede plantearse una liga “escolar” o de “amigos” para fomentarlo.

Para la implementación de este proyecto necesitaremos superar retos muy interesantes, relacionados con algunas de las tecnologías más actuales:

  • Desarrollo de aplicaciones multiplataforma, con uso de Web API y acceso a datos
  • Implementación de sistemas de realidad aumentada en dispositivos móviles
  • Escaneo y reconocimiento de textos y objetos mediante dispositivos móviles
  • Aumento de funcionalidades de la aplicación mediante microservicios
  • Gamificación de aplicaciones con trasfondo educativo o formativo

Queda a decisión del alumno los frameworks y lenguajes de desarrollo, pero se recomienda:

  • C# (.NET 6) para el backend
  • MAUI (.NET 6) o Angular para el frontend
  • ARCore para el módulo de realidad aumentada
  • Visual Studio como herramienta principal de desarrollo

LightSaver

Aplicación web para control domótico en base a los precios de la luz

Tecnologías:

Logo de Go Logo de .Net Icono de Java Icono de Angular Icono de React


Keywords: Web development, home automation, remote APIs, fault tolerance
Complejidad: 6,5

Desafortunadamente, nuestro país es uno de los países del mundo con la electricidad más cara. La reciente reforma de los tramos horarios, separándolos en tres, valle, llano y punta, así como el alza de los precios, han dejado a los consumidores en un mar de incertidumbre sobre cuándo realizar tareas domésticas cotidianas y el sablazo a esperar en su siguiente factura eléctrica. No obstante, Red Eléctrica Española expone una serie de APIs que proporcionan información sobre los precios de la luz, lo cual puede ser utilizado para intentar optimizar nuestro consumo doméstico.

El proyecto consiste en la creación de una aplicación web para realizar las siguientes operaciones:

  • Consultar los precios actuales (día actual, día siguiente cuando esté disponible) e históricos de la electricidad, por tramos y con desglose horario.
  • Añadir enchufes inteligentes (será necesario investigar con qué modelos se puede interactuar fácilmente) y controlarlos remotamente (on/off).
  • Permitir programar los enchufes inteligentes, bien de forma manual estableciendo hora de inicio y finalización, bien indicando un número de horas determinado para que estén encendidos y buscando el bloque horario óptimo para ello. El caso de uso típico para esto es la calefacción mediante acumuladores eléctricos.

Idealmente también debería de ser posible consultar el consumo instantáneo y acumulado de cada uno de los dispositivos inteligentes, tanto en kWh como, multiplicando por el precio, en dinero. Por otro lado, además de los enchufes inteligentes puede ser deseable controlar otro tipo de dispositivos domóticos, como lavadoras, lavavajillas, televisores o cualquier otro elemento conectado.

LocalizeMe

Sistema de gestión de cadenas de localización en tiempo real

Tecnologías:

Logo de .Net Logo de Go Icono de React Icono de Angular


Keywords: Web development, web services, real time, localization
Complejidad: 7,5

Una de las partes más importantes de cualquier aplicación software es la localización e internacionalización de ésta. Proporcionar a los clientes una experiencia coherente, sea cual sea su idioma nativo, es muy importante, y textos sin traducir o malas traducciones son lo que marca la diferencia entre una aplicación descuidada y una aplicación auténticamente profesional.

Por otro lado, la gestión de las cadenas de localización es en muchas ocasiones una pesadilla para los desarrolladores: cadenas añadidas, cadenas borradas, cadenas modificadas mientras se espera la traducción de una versión anterior, traducciones urgentes porque se han cometido errores (¡incluso con palabras ofensivas!) en alguna de ellas, etc.

Además, aunque muchas aplicaciones incluyen sus cadenas de localización en archivos estáticos, en aplicaciones conectadas (aplicaciones web, aplicaciones móviles) es deseable poder obtener las traducciones en tiempo real desde un servidor remoto. Esto permite cambios rápidos in tener que hacer una nueva release o deploy.

El objetivo de este proyecto es crear una aplicación web que proporcione las siguientes funcionalidades:

  • Añadir cadenas para su localización, con un identificador único, un grupo de cadenas (o aplicación), un texto de origen y su lenguaje asociado (normalmente inglés), y una descripción.
  • Exportar cadenas no traducidas al formato estándar XLIFF de tal forma que puedan ser enviadas a las agencias de traducción e importar las traducciones recibidas desde el citado formato XLIFF.
  • Modificar y borrar cadenas. Asimismo, gestionar versiones de cada cadena, así como el estado en el que están (beta/preproducción/producción).
  • Obtener cadenas remotamente para un determinado estado (stage) de los indicados arriba (beta/preproducción/producción) según el identificador de la cadena.
  • Buscar cadenas por su identificador, grupo o contenido. Cuando se añada una nueva cadena se sugerirá importar las traducciones para ésta si ya existe una cadena con el mismo texto (no debe de hacerse automáticamente: el contexto puede ser diferente).

Idealmente el backend de la aplicación debería poder ser ejecutado en múltiples máquinas a la vez, consumiendo sus datos desde una base de datos remota y/o distribuida, para permitir balanceo de carga y redundancia en caso de que alguno de los nodos deje de estar operativo.

MultiLayerRL

Optimización del diseño MultiLayerRL de estructuras ópticas multicapa mediante técnicas de aprendizaje reforzado profundo

Tecnologías:

Pytorch Icono de Phyton


Keywords: Deep Learning, Reinforced Learning, Optical Devices
Complejidad: 8

Las estructuras multicapa son una de las tecnologías ópticas más estudiadas y empleadas debido a su gran número de aplicaciones1, tanto como elementos ópticos (espejos, filtros, divisores de haz, polarizadores, …) como en una amplia variedad de tecnologías (células solares, pantallas, elementos arquitectónicos, etc.).

En su diseño se emplean técnicas de optimización, que permiten el diseño de unas propiedades ópticas a la carta. Uno de los métodos de optimización que ha ganado más popularidad en los últimos años es el aprendizaje reforzado profundo2 (Deep Reinforcement Learning, DRL en inglés). La introducción de redes neuronales en algoritmos de RL ha permitido su aplicación en escenarios complejos, como la resolución de videojuegos3,4, o incluso superar a contrincantes humanos en juegos como el Go5. Debido a su generalidad, también muy recientemente se han comenzado a aplicar técnicas de DRL en el diseño de estructuras multicapa6,7.

En este trabajo se propone emplear técnicas de RL para un caso sencillo de diseño de una estructura multicapa.

  1. Macleod, H. A. Thin-Film Optical Filters: Fifth Edition. (Boca Raton, FL CRC Press, Taylor & Francis Groups, 2018). doi:https://doi.org/10.1201/b2196
  2. Sutton, R. & Barton, A. Reinforcement Learning.
  3. Mnih, V. et al. Human-level control through deep reinforcement learning. Nature 518, 529–533 (2015).
  4. Schulman, J., Wolski, F., Dhariwal, P., Radford, A. & Klimov, O. Proximal policy optimization algorithms. arXiv 1–12 (2017).
  5. Silver, D. et al. Mastering the game of Go without human knowledge. Nature 550, 354–359 (2017).
  6. Jiang, A., Osamu, Y. & Chen, L. Multilayer optical thin film design with deep Q learning. Sci. Rep. 10, 12780 (2020).
  7. Wang, H., Zheng, Z., Ji, C. & Jay Guo, L. Automated multi-layer optical design via deep reinforcement learning. Mach. Learn. Sci. Technol. 2, 025013 (2021).

OnePieceLess

Localización de una pieza de un puzle dentro de él mediante una foto de esta y una foto del puzle completo aplicando técnicas de visión artificial y machine learning

Tecnologías:

Pytorch Icono de Phyton Icono de Unity Icono de Angular Icono de React Logo de .Net Logo de Go Icono de C#Icono de OpenCV


Keywords: Computer Vision, Deep Learning, Web development, Android
Complejidad: 6,5

Se desea desarrollar una aplicación movil que permita importar una imagen de un puzle y luego una imagen de una pieza suelta.

La aplicación deberá buscar la pieza en la imagen completa. La pieza puede estar colocada en cuatro sentidos diferentes, por lo que será necesario comprobar las cuatro disposiciones de la pieza dentro de la imagen completa del puzle.

Es de suponer, por otra parte, que la resolución de la imagen completa y la de la pieza serán diferentes, siendo la resolución de la pieza superior a la de la imagen del puzle.

La aplicación deberá adaptarse a este hecho (pidiendo el ratio al usuario como parámetro inicial, o calculándolo en base al número de piezas del puzle, o incluso automáticamente utilizando técnicas de visión por computador). Puesto que no va a ser posible encontrar una concordancia del 100% para la localización de la pieza, la aplicación deberá permitir seleccionar un porcentaje de concordancia mínimo y mostrará aquellas localizaciones, dentro de la imagen completa, que se adecúen a ese valor.

Se desea realizar una interfaz web para la aplicación que deberá diseñar el alumno. Otra opción es desarrollar una aplicación móvil para llevar a cabo el mismo cometido.

Para todo ello se van a utilizar herramientas como Unity, Deep Learning y PyTorch. La idea es:

  1. Extraer la parte interior de la imagen de la pieza, eliminando los salientes y entrantes.
  2. Reducir la imagen resultante hasta la resolución de la imagen de referencia (puzzle completo).
  3. Rotarla y generar las 4 imágenes alternativas de la pieza.
  4. Extraer de la imagen de referencia todos los cuadrados de pixels que tengan el mismo tamaño.
  5. Buscar aquellos cuadrados con mayor similitud. El proceso se repetirá con las cuatro rotaciones extraídas del paso 2. Se mostrará sobre la imagen original un mapa de calor con las localizaciones más probables para la pieza utilizada.

OnPremiseDeviceAgent

Comunicación con dispositivos en redes privadas desde un entorno cloud

Tecnologías:

Logo de Go Icono de Node JS Icono de Angular Icono de React


Keywords: Web development, web services
Complejidad: 8,5

La implementación de plataformas web para la monitorización de dispositivos de HP es algo muy estandarizado. Hoy en día somos capaces de monitorizar estos dispositivos desde fuera de la red de los clientes a través de aplicaciones que son capaces de recolectar datos de los dispositivos.

Sin embargo, en muchas ocasiones nos falta comunicación desde un entorno externo (desde el Cloud, por ejemplo), para poder realizar acciones contra estos dispositivos sin estar en la misma red.

Por ello, el proyecto consiste en la creación de un servicio que, instalado dentro de una red privada, nos permita la comunicación con los dispositivos dentro de esa red y poder realizar acciones contra los mismos.

Se pide:

  • Creación de un servicio on-prem (Multiplataforma y/o Edge) con las siguientes funcionalidades:
  • Configuración de los dispositivos conectados.
  • Lectura de una cola de mensajes, en donde se encuentran las acciones a realizar contra los dispositivos.
  • Ejecución de las acciones contra los dispositivos.
  • UI servida a través de localhost en donde el usuario puede monitorizar que está pasando en el agente: dispositivos conectados, mensajes en cola, tasas de error etc.
  • Mock de un servicio Cloud:
  • Configuración de los tipos de mensajes que puede recibir el agente.
  • Enviar mensajes a los agentes instalados.

QuantumKernelsPlayDogVSCats

Desarrollo de un algoritmo híbrido cuántico/clásico basado en núcleos cuánticos (quantum kernels) para clasificar el dataset de perros vs. gatos

Tecnologías:

Icono de Phyton Pytorch


Keywords: Quantum Machine Learning, Quantum Kernels
Complejidad: 9

El largo y difícil camino hacia la construcción de computadores cuánticos con tolerancia a fallos ha alcanzado ahora un importante hito llamado la era Noisy-Intermediate-Scale Quantum (NISQ). Esto significa que podemos construir dispositivos NISQ, por ejemplo, pequeños dispositivos cuánticos que aún son susceptibles al ruido, pero que son capaces igualmente de llevar a cabo operaciones imposibles para ordenadores clásicos. La más importante y fundamental pregunta abierta es cómo utilizar las capacidades de los dispositivos NISQ para resolver problemas reales de una forma mejor que con aproximaciones clásicas.

Una aproximación prometedora es utilizar ideas tomadas prestadas del machine learning clásico y utilizar bucles de optimización clásica para ajustar los parámetros de un circuito cuántico que se utilizará para optimizar la resolución de ciertas tareas. Teniendo en cuenta esta analogía, parece natural considerar tareas tradicionales del machine learning tales como la clasificación y el agrupamiento. El objetivo de este proyecto es resolver un problema de clasificación binaria utilizando el método de núcleo cuántico. La mayoría de los algoritmos supervisados de aprendizaje automático cuántico pueden ser proyectados sobre este método (ver Ref. [1]), que se puede considerar una generalización del método de núcleo tradicional en el que el núcleo se calcula utilizando un dispositivo cuántico. Esto permite el cálculo eficiente de la correspondencia entre espacios de características grandes (Hilbert), y al menos existe un ejemplo en el que se obtiene un aumento de velocidad cuántico (aunque con el uso de ordenadores cuánticos tolerantes a fallos, ver Ref. [2]).

El problema de clasificación a resolver es la tradicional separación entre perros y gatos. Redes neuronales clásicas se utilizarán para proyectar las imágenes de perros y gatos hacia un número pequeño de características (parámetros) que especificarán el circuito cuántico que ejecutará el núcleo cuántico. Un bucle de optimización tradicional tal como el descenso de gradiente estocástico se utilizará para encontrar los parámetros óptimos. La ejecución de este proyecto requerirá utilizar librerías tales como TFQuantum, Pennylane y/o Quiskit, que permite la implementación de modelos híbridos cuánticos/clásicos de machine learning incluyendo capas de computación clásicas y cuánticas.

[1] Supervised quantum machine learning models are kernel methods
[2] A rigorous and robust quantum speed-up in supervised machine learning

RealTimeMetrics

Creación de una infraestructura de registro, consulta y visualización de métricas

Tecnologías:

Logo de .Net Icono de Angular


Keywords: Web services, web development, real time, dashboards
Complejidad: 8

Hoy en día, en el desarrollo de aplicaciones software, incluso aplicaciones clásicas de escritorio o aplicaciones embebidas, resulta cada vez más común la interacción de éstas con Internet. Ya sea para acceder a recursos que necesita la aplicación o para enviar datos o información.

A través de la exposición en Internet de APIs web, las aplicaciones software solicitan datos en muchas ocasiones, y en otras, envían información acerca de diferentes ámbitos. Reportes de información acerca de la ejecución de la aplicación (logs con información, warnings o errores que se producen en la misma) son un caso concreto. Una vez esta información llega a la API web, es responsabilidad de ella gestionarla. De múltiples maneras. Ya sea como simple reenvío contra otra API web, tratamiento de la información (almacenamiento en una base de datos, por ejemplo), o notificación de que ha llegado un nuevo evento y es necesario avisar a un cliente web de que tenemos un nuevo reporte. Y para visualizar todo esto, existe normalmente un dashboard. Este es un caso real, y éste es el caso que se propone y se quiere llevar a cabo con este proyecto.

Mediante la implementación de una aplicación web conectada a una base datos, ésta será la encargada de recibir información de un número de clientes indefinidos. Además, tendrá una responsabilidad doble. Sera capaz de gestionar la información que le llega, el almacenamiento en base de datos y la notificación a un número de clientes nuevamente indefinidos de que tienen que actualizar su vista, dado que se presentan nuevos reportes.

La infraestructura que será necesaria llevar a cabo, permitirá distribuir una colección de métodos, en una librería aparte, para que los diferentes clientes puedan contactar con la API web. De tal forma que los programas cliente simplemente deberán llamar a los métodos para notificar a la API web de que desean reportar nueva información. Además, por otro lado, la API web será la encargada de notificar a los clientes (un dashboard por ejemplo) que se encuentren subscritos, el aviso de que el frontend ha de cambiar, dado que en tiempo real se han recibido nuevos datos.

Frameworks como .NET 5/6 para la creación de la API web, ORMs como EF Core para la conexión y el modelaje de la base de datos utilizando técnicas de “code first”, frameworks como Angular para la construcción del cliente (dashboard) que recibirá notificaciones de la API web, y finalmente tecnologías como SignalR que permiten comunicar cliente-servidor con notificaciones asíncronas enviando información en tiempo real, permitirán llevar a cabo este proyecto.

ReverseNutrition

Identificación de los ingredientes y la información nutricional de un plato de comida en base a una fotografía

Tecnologías:

Icono de Phyton Pytorch Icono de OpenCV


Keywords: Deep Learning, Ingredients, Nutritional Facts
Complejidad: 7,5

En años recientes ha explotado el procesado de imágenes mediante técnicas de Machine Learning y Deep Learning. La clasificación de imágenes (por ejemplo, decir si en una imagen hay un perro o un gato), la detección de objetos (indicar dónde está ese perro o ese gato) o la segmentación semántica (dentro de una imagen, indicar qué áreas corresponden a una determinada categoría) son parte de dicho procesado.

En este proyecto se pide desarrollar un sistema de Deep Learning que, dada una imagen de un plato de comida, sea capaz de identificar sus ingredientes. Ya existe arte previo al respecto, como este paper sobre identificación de ingredientes o Inverse Cooking, un generador de recetas a partir de imágenes de comida. En nuestro caso queremos además que el sistema sea capaz de saber qué cantidad de cada ingrediente existe en la imagen, para calcular la información nutricional del plato (por cada 100g del mismo) en base a unas tablas para cada ingrediente o categoría de ingredientes. Asimismo, se podrán emitir alertas cuando determinados valores, por ejemplo, de hidratos de carbono (azúcares) o de grasas, superen ciertos valores, orientadas a personas con diabetes o con problemas de colesterol.

Sobre el dataset a utilizar, se recomienda la utilización de Recipe1M+, aunque cualquier otro conjunto de fotografías de platos de comida podrá ser utilizado.

El sistema podrá ser ejecutado desde línea de comandos, no obstante, se propone la creación de una aplicación web donde los usuarios puedan subir imágenes de platos y se ejecute el modelo de DL entrenado, mostrando los resultados al usuario. Alternativamente se podrá proporcionar una aplicación móvil en la que los usuarios utilicen fotos de los platos como entrada al sistema.

Sign2Text

Transcripción automática de lenguaje de signos a nivel de palabra utilizando técnicas de inteligencia artificial

Tecnologías:

Icono de Phyton Pytorch Icono de OpenCV


Keywords: Sign language, Deep Learning, Video processing
Complejidad: 9,5

La lengua de signos es una lengua natural de expresión gestual​ gracias a la cual, las personas con discapacidades auditivas pueden establecer un canal de comunicación con su entorno social, sea éste conformado por otras personas con problemas auditivos o por cualquier persona que conozca la lengua de signos empleada. Dicha lengua es específica para cada idioma y además puede ser utilizada a nivel de letra (un signo diferente para cada carácter) o a nivel de palabra, caso en el que la persona utiliza un único gesto complejo desarrollado a lo largo de un periodo de tiempo para expresar un concepto o idea.

Aunque ya existen transcriptores automáticos a nivel de letra y algunas aproximaciones para hacerlo a nivel de palabra, es esta segunda forma la que los usuarios de la lengua de signos utilizan para comunicarse normalmente, y nos ha parecido interesante explorar más la trascripción automática de este tipo de expresión.

El proyecto consiste en la creación de un sistema de inteligencia artificial (redes neuronales, Deep Learning, procesado de imagen y video) que sea capaz de interpretar una secuencia de vídeo de una persona comunicándose en lengua de signos y transcribir a texto las palabras que está utilizando.

En el caso de la lengua de signos americana a nivel de palabra (WLASL), existe un dataset muy completo con miles de secuencias cortas de vídeo disponible para su descarga. El alumno deberá procesar dicho dataset (eliminar entradas no disponibles, adaptar los vídeos, asociar cada palabra a un conjunto de archivos, etc) y utilizarlo para entrenar una red neuronal que sea capaz de aprender qué gestos se asocian a cada palabra en concreto. Para esto será necesario utilizar técnicas de Deep Learning como transformers, LSTM, procesado 3D (dos dimensiones para la imagen y una para el tiempo), etc. No obstante, el alumno es libre de la elección de otro dataset (en otro idioma o con otras características) si así lo desea.

Opcionalmente se puede proporcionar una aplicación (línea de comandos, aplicación web, aplicación móvil, etc) para procesar vídeos en tiempo real.

Orgullosos colaboradores

Colaboramos con las más prestigiosas universidades españolas.

PROPUESTA DE PROYECTO

Escribe aquí tu consulta e intentaremos atenderla lo antes posible. Ten en cuenta que, dependiendo de la cantidad de consultas recibidas nuestra respuesta, se podrá demorar unos días.


SUBIR