AInotherBrickInTheWall

Aplicación de técnicas de reinforced learning al sector de la construcción mediante agentes en Unity

Tecnologías:

Icono de PhytonPytorchIcono de C#Icono de Unity


Keywords: AI, ML, agents, reinforced learning, construction, 3D
Complejidad: 9

El aprendizaje reforzado (reinforced learning) es un método de entrenamiento de machine learning basado en recompensar comportamientos deseados y castigar aquellos no deseados, al igual que se hace en el mundo de la psicología conductista.

En este tipo de aprendizaje, uno o más agentes de IA (basados en redes neuronales) interactúan con un entorno para conseguir una determinada meta. Así, los agentes pueden realizar un conjunto determinado de acciones, suficientemente abiertas, sobre el entorno, para alcanzar su objetivo. Por otro lado, los agentes perciben el entorno al igual que lo haría una persona, mediante una imagen (sentido de la vista), sonido, etc. Mediante la definición de unas recompensas y anti-recompensas adecuadas, las redes neuronales asociadas a los agentes van siendo entrenadas, por lo que estos cada vez realizan mejor su tarea.

En este proyecto proponemos la aplicación de técnicas de reinforced learning al sector de la construcción. Para ello deseamos utilizar Unity ML-Agents Toolkit, que permite integrar fácilmente agentes de IA en un entorno 3D desarrollado en Unity, mientras que las redes neuronales asociados a ellos se pueden entrenar de forma externa utilizando PyTorch u otro framework similar.

El alumno o alumna deberá desarrollar un entorno en el que uno o más agentes lleven a cabo una tarea relacionada con la construcción, como, por ejemplo, la construcción de un muro. Asimismo, se establecerán recompensas, que en el ejemplo del muro podrían ser su altura y resistencia, y anti-recompensas, que podría ser, por ejemplo, que el muro se caiga o terminar el material disponible.

Se recomienda al alumno o alumno la visualización de los ejemplos de uso del toolkit (más vídeos en la página oficial del proyecto y en esta introducción a ML-Agents) para ver qué es posible hacer, donde podrá ver a agentes jugando al fútbol, aparcando un coche, recolectando basura, etc.

AIskNet

Extensión de navegador para el uso de consultas por medio de modelos de NLP sobre la página web actual

Tecnologías:

Icono de JavascriptIcono de PhytonPytorch


Keywords: Web development, AI, NLP, browser extensions
Complejidad: 7

En este proyecto se propone la implementación de una extensión de navegador (Chrome, por ejemplo, aunque se valorará que esté disponible también para Firefox), la cual sirva como un asistente sobre el que se puedan hacer preguntas o pedir resúmenes de la página web que se está navegando. Dichas tareas serán realizadas por un modelo de lenguaje natural (NLP) basado en aprendizaje profundo.

El usuario podrá escoger entre realizar preguntas o resúmenes sobre la página completa o sobre una parte seleccionada en concreto. Una vez seleccionado y extraído el contenido deseado, la extensión llamará a un modelo de NLP para obtener la respuesta a la tarea planteada, ya sea la respuesta a una pregunta sobre el texto, un resumen de ese texto, etc.

Para la extracción de los resultados se usarán modelos de NLP ya entrenados previamente y de uso público, tales como los que se pueden encontrar en repositorios como HuggingFace Models.

Respecto a la inferencia (obtención) de resultados existen dos opciones que el alumno o alumna puede explorar: la primera sería una llamada a un servidor externo donde se éste ejecutando el modelo y que se haya desarrollado como parte del proyecto. La segunda, y quizá más interesante a explorar, es la ejecución del modelo en el navegador por medio de scripts de Python que hayan sido compilados previamente a WebAssembly, un lenguaje binario de reciente creación que permite ejecutar código dentro de un navegador, no sólo en JavaScript sino escrito en cualquier otro lenguaje (Python, C#, etc).

El alumno o alumna deberá tener en consideración aspectos de latencia y rendimiento a la hora de decantarse por una implementación en concreto, bien sea modelo cliente-servidor o ejecución dentro de navegador mediante WASM.

AlertsBot

Bot encargado de notificar a los usuarios del mismo de las alertas activas que hay en las impresoras registradas en él

Tecnologías:

Logo de GoIcono de AngularIcono de React


Keywords: Web services, web development, Cloud, bots, alerts, printers
Complejidad: 6

Las empresas o grandes reprografías suelen tener varias impresoras y sus empleados necesitan conocer el estado de estas, tanto para hacer tareas de mantenimiento (cambiar cartuchos, cargar papel, etc) como para conocer si son usables en ese momento.

Actualmente los usuarios tienen pocas opciones para conocer el estado de la impresora:

  • Ir físicamente al Front Panel para consultar el estado.
  • Acceder remotamente a la impresora para consultar el estado, mediante:
    • Web server impresora
    • Solución de impresión

Todas estas opciones necesitan que el usuario activamente consulte el estado o bien se le notifica mediante una solución propietaria que suele estar instalada en los ordenadores de los usuarios.

Este proyecto propone la creación de un Bot de alertas que se pueda conectar con uno o más sistemas que soportan bots (por ejemplo: Discord, Telegram) y que notifique al usuario con un mensaje cada vez que se produzca una nueva alerta en una de las impresoras configuradas en el mismo. Además, el bot dará la posibilidad al usuario de preguntar por el estado concreto de alguna de las impresoras configuradas, devolviendo todas las alertas activas en ese momento en la impresora.

Este sistema constará además un frontend, que permitirá añadir/editar/borrar las impresoras que se quieran al sistema. Y que serán estas de las que se notificarán sus alertas. Además, se podrá escoger para cada una de ellas, que nivel de alertas se quieren recibir: alertas informativas, alertas de advertencia o alertas de error.

Para el desarrollo del sistema se propone la creación de un sistema backend en Go, que constará de dos servicios (uno para configurar impresoras, comunicar con la API del bot seleccionado (Discord, Telegram) y recibir las alertas activas) Y otro, para hacer pooling de las alertas activas de cada impresora y notificaras. La comunicación entre ambos servicios se hará a través de RabbitMQ. El frontend estará desarrollado en Angular o React. Y finalmente el sistema se arrancará y configurará usando Docker compose.

AQuality

Framework de mapeo y visualización para detectar a través de imagenes por satélite las masas de agua continental y representar sobre ellas ciertos datos

Tecnologías:

Icono de Phyton

Icono de AngularIcono de React


Keywords: Environment, Geospatial Data Analysis, Remote Sensing, Big Data, Data Science printers
Complejidad: 7

El objetivo del proyecto es la creación de un framework que permita representar, mapear y visualizar en un sistema GIS (Geographical Information System) el estado de las aguas continentales ibéricas y europeas mediante imágenes por satélite.

Podemos dividir la aplicación en cuatro fases, siendo la última opcional.

  1. Crear la base de datos con las masas de agua dulce. Se descargarán las imágenes por satélite (el satélite aún está por decidir) ya sea de forma manual o mediante un script. Después se aplicarán a las imágenes obtenidas las herramientas ya existentes de análisis de masas de agua, como DeepWaterMap o WatNet, para sacar las masas de agua en formato GeoJSON, que después guardaremos en la DB. Para la DB utilizaremos MongoDB aprovechando las funcionalidades que tiene de análisis geoespacial.
  2. Una vez tengamos la base de datos hecha, crearemos el framework de representación. El sistema se compondrá de un backend de QGis Server, un frontend en Angular o React y unas APIS en Flask o Django que conectarán con la base de datos.
  3. Utilizando los datasets públicos de la EEA (European Environment Agency), crearemos capas con los distintos datos, como el amoniaco, el pH o los nitratos del agua. El dataset que utilizaremos tiene coordenadas y solo habría que convertirlo en formato GeoJSON.
  4. (OPCIONAL) Obtener las concentraciones de plásticos en las masas de agua dulce empleando los algoritmos que desarrollaron los doctores Gordana Jakovljevic, Miro Gavedarica y Flor Álvarez Taboada en su paper “Remote Sensing Data in Mapping Plastics at Surface Water Bodies“

Recursos:

Azure4All

Implementación de una solución de integración para Microsoft Azure DevOps con otras plataformas de desarrollo como GitHub y Jira

Tecnologías:

Icono de HTML5Icono de JavascriptIcono de Node JS

Keywords: Azure, Agile, DevOps, Project Management, Extensions
Complejidad: 7

Microsoft Azure DevOps es uno de los entornos de gestión de proyectos más potentes para desarrollo de software. Sin embargo, su integración por defecto con otras herramientas externas no es muy completa, perdiendo gran parte de sus ventajas al utilizar estas aplicaciones de terceros.

En este proyecto implementarás y publicarás diferentes extensiones para el Marketplace de Azure DevOps que consigan integrar de forma transparente funcionalidades como la gestión de tareas, backlogs, boards o repositorios con aplicaciones como Jira, GitHub o GitHub Enterprise, creando un ecosistema muy potente e intuitivo para facilitar la gestión y desarrollo de soluciones software.

Para realizar este desarrollo se utilizará la capa gratuita de Azure DevOps que da acceso a un número ilimitado de repositorios y hasta 5 usuarios simultáneos, que se utilizarán para simular un equipo de desarrollo.

BlamePlus

Visualización y análisis de anotaciones sobre revisión de código para evitar ataques de cadena de valor

Tecnologías:


Keywords: Supply chain attacks, code review, version control, supply chain management, Cloud
Complejidad: 6

Un ataque a la cadena de suministro (supply chain attack), también llamados ataques a la cadena de valor o ataques de terceros, es un tipo de ciber-ataque en el que se busca causar daño a una organización debilitando los elementos menos seguros de una cadena de suministro. En el contexto del desarrollo software, un tipo muy extendido es la adición de código malicioso sin el conocimiento del desarrollador, y existen miles de ejemplos al respecto que han afectado a paquetes muy utilizados a nivel mundial.

Una forma de mitigar este tipo de ataques es la revisión de código: si el ordenador de un desarrollador hubiese sido comprometido y se inyectase código malicioso, éste debería de ser detectado por aquellas personas que revisan el código. No obstante, la inyección de código puede suceder con posterioridad, en el propio sistema de revisión de código o en los sistemas de integración.

En este proyecto se propone la creación de una herramienta que cumpla una función dual:

  • Integración en los sistemas de revisión de código (pull requests, merge requests, etc) para anotar o asociar cada commit con la revisión de código en la que fue aprobado, así como aquellas personas que revisaron y aprobaron el código
  • Visualizar, de una forma similar o extendida, a los sistemas de “blame” de Git y otros sistemas de control de código, para cada archivo y cada línea, además de qué desarrollador realizó el commit, en qué revisión de código se aprobó y quienes fueron las personas que lo aprobaron. Esta visualización podrá hacerse de forma textual o mediante una herramienta gráfica (escritorio/web, se valorará la integración en Cloud).

Opcionalmente también se puede desarrollar una herramienta de análisis que detecte partes del código que no han sido revisadas por nadie, para poder detectar posibles ataques de cadena de valor.

Respecto de las tecnologías, se sugiere la integración con Git y/o Subversion (SVN), y respecto los sistemas de revisión de código, pull requests en GitHub, GitLab o Azure DevOps o herramientas externas como Review Board. Idealmente, para estos últimos, se desarrollará una solución agnóstica, de tal forma que, si un determinado commit tiene una anotación particular, sin importar su procedencia, la visualización y el análisis se realicen correctamente.

Complotxity

Estimación de la complejidad de un plot utilizando técnicas de Deep Learning

Tecnologías:

Icono de PhytonPytorch

Keywords: Plots, printing, complexity, Deep Learning, AI
Complejidad: 6

Para poder planificar su producción, los usuarios de impresoras en un entorno industrial desean saber de antemano el tiempo que va a tardar en imprimirse un determinado plot (archivo). Este tiempo se puede conocer después de imprimir un plot determinado, pero estimarlo anticipadamente antes de imprimir algo nuevo no es sencillo.

En este proyecto se propone la creación de un sistema que, mediante técnicas de análisis de imagen, inteligencia artificial y Deep Learning, proporcione una estimación del tiempo de impresión de un archivo determinado (en formato vectorial, como PDF o SVG, o en formato rasterizado, como JPG o TIF).

Para poder entrenar el sistema, el estudiante deberá inicialmente crear un dataset que asocie determinados plots con su tiempo de impresión. Se proporcionará un extenso catálogo de archivos a utilizar, pero no se requerirá realizar la impresión real, por el tiempo y el coste que acarrearía, sino que será suficiente realizar la impresión utilizando drivers virtuales de impresora o librerías de renderizado como Cairo.

Una vez el dataset esté completo, éste se utilizará para entrenar un sistema de Deep Learning que, tomando como entrada una imagen (y para el caso de archivos vectoriales, otros datos, como el número de capas, transparencia, cómo se superponen los objetos, etc), proporcione una estimación del tiempo que tardaría en imprimirse. Dicha estimación estará normalizada respecto a los plots de referencia, con lo que sería posible aplicarla a otros sistemas o impresoras diferentes.

Finalmente, se valorará la creación de una librería, herramienta de línea de comandos o aplicación (de escritorio, móvil o web) en la que los usuarios puedan añadir sus propios plots y obtener la estimación basada en la complejidad.

CountingDown

Sistema de ayuda para imprentas en generación de boletos

Tecnologías:

Icono de Node JSIcono de JavaIcono de Angular

Keywords: Web app, print shop, Cloud
Complejidad: 7

Actualmente las imprentas tradicionales tienen un hándicap en lo que a la numeración de impresos se refiere. Para numerar impresos se utilizan máquinas especiales con capacidades muy limitadas y difíciles de configurar.

La numeración de impresos se utiliza para entradas, boletos de sorteos, recibos de pago y multitud de otros documentos que aún no se han digitalizado y que en muchos casos no se va a hacer (por ejemplo, las típicas rifas de las fiestas de los pueblos)

Este proyecto propone la creación de una WebApp en la que el usuario sea capaz de definir el impreso en el que presentar los contadores y cómo van a funcionar cada uno de ellos. Hay que tener en cuenta que en imprenta no se imprime una papeleta por pliego, sino que se suelen imprimir tantas como entren en el pliego, de manera que en un único pliego pueden salir, por ejemplo, 4 papeletas, lo que a 2 números por papeleta significan 8 contadores

El usuario de manera visual tiene que tener la capacidad de situar los contadores en el pliego y configurarlos con respecto al tipo de letra, el tamaño, el número de dígitos, el número con el que el contador empieza a funcionar, las características del número (color, orientación, ángulo, circular, color, degradado, sombra, etc).

Una vez hecha esa definición, el usuario tendrá la capacidad de imprimir todos los boletos, cada uno de ellos con su contador adecuado, de modo que cada boleto al final tenga un número único. Para ello introducirá los boletos ya impresos mediante otra tecnología (por ejemplo, imprenta clásica) en la impresora y la aplicación desarrollada sólo imprimirá las partes personalizadas que se han añadido en ella.

DED-AI: Diabetic Retinopathy AI detection

Detección de retinopatías diabéticas a través de IA

Tecnologías:

Icono de Phyton PytorchIcono de ReactIcono de Node JSLogo de Go

Keywords: IA, Android, Diabetes
Complejidad: 7

La diabetes es conocida como una enfermedad silenciosa y silenciada. Y aun así, es una de las enfermedades que presenta más complicaciones a las personas diagnosticadas, como por ejemplo la retinopatía diabética. Esta complicación afecta a los vasos sanguíneos que irrigan la retina, lo que podría causar déficit de visión severa. Actualmente, un experto revisa cientos de imágenes para detectar posibles retinopatías a través de imágenes capturadas por un retinógrafo.

El objetivo de este proyecto es crear una red neuronal capaz de identificar aquellas imágenes que puedan representar una retinopatía. Se partirá de un conjunto de imágenes etiquetadas para realizar el entrenamiento y la validación de la red neuronal.

Una vez completado este proceso, para estudiar la fiabilidad del algoritmo, se propone crear una aplicación móvil en la que, a través de una captura utilizando la cámara del dispositivo, se envíe a un servidor que ejecutará la red neuronal para validar la imagen y etiquetarla como candidata a retinopatía o descartarla.

El servidor retornará al usuario el diagnóstico del resultado del algoritmo.

Colaboraciones:

David Barajas – Hospital de León
Fernando Álvarez Guisasola – Centro de Salud Ribera del Órbigo

DeviceConfiguratorn

Web encargada de modificar/guardar archivos de configuración de impresoras, además de cargarlos en ellas

Tecnologías:

Logo de GoLogo de AWSIcono de React

Keywords: Web services, printer configurator, on premise
Complejidad: 8

Debido al creciente uso de distintos dispositivos, es muy común ver cómo las configuraciones de éstos se almacenan en la nube, pudiendo aplicarlos cuando son necesarios (un formateo, un cambio de usuario...)

Gestor de ajustes con (almacenamiento Cloud) para dispositivos, desde fuera de una red interna.

Este proyecto propone la creación de la siguiente plataforma:

  • Cliente, servicio Cloud compuesto por front + backend con las siguientes características:
    • La gestión deberá ser por usuario (un usuario puede configurar varios dispositivos)
    • Configuración de los dispositivos través de la UI
      • Guardar/cargar archivos de configuración en la nube
      • Ver/aplicar archivos de configuración a un dispositivo
      • Editar las configuraciones para posteriormente guardar o aplicar en el dispositivo
      • Para cada dispositivo: IP + nombre del dispositivo
      • Validación de los ficheros de configuración
  • Servicio instalado dentro de una red privada (On Premise) con las siguientes funcionalidades:
    • Lectura de una cola de mensajes, donde estarán las acciones a realizar (leer/aplicar config), y a qué dispositivo
    • Verificación del mensaje y descarga de la configuración correspondiente (en caso de aplicar a dispositivo)
    • Distribuir la acción a los dispositivos correspondientes (pedir la configuración o aplicar una nueva) vía HTTP
    • Reenvío del mensaje de vuelta
    • El servicio on premise ha de devolver el resultado de las acciones (para mostrar en tiempo real en el frontend):
      • Bien con otro mensaje en otra cola (el backend del cliente escucha la cola)
      • Bien con invocación directa a una URL POST del backend incluya que incluya el timestamp (por si hay varias acciones)
  • Estos resultados, deberán poder verse en el frontend (por ejemplo, una petición get de settings de un dispositivo determinado).

Educaverse: Diabetic Education in the metaverse

Plataforma para la educación diabética a través de una experiencia compatible con el metaverso

Tecnologías:

Icono de UnityIcono de C++Icono de C#

Keywords: 3D, Virtual Reality, Metaverse, Diabetes
Complejidad: 9

La diabetes es conocida como una enfermedad silenciosa y silenciada. Cuando una persona debuta en diabetes, su día a día se transformará por completo, y deberá aprender a controlar la enfermedad para evitar situaciones de riesgo, como las temidas hipoglucemias, además de otras complicaciones asociadas como las retinopatías, pie diabético, etc.

El objetivo de este proyecto es crear una aplicación de realidad virtual que sea compatible con el metaverso donde los usuarios puedan acceder para formarse en diabetes de una forma sencilla e intuitiva, además de educativa. Una forma de aprender diferente donde tanto adultos como niños puedan tener toda la información necesaria al alcance de sus ojos.

Colaboraciones:

David Barajas – Hospital de León

FasterThanLight

Métricas agregadas en entornos Agile con integración con sistemas heterogéneos

Tecnologías:

Icono de PhytonIcono de C#Icono de JavaIcono de AngularIcono de React

Keywords: Agile, Scrum, Kanban, metrics, velocity, sprints
Complejidad: 6

La “velocity” es una métrica dentro del mundo del desarrollo de software ágil, utilizada para saber cuánto trabajo se ha realizado en un determinado periodo de tiempo y qué contribución individual tiene cada uno de los miembros de un equipo.

Las herramientas de gestión de proyectos con esta metodología (Jira, Azure DevOps, Asana, Trello, Redmine) ofrecen funcionalidades para visualizar ésta y otras métricas a través de dashboards y reportes. No obstante, en este proyecto lo que proponemos es la creación de un sistema que sea capaz de funcionar en una organización heterogénea en la que diferentes equipos de desarrollo tienen la libertad para utilizar la herramienta que consideren más apropiadas.

El sistema deberá leer los datos relativos a historias de usuario y puntos de historia asignados para cada uno de los equipos, así como los ciclos de desarrollo que utilicen (sprints en Scrum, agrupaciones por épicas dentro de Kanban, etc), y mostrará de una forma agregada la velocity de cada equipo y cada miembro. Permitirá, asimismo, dentro del mismo equipo, categorizar a los usuarios de forma arbitraria: por lugar de trabajo, por categoría, por años de experiencia, etc, basándose en unas determinadas características asignadas por el administrador para cada uno de los miembros.

Respecto a los sistemas a integrar, el alumno tendrá total libertad, aunque se espera que la integración sea con más de una de las herramientas de gestión propuestas utilizando una arquitectura de conectores. Para ello se podrá desarrollar una solución a medida, idealmente una aplicación web, en la que se puedan visualizar y exportar (tanto como informes como con una API REST) los resultados del análisis. También será posible utilizar herramientas de terceros como Power BI para la creación de estas métricas agregadas y su visualización.

FlexibleCompanyBot

Componentes web para chatbot basado en IA para responder preguntas sobre una base de conocimiento configurable

Tecnologías:

Icono de PhytonIcono de ReactIcono de Angular

Keywords: IA, Web Component, chatbot, NLP
Complejidad: 7

El proyecto tiene como objetivo la creación de uno o de un conjunto de componentes web reusables para la interacción de un usuario con un chatbot. El objetivo final es la incrustación de ese conjunto de componentes en una web interna de una empresa para facilitar la resolución de dudas acerca de los procesos internos y reducir el índice de consultas a los responsables de atención del empleado.

El usuario podrá realizar preguntas acerca de los temas sobre los que haya aprendido un modelo basado en aprendizaje profundo de “Respuesta a la pregunta”. Para ello debe ser posible introducir los datos de conocimiento a través de un componente web desarrollado con algún framework de Frontend. También será necesario otro componente web para la interacción del usuario final: introducción de la pregunta y visualización de la respuesta.

Para la creación del chatbot se usarán modelos de NLP ya entrenados previamente y de uso público, tales como los que se pueden encontrar en repositorios como HuggingFace Models.

El alumno o alumna deberá pensar y justificar la arquitectura que mejor encaje para el funcionamiento de los diversos componentes web teniendo presente los principios de escalabilidad y latencia de ejecución.

El desarrollo del proyecto se realizará bajo la metodología Agile Scrum.

FoolMeOnce

Blockchain aplicada a verificación de promesas electorales por parte de políticos y partidos

Tecnologías:

Icono de Phytontypescript

Keywords: Blockchain, elections, campaign promise, politicians, political parties
Complejidad: 7

Uno de los aspectos más exasperantes para los ciudadanos de países demócratas es el incumplimiento de las promesas electorales por parte de los candidatos y los partidos políticos. Normalmente las promesas más relevantes son reflejadas en los medios de comunicación de masas y pueden posteriormente ser consultadas en la hemeroteca, pero este mecanismo no siempre es perfecto: las hemerotecas se modifican (aunque no debería de ser así), algunas noticias desaparecen o se dificulta su descubrimiento, el público en general no recuerda una promesa en concreto o sus detalles y no puede acudir a ningún sitio fiable para verificarla, o los partidos políticos utilizan las promesas pasadas, alteradas y distorsionadas, como artillería para sus guerras electorales.

En este proyecto se propone la creación de una plataforma basada en tecnologías Blockchain para registro y verificación de promesas electorales. Así, cuando un político haga una promesa electoral que tenga intención de realmente cumplir, podrá registrarla en la plataforma, quedando inmutablemente guardada en la cadena de bloques. Esto le aportará a su promesa una mayor credibilidad e, idealmente para él o ella, revertirá en un mayor número de votos a su favor.

Se podrían realizar promesas con un nivel de cumplimiento, a saber: obligatorias, no obligatorias. Las promesas podrán depender de otras introducidas anteriormente, y se enlazarán a la transacción o transacciones de todas de las que dependan y todas las promesas tendrán un tiempo máximo de cumplimiento.

Los candidatos podrán incluir en sus comunicados y propaganda un listado de promesas realizadas, así como la forma de verificar su existencia (enlaces, códigos QR, etc). Se sugiere la utilización de una Blockchain pública (Ethereum, Solana, Cardano, etc) pues eso permitirá la verificación independiente sin necesidad de utilizar la plataforma desarrollada, acudiendo directamente a la Blockchain.

Por otro lado, y de forma opcional, se puede incluir también un segundo paso en el sistema: registrar una transacción de que la promesa ha sido “cumplida”. Un político puede prometer algo y después no cumplirlo, o cumplirlo parcialmente. Se sugiere explorar el funcionamiento de los mecanismos de consenso y de las organizaciones autónomas descentralizadas (DAO) para implementar una forma de contrato inteligente en el que para que una promesa se dé por “cumplida” se requiera un cierto “acuerdo” entre los usuarios de la plataforma.

FresnelNet

Resolución del problema de la difracción de la luz mediante técnicas de aprendizaje profundo

Tecnologías:

Icono de PhytonPytorch

Keywords: Diffraction, light, physics, optics, neural networks, Deep Learning
Complejidad: 8

La difracción de la luz por un obstáculo es uno de los fenómenos más fascinantes de la física, que surge de manera natural en diversos campos que involucran propagación ondulatoria: en telecomunicaciones, en acústica, y por supuesto en óptica1.

La resolución matemática de este problema es bien conocida desde el famoso experimento de Fresnel que le sirvió el gran premio de la Academia de Ciencias Francesa en 18192. Estas soluciones a la propagación de una onda monocromática involucran un tipo de funciones especiales, conocidas como funciones de Fresnel.

Por otro lado, durante la última década se ha hecho cada vez más extendido el uso de redes neuronales para la resolución de problemas altamente no-lineales, entre los que destacan el reconocimiento de imágenes3, o el procesado de imágenes y texto4,5. Podemos entender las redes neuronales como aproximadores universales de funciones, capaces de hallar una aproximación numérica de una función desconocida6.

Este trabajo proponer explorar la resolución y descripción de la difracción de Fresnel por medio de redes neuronales.

  1. Goodman, Joseph W. Introduction to Fourier Optics. (2017)
  2. Stepanov V I Auguste Fresnel. The 150th anniversary of his death. J. Appl. Spectrosc 27 825-30 (1977).
  3. Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "Imagenet classification with deep convolutional neural networks." Advances in neural information processing systems 25 (2012).
  4. Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." Advances in neural information processing systems 26 (2013).
  5. Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).
  6. Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. Deep Learning. Cambridge, Mass: The MIT Press, (2017)

LocalAIzeMe2

Extensión del proyecto LocalizeMe añadiendo sugerencias de traducción y traducciones automáticas mediante Machine Learning

Tecnologías:

Logo de .NetIcono de C#Logo de GoIcono de Phyton

Keywords: Web development, web services, real time, localization, machine learning, AI
Complejidad: 6

En la edición anterior del Observatorio HP, para el curso académico 2021-2022, se llevó a cabo el proyecto LocalizeMe. En este proyecto se desarrolló una plataforma para gestionar cadenas de localización (cadenas de texto traducidas a diferentes idiomas) con las siguientes funcionalidades principales:

  • Añadir cadenas y sus traducciones
  • Importar y exportar cadenas desde el formato XLIFF, utilizado por las agencias de traducción
  • Servir las cadenas a través de una API REST para poder ser consumidas en tiempo real por las aplicaciones finales

En esta continuación del proyecto LocalizeMe, se desea ampliar la plataforma desarrollada de la siguiente manera:

  • Proporcionando sugerencias de traducción en base a traducciones ya existentes cuando se añada una cadena. Por ejemplo, si en un proyecto se añade la cadena “Cancel” y se encuentra que esta cadena ya está traducida en otros proyectos, se sugerirá importar dichas traducciones, ahorrándose el coste de realizar una nueva traducción para una cadena muy común.
  • Incorporando sistemas de traducción automática mediante Machine Learning, de tal forma que, al añadir una nueva cadena, ésta pueda ser traducida al momento a los idiomas soportados por la aplicación. Las cadenas traducidas no obstante deberán de ser revisadas pues su calidad podría ser variable.

El proyecto de la edición anterior está desarrollado como un backend de Go, una base de datos en MongoDB y un frontend de Angular. El alumno o alumna deberá ampliar este sistema de la siguiente manera:

MeasureThePulse

Caracterización de pulsos ultracortos mediante técnica de aprendizaje automático

Tecnologías:

Icono de PhytonPytorch

Keywords: DL, laser
Complejidad: 6

La caracterización de los pulsos ultracortos es un tema novedoso, cuyo impacto en diversas aplicaciones ha generado un alto interés en los últimos años. Las diferentes estrategias desarrolladas llevan aparejados distintos algoritmos para recuperar la información de los pulsos. En algunas técnicas establecidas, como FROG [1] o d-scan [2], en las que a partir de la medida el pulso no es extraíble por métodos analíticos, dichos algoritmos juegan un papel clave.

Desde la invención de dichas técnicas se han introducido nuevos algoritmos. Desde algoritmos basados en proyecciones o en optimización no lineal [2] hasta métodos genéticos [3]. Más recientemente, el empleo de técnicas de aprendizaje automático en el marco de la inteligencia artificial y del big data se ha comenzado a explotar en un diverso y amplio número de campos científicos. En Óptica, en el ámbito de la caracterización de pulsos ultracortos, se ha empleado en las técnicas FROG [4] o d-scan [5], pero también ha permitido abordar otras técnicas recientes en las que la inversión del problema matemático es aún más compleja [6,7].

Recientemente, se ha introducido la técnica amplitude swing [8,9], la cual presenta algunas ventajas frente a otras técnicas existentes. En ella se han empleado algoritmos de optimización no lineal y algoritmos genéticos. En el presente trabajo, se utilizarán redes neuronales profundas [10] para estudiar la reconstrucción de los pulsos a partir de la traza de amplitude swing. El alumno deberá generar trazas conocidas para alimentar el aprendizaje del algoritmo de reconstrucción y abordar después la solución de casos generales o arbitrarios. Podrá comparar sus resultados con los obtenidos con otros algoritmos ya existentes y se le podrán proporcionar datos experimentales para que aborde situaciones reales de laboratorio.

Referencias:

[1] Kane, D. J., & Trebino, R. (1993). Characterization of arbitrary femtosecond pulses using frequency-resolved optical gating. IEEE Journal of Quantum Electronics, 29(2), 571-579.

[2] Miranda, M., Fordell, T., Arnold, C., L’Huillier, A., & Crespo, H. (2012). Simultaneous compression and characterization of ultrashort laser pulses using chirped mirrors and glass wedges. Optics express, 20(1), 688-697.

[3] Gerth, D., Escoto, E., Steinmeyer, G., & Hofmann, B. (2019). Regularized differential evolution for a blind phase retrieval problem in ultrashort laser pulse characterization. Review of Scientific Instruments, 90(4), 043116.

[4] Zahavy, T., Dikopoltsev, A., Moss, D., Haham, G. I., Cohen, O., Mannor, S., & Segev, M. (2018). Deep learning reconstruction of ultrashort pulses. Optica, 5(5), 666-673.

[5] Kleinert, S., Tajalli, A., Nagy, T., & Morgner, U. (2019). Rapid phase retrieval of ultrashort pulses from dispersion scan traces using deep neural networks. Optics letters, 44(4), 979-982.

NoMoreMeetings

Analizador de calendario personal con conectores con Google Calendar y Exchange para calcular el tiempo pasado en reuniones y detectar ineficiencias

Tecnologías:

Icono de C#Icono de JavaLogo de GoIcono de PhytonIcono de ReactIcono de Angular

Keywords: Web services, web development, calendar
Complejidad: 6

En el entorno empresarial moderno, y más desde la popularización del teletrabajo, las reuniones pueden ocupar un porcentaje muy alto del tiempo de cada trabajador. Algunas de ellas son útiles y necesarias, pero otras son simplemente una pérdida de tiempo.

En este proyecto se propone la creación de un analizador automático de calendario que sirva para identificar, dado un rango de tiempo (la última semana, el último mes, los últimos 3 o 6 meses, etc), qué porcentaje de tiempo pasa una persona en reuniones y qué parte del tiempo tiene disponible para realizar otras tareas. El sistema deberá tener en cuenta, de forma configurable, las horas habituales de trabajo del empleado, y en base a ellas analizará para esos periodos las reuniones que aparecen en su calendario.

Para este análisis se contemplarán los tiempos sin reuniones, los tiempos en reunión (reuniones aceptadas, reuniones aceptadas provisionalmente y reuniones superpuestas), el número de asistentes a las reuniones (si sólo está en ellas el usuario serán consideradas tiempo reservado y no una auténtica reunión) y los periodos marcados como “fuera de la oficina”. Idealmente el usuario podrá indicar días no trabajados (festivos, vacaciones) para que no sean tenidos en cuenta.

Además del tiempo pasado en reuniones respecto del tiempo “libre”, opcionalmente también se pueden dar datos relativos a reuniones recurrentes, detectar tiempos demasiado pequeños entre reuniones (por ejemplo, inferiores a 15 minutos), etc.

Como fuentes de datos se sugiere desarrollar un sistema de conectores, que abstraiga los detalles internos, tanto para Google Calendar como para Microsoft Exchange al ser los dos sistemas más populares de gestión de calendario.

Respecto a la implementación, se sugiere realizar el desarrollo como una aplicación web, utilizando cualquiera de las tecnologías propuestas tanto para el backend (.NET/C#, Java, Go, Python) como para el frontend (React, Angular), aunque el estudiante estará a cargo de diseñar la arquitectura del sistema y estamos abiertos a sugerencias sobre tecnologías alternativas.

PainInTheApp

Plataforma para recopilar datos periódicos sobre pacientes (nivel de dolor, medicación, ansiedad, etc) con aplicación móvil e interfaz web

Tecnologías:

Icono de AngularIcono de ReacttypescriptIcono de Phyton

Keywords: Healthcare, mobile applications, telemedicine, web services
Complejidad: 6

El advenimiento de la telemedicina se ha acelerado dramáticamente desde la pandemia de COVID-19 del año 2020. Cada día es más importante para los pacientes comunicarse remotamente con sus médicos, psicólogos, oculistas, etc, a través de llamadas telefónicas, videoconferencias o mediante aplicaciones móviles. Además, para pacientes con problemas crónicos (trastornos psicológicos, dolores musculares o de articulaciones, etc) y/o medicación continua, es muy importante mantener un registro de ciertos parámetros a lo largo de días y semanas, que luego proporcionan a sus médicos.

En el marco de la edición anterior del Observatorio, se desarrolló la aplicación Audire, una aplicación móvil para el registro de emociones y la interacción con profesionales de la salud mental. En este proyecto se propone, basándose en dicha aplicación (conceptual o técnicamente), la creación de una plataforma genérica para la recopilación de datos de pacientes.

La plataforma tendrá una aplicación móvil accesible desde Android, e idealmente IOS, que alertará al usuario periódicamente mediante una notificación para la introducción de los datos pertinentes (estado anímico, nivel de dolor, tomas de medicación, etc). Dependiendo del área de actuación de la plataforma (salud mental, traumatología, reumatología, etc), el look & feel y los campos a mostrar variarán. Esta configuración de la aplicación podrá realizarse de forma estática, en tiempo de compilación o mediante archivos de configuración, o de forma dinámica mediante una plataforma web.

Dependiendo de cada ámbito de actuación los profesionales decidirán qué tipo de preguntas y datos quieren recoger. Por ejemplo, una pregunta puede aparecer diariamente, varias veces al día, puede tener varias opciones de respuesta, tener texto libre, ser de 0 a 10, de sí o no, etc.

Asociada a la aplicación existirá una plataforma web, con sistema de usuarios y roles (administrador, médico, paciente, etc), donde se tendrá acceso en tiempo real a los datos enviados por los pacientes. Se establecerá además un sistema de jerarquías para que un doctor o doctora sólo tenga acceso a los datos de los pacientes que dependen de él o ella.

Finalmente, la aplicación también podrá exportar los datos recopilados en formato CSV o XLS, permitiendo opcionalmente enviar el archivo por email.

PulseSpam

Aplicación para tomar el pulso a una organización (empleados, estudiantes, etc) mediante una pregunta diaria

Tecnologías:

Logo de .NetIcono de C#Icono de ReactIcono de AngularIcono de Node JSLogo de Go

Keywords: Web services, web development, Windows applications, Cloud
Complejidad: 7

Actualmente muchas empresas utilizan aplicaciones para tomar el pulso a sus empleados, de forma diaria, semanal o mensual. Les hacen preguntas relativas a su nivel de estrés, si creen que su sueldo es adecuado, si recomendarían esa empresa para trabajar, si su manager gestiona adecuadamente sus equipos, etc.

Estos sistemas están formados normalmente por tres componentes:

  • Un sistema de backend + persistencia (base de datos) para gestionar y almacenar las preguntas y sus respuestas.
  • Un frontend de administración para poder configurar las preguntas y visualizar los resultados.
  • Una aplicación web y/o móvil donde los empleados envían las respuestas a las preguntas (opciones, texto libre, etc).

En este proyecto se propone la creación de un sistema de este tipo con una peculiaridad: la forma de recoger respuestas por parte de los usuarios será una aplicación de Windows (opcionalmente, MacOS & Linux) que se abrirá automáticamente todos los días (a una hora determinada, un cierto tiempo después de que el usuario inicie sesión, etc) y con una única pregunta, “la pregunta del día”. Los usuarios podrán responder esa pregunta, aplazarla para otro momento más adelante (1h, 2h, 4h, etc) del día o declinar responderla.

El sistema tendrá asimismo el panel de administradores donde se podrán configurar las preguntas para cada día (o un ciclo semanal, mensual, etc), organizarlas por categorías y ver los resultados. También se podrán ver las respuestas de los usuarios, siempre de forma anonimizada, aunque potencialmente pudiendo organizarles en grupos y subgrupos con un tamaño mínimo para respetar la privacidad.

Para el desarrollo del sistema se sugiere la utilización de .NET + C# para la creación de la aplicación, Angular o React para el frontend de administración y .NET, Node o Go para la creación del backend. Respecto a la persistencia, puede ser persistencia relacional (SQL), si bien se sugiere explorar alternativas no relacionales. Idealmente el sistema tendrá un deploy en Cloud o estará preparado para ello.

RemoteBaconPi

Sistema modular de monitorización de impresoras y otros dispositivos en una red privada con cero configuración y conexión opcional de monitores hardware

Tecnologías:

Icono de PhytonIcono de Linux

Keywords: Monitoring, printers, Linux, ARM, dashboards
Complejidad: 7

En este proyecto se propone la creación de un sistema de monitorización de impresoras (estado, errores y alertas, información sobre la impresora, etc) basado en un dispositivo Raspberry Pi que se conectará a la red local donde se encuentren las impresoras.

El sistema descubrirá automáticamente las impresoras conectadas utilizando protocolos como Bonjour o ZeroConf. Posteriormente, según los modelos encontrados, se conectará a un repositorio de configuración donde estarán la configuración de los diferentes conectores que se utilizarán para poder obtener información sobre ellas.

Una vez el sistema conozca las impresoras que debe de monitorizar, se mostrará al usuario (bien a través del HDMI de la Raspberry o bien expuesto a la red) un dashboard de monitorización donde podrá ver los dispositivos conectados y su estado. Para la realización de este dashboard se pueden configurar herramientas de monitorización existentes como Prometheus o Grafana, o se puede optar por una implementación ad-hoc.

Se debe de soportar la búsqueda de nuevas impresoras, de forma manual o automática, de tal forma que, si nuevos dispositivos aparecen en la red, estos se muestren también en el dashboard.

Respecto a la configuración inicial, el usuario debe al menos, poder configurar los parámetros de red (clave wifi, proxy, etc) de una forma sencilla, bien colocando determinados archivos en la tarjeta de memoria de la Raspberry o bien utilizando el propio interfaz a través de la salida de vídeo.

Finalmente, se desea soportar mediante una arquitectura de plugins la posibilidad de conectar semáforos (beacons) hardware que indiquen remotamente el estado global de las impresoras conectadas mediante un código de colores (ejemplo: verde, todo correcto, amarillo, hay advertencias, rojo, hay errores). Este estado global será configurable en términos de límites, por ejemplo, que un determinado porcentaje de impresoras tenga errores, etc.

Para la realización de este proyecto se proporcionará al alumno o alumna todo el hardware necesario, tanto el dispositivo Raspberry Pi (Pi 3 A+) como los potenciales semáforos hardware.

SecondHandChain

Plataforma con confianza basada en blockchain orientada a ventas de artículos de segunda mano

Tecnologías:

Icono de Phytontypescript

Keywords: Blockchain, trust, second hand, smart contracts, web services
Complejidad: 7

Uno de los mayores problemas que existen a la hora de comprar artículos de segunda mano, desde una lámpara hasta un coche, es saber cuántos propietarios anteriores ha tenido el objeto en cuestión y el estado actual del mismo.

En este proyecto proponemos la creación de una plataforma que ayude a aportar confianza y valor a las ventas de segunda mano, beneficiando tanto a compradores como a vendedores, pues los compradores podrán conocer la “historia” de un artículo en concreto mientras que los vendedores podrán vender mejor y a mayor precio sus artículos si tienen ese citado historial “limpio”. La plataforma utilizará internamente, por motivos de transparencia y auditabilidad, una Blockchain pública (aunque para el desarrollo se pueden utilizar instancias privadas o las redes de desarrollo de las Blockchains más populares).

El funcionamiento será el siguiente: cada artículo tendrá un identificador único, que idealmente puede estar pegado a él mediante un código numérico o un QR code. Cuando se produzca una transacción de compra-venta, tanto el comprador como el vendedor deberán utilizar la plataforma (a través de una web o una aplicación móvil) para registrar la transferencia, aportando además información relevante, como fotos del artículo, factura en el caso de ser la primera compra y dar de alta el artículo, etc. Las transacciones y datos asociados serán almacenadas en la Blockchain de forma inmutable y de esa manera se registrará el cambio de manos del artículo.

Asimismo, en cualquier momento dado un usuario podrá consultar el historial de un artículo conociendo su código, para ver cuántos propietarios ha tenido y detectar cualquier posible “hueco” en su historia, aunque la plataforma estará preparada para indicarlo automáticamente (por ejemplo: “no se tiene información para el periodo 2019-2020”).

Respecto a la Blockchain a utilizar y las tecnologías para interactuar con ella, el alumno o alumna tendrá libertad para investigar cuáles son más convenientes, teniendo en consideración no obstante la funcionalidad, costes y tiempos de transacción y estabilidad de la red escogida.

De forma opcional la plataforma puede tener una sección para que vendedores y fabricantes puedan dar de alta inicialmente un artículo antes de la primera venta.

Finalmente, la plataforma constará al menos de un servidor (servicio web) que será quien se encargará de registrar y recuperar las transacciones en la Blockchain y un cliente, que puede ser una aplicación web o una aplicación móvil, para que los usuarios puedan registrarse, dar de alta sus artículos, imprimir códigos y registrar los cambios de propiedad.

ShowMeTheModel

Plataforma para la ejecución desde dispositivo móvil de modelos de ML/DL

Tecnologías:

Icono de PhytonLogo de GoIcono de JavatypescriptIcono de React

Keywords: Cloud, AI, web services, private networks
Complejidad: 7

Una de las tareas más habituales que desea realizar un equipo enfocado al desarrollo de modelos de Machine Learning, Deep Learning e IA en general es poder enseñar de una forma rápida sus resultados a terceros. Para ello existen ya herramientas como Streamlit o Gradio que permiten crear rápidamente interfaces sencillos en los que realizar diferentes tareas de Machine Learning con diferentes entradas y salidas: conversiones de texto a texto (ej: una traducción o un resumen), de texto a imagen (ej: describir algo y generar una imagen sobre ello), de imagen a texto (ej: obtener la descripción de la imagen) o de imagen a imagen (ej: convertir una imagen de blanco y negro a color).

No obstante, uno de los problemas a los que se enfrentan este tipo de equipos es la imposibilidad de exponer sus máquinas internas de desarrollo al mundo exterior cuando acuden a ferias y congresos. En este proyecto se propone desarrollar una plataforma, utilizando frameworks ya existentes como los arriba citados, permita consumir desde una aplicación móvil o un navegador estos modelos de forma remota, aunque se encuentren dentro de una red privada. Así, se podrán utilizar como entrada archivos del propio móvil, un texto introducido en él o una imagen capturada con su cámara.

Esta plataforma tendrá los siguientes componentes:

  • Un agente configurable (entradas, salidas, modelo asociado, etc) que se ejecutará en las máquinas donde residan los modelos de Machine Learning, normalmente desarrollados en Python. Este agente se encargará de recibir peticiones en forma de mensajes (SQS, Rabbit, etc), descargar los archivos que sean necesarios (imágenes, vídeo, sonido), ejecutar el modelo de ML y subir los resultados donde sea necesario, comunicando el resultado.
  • Un servicio web, desplegado en Cloud, al que se conectará la aplicación móvil y que será encargado de enviar las peticiones de trabajo a los diferentes agentes. También recibirá los resultados por parte de estos, gestionará su registro y estado, etc.
  • Una aplicación móvil que se utilizará para conectar a los diferentes modelos con un identificador para poder ejecutarlos remotamente. Se podrá alternativamente desarrollar un frontend que se servirá desde el Cloud también y al que se accederá desde el navegador del dispositivo móvil. Para este frontend se puede hacer passthrough de Streamlit/Gradio o desarrollar una implementación ad-hoc utilizando React.

SuperLaserFireControl

Desarrollo de un prototipo de sistema de direccionamiento de haz para la estabilización, alineamiento, posicionado y ajuste de sistemas láser a tiempo real

Tecnologías:

Icono de Phyton PytorchIcono de OpenCV

Keywords: Laser beam stabilization, machine learning, reinforcement learning, lab automation, optimisation
Complejidad: 7

La propuesta está dirigida al desarrollo y puesta en marcha de un prototipo de sistema motorizado que permita la estabilización de direccionamiento de haces láser a tiempo real. El objetivo del sistema es mantener el campo lejano y cercano del láser en la posición deseada, corrigiendo de forma automática las derivas que se producen en el laboratorio.

Se propone la implementación de un sistema de control en lazo cerrado gobernado por un algoritmo de optimización. Este algoritmo se operará sobre de las entradas del sistema, que serán los movimientos de los motores-actuadores de las monturas obtenidos a partir del análisis de la función de transferencia, y se retroalimentará de las salidas, que serán las posiciones del centroide del haz obtenido del procesado digital de las imágenes de campo lejano y cercano.

El prototipo estará compuesto por un par de monturas ópticas de precisión motorizadas y un sistema de enfoque e imagen de una muestra del haz incidente que permite la adquisición del campo lejano y cercano del mismo en dos cámaras CCD para obtener su posición. El esquema del montaje experimental se muestra en la siguiente figura.

Basaremos el algoritmo que controle el sistema cerrado en aprendizaje reforzado1 (más conocido como reinforcement learning en inglés), uno de los métodos de optimización que ha ganado más popularidad en los últimos años gracias a su aplicación junto con redes neuronales en escenarios complejos, como la resolución de videojuegos2,3, o incluso superar a contrincantes humanos en juegos como el Go4.

TakeMeHome3D

Generación de modelos 3D utilizando NERF y NGP mediante la toma de fotografías con el móvil para su posterior visualización mediante AR

Tecnologías:

Icono de Phyton PytorchIcono de AndroidArcore

Keywords: 3D, Augmented Reality, AI, Deep Learning, NeRF, NGP, mobile applications
Complejidad: 8

La técnica NeRF1 (Neural Radiance Fields) puede ser utilizada para la generación de vistas arbitrarias sobre escenas complejas. Esta generación arbitraria puede ser utilizada, a su vez, para la generación de un modelo 3D de la escena. Esta técnica amplía y mejora las técnicas SfM (Structure from Motion) utilizadas para la reconstrucción 3D de modelos mediante fotogrametría. Por otro lado, NVidia ha optimizado esta técnica permitiendo el entrenamiento de un modelo NeRF en cuestión de segundos en lugar de horas en su proyecto Instant NGP2 (Neural Graphics Primitives).

En este proyecto proponemos la creación de un sistema para la captura de este tipo de modelos utilizando la cámara de un móvil. Las imágenes capturadas se procesarán mediante técnicas NeRF para la creación de un modelo 3D que se utilizará para poder visualizar aquello que se haya capturado en el mundo real mediante Realidad Aumentada.

Esta aplicación tendrá como objetivo poder acudir, por ejemplo, a una tienda de muebles y capturar una silla, para después poder visualizarla en el entorno de nuestro hogar antes de proceder a su compra. También podríamos hacer lo mismo en casa de un amigo o familiar, o con objetos diferentes: un árbol para nuestro jardín, un accesorio para nuestro coche, etc.

El sistema constará de 2 partes:

  • Una aplicación móvil que tendrá una función dual: capturar las imágenes (junto con los datos de inclinación y rotación proporcionados por el móvil) y, una vez estén procesadas, poder visualizar los modelos generados en 3D/RA.
  • Un servidor donde se realizará el procesado de las imágenes aplicando las técnicas NeRF. Este servidor generará el modelo 3D, idealmente aislando el objeto principal para su mejor visualización mediante RA.

Se valorará también la inclusión de funciones adicionales como sistema de usuarios, permitir descargar los modelos creados por otra gente o por empresas (mediante captura de un QR), etc.

  1. Mildenhall, Srinivasan et al., NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
  2. Müller, Evans, Schied, Keller, Instant Neural Graphics Primitives with a Multiresolution Hash Encoding

TheRealCodeWars

Plataforma para la organización de eventos de programación competitiva con temática de estrategia por turnos o en tiempo real

Tecnologías:

Icono de Phyton Icono de JavaIcono de AngularIcono de ReactIcono de C#Icono de C++

Keywords: Competitive programming, CodeWars, web services, strategy
Complejidad: 8

Todos los años desde HP organizamos un evento de programación competitiva llamado CodeWars. En esta competición, estudiantes de instituto, entre 3º de la ESO y 2º de Bachillerato, resuelven, durante un tiempo determinado, una serie de problemas de programación en los lenguajes permitidos (Python, C++, Java, etc). Cada problema tiene una puntuación asignada dependiendo de su complejidad y, al final del concurso, el equipo que más puntos haya obtenido es el ganador.

Este formato funciona bien y queremos seguir organizándolo de esta manera, no obstante, como competición complementaria nos gustaría organizar algo similar a BattleCode, una competición del MIT para estudiantes universitarios en la que un número indeterminado de entidades (tanques, robots, aliens, etc.), cada uno con unas características propias, compiten por la dominación de un campo de batalla.

En este proyecto se pide desarrollar una plataforma para la creación de eventos de programación competitiva alrededor de una temática de batallas estratégicas en tiempo real o por turnos. Los participantes deberán desarrollar código (en los lenguajes propuestos utilizando un SDK para interactuar con el juego o, si se desea, en un lenguaje específico desarrollado ad-hoc). El sistema recibirá las instrucciones y actualizará el estado del juego, determinado el ganador según una condición de victoria específica (captura de bandera, aniquilación, etc).

Para el desarrollo del sistema deberán de tenerse en cuenta factores como el rendimiento (ejemplo: si se plantea como un servicio web, ¿cuántas peticiones recibirá por segundo?) y la equidad (que todos los jugadores tengan el mismo número de operaciones permitidas por turno o de capacidad computacional si es en tiempo real).

Respecto del terreno de juego, incluirá diferentes tipos de terreno (montañas, ríos, campos, carreteras) que influirán en el comportamiento de las unidades. Por otro lado, las unidades de juego no tendrán un conocimiento omnisciente del mismo, sino que deberán utilizar sus sentidos (visión u oído en un rango y teniendo en cuenta obstáculos) para tomar sus decisiones.

Finalmente, se creará una interfaz gráfica para poder visualizar el juego durante su desarrollo, así como las puntuaciones, los equipos, etc. Idealmente ese mismo interfaz gráfico se podrá utilizar para la configuración del juego, el registro de los equipos, la introducción de código por parte de los alumnos, etc., aunque se aceptaría que la configuración se llevase a cabo mediante archivos estáticos.

WhyIsThatBlinking

Asistencia sobre códigos de estado y error utilizando una aplicación móvil para dispositivos sin pantalla

Tecnologías:

Icono de AndroidIcono de Phyton Icono de OpenCVPytorchIcono de Javakotlin

Keywords: Devices, errors, LEDs, computer vision, AI
Complejidad: 8

Los dispositivos más modernos (móviles, reproductores de música) incluyen pantallas completas que, en caso de error o necesidad de atención por parte del usuario, presentan de forma clara indicaciones sobre qué está pasando o qué debe de hacer el usuario. Sin embargo, hay dispositivos más simples, como lavadoras, lavavajillas, algunos modelos de impresora, etc, que sólo comunican su estado a través de luces parpadeantes con determinados patrones o códigos de error estilo “E05”.

En este proyecto se propone la creación de una aplicación móvil que, utilizando la cámara del dispositivo, ayude a los usuarios a entender qué está pasando en su aparato. De esta manera, el usuario enfocará la cámara hacia el dispositivo del que quiera saber su estado y la aplicación reconocerá el estado (encendidos/apagados) y patrón (por ejemplo: parpadeo cada segundo) de los LEDs y también los códigos de error que puede haber en pequeñas pantallas LCD, para proporcionar información sobre ello. De esta manera el usuario evitará tener que recurrir al manual de instrucciones del dispositivo.

El sistema tendrá dos modos de funcionamiento. Uno “normal” con la funcionalidad anteriormente descrita, y un modo de adición de dispositivos, potencialmente sólo para administradores, en el que, a partir de una imagen genérica del aparato, se identificarán las luces de estado, sus posibles valores y cadencias, y los códigos de error.

Respecto a los dispositivos soportados, la aplicación idealmente será capaz de identificar al momento, al utilizarla, qué dispositivo está visualizando. No obstante, dada la similitud de los diferentes electrodomésticos (por ejemplo, una lavadora es muy parecida a otra), sería aceptable que el usuario tenga un menú de configuración en la aplicación para indicar qué dispositivo o dispositivos posee. Otra alternativa a esta configuración sería tener una pegatina en el aparato, por ejemplo, un código QR, de la tal forma que, cuando el usuario quiera saber algo sobre él, primero escanee el código, lo que abrirá la aplicación con ese dispositivo ya seleccionado, y luego ya la pueda utilizar de forma normal para conocer el estado.

El alumno o alumna tendrá libertad para investigar y decidir qué tecnologías aplica para resolver el problema, como por ejemplo utilizar visión por computador clásica o sistemas de machine/deep learning.

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