Fernando Pérez Gutiérrez

I+D Python Senior Developer.
Master Universitario en Ingeniería Informática.
Tres Cantos, Madrid, España
0
+34 627 839 407
fernaperg@gmail.com
Descargar PDF

Fernando Pérez Gutiérrez

Sobre mi:

De verdad, disfruto al máximo de la programación, me encanta enfrentarme a nuevos retos, descubrir nuevas tecnologías, paradigmas y en general, resolver problemas. Esto se puede observar por un lado en los ya muchos proyectos en los que he trabajado y dirigido de manera profresional, como en los proyectos que he desarrollado por mi cuenta en solitario y en equipo.

Por otro lado, las ramas que más me gustan de Ingeniería Informática son Inteligencia Artificial y DevOps. En el área de IA algunas de las técnicas que más me han interesado han sido Programación Evolutiva y Redes Neuronales, especialmente las Redes Neuronales Convolucionales (CNN) y en general, visión por computador.

Hablando de otros temas, me encanta hacer deporte, trucos de magia, conocer gente y enfrentarme a nuevos retos mentales (por ejemplo, el cubo de rubik o páginas como CodeWars).

Experiencia:

Educación:

Proyectos Principales:

v1.0.0 - Release

Ejemplo Gunner Farneback

Desarrollado individualmente, este proyecto mezcla técnicas de visión por computador (detección de Flujo óptico) con técnicas de aprendizaje automático. Fue desarrollado como trabajo de fin de máster en ingeniería informática y obtuvo una calificación de 9.5/10.

De modo muy simplificado el sistema detecta el movimiento de vehículos en carretera por medio de complejos algoritmos de flujo óptico, tales como, Lucas Kanade o Gunner Farneback. Posteriormente se aplica umbralización para eliminar el ruido en la detección de movimiento. De este modo, se utilizan técnicas de detección de bordes para obtener los contornos de los objetos.

Por otro lado, se preprocesó el dataset MIO-TCD de vehículos con 11 categorías para entrenar diferentes modelos de redes neuronal convolucionales. Estos modelos fueron, ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152 y AlexNet.

En paralelo se hizo uso de la red neuronal convolucional de detección de objetos YOLOv3 (esta no hace uso de los algoritmos de flujo óptico, sino que resuelve el problema completo de una manera totalmente diferente).

Todo ello, se conectó entre si haciendo uso de tecnologías como OpenCV o Tensorflow, así como Tensorflow Extended y Tensorboard. Así mismo, el resultado obtenido fue muy satisfactorio, pues el sistema era totalmente capaz de detectar vehículos en movimiento y clasificarlos con un alto porcentaje de acierto (hasta 99.21% en el caso de YOLOv3).

Técnicas y Tecnologías utilizadas:

v1.0.0 - Release

Este es uno de los proyectos más ambiciosos y completos. Ha sido desarrollado por cuatro miembros (entre los que me encuentro) y dos directores de proyecto (uno ayudante). Fue desarrollado como trabajo de fin de grado y calificado con 10/10.

Consiste en un sistema capaz de consultar diferentes API's (como la de BioASQ o Simple Wikipedia). Por tanto, esta realizado de una forma genérica, de modo que no es necesario hacer un gran cambio si se quiere utilizar una nueva fuente de conocimineto, de esta forma obtuvimos un sistema adaptable a distintos dominios.

Para conseguirlo se hizo uso de librerías de procesamiento de lenguaje natural (inicialmente NLTK pero finalmente y tras un largo estudio se optó por Spacy) y librerías de extracción de conceptos (en este caso la librería Grafeno, actualmente en desarrollo y sobre la que se hicieron multiples mejoras).

El proceso (de modo simplificado) del sistema consiste en:

  1. Ánalisis de la consulta introducida: Con Spacy.
  2. Obtención de Información Textual: Con Grafeno, para obtener un grafo.
  3. Obtención de la Respuesta: Comparando dicho grafo con el conocimiento del sistema a través de consultas autogeneradas en Neo4J.
  4. Generación textual de la respuesta: Con un módulo de Grafeno modificado por nosotros que realiza el proceso de linearización de grafos.

Técnicas y Tecnologías utilizadas:

v2.4.0 - Release

Ejemplo librería

Uno de los mayores y más complejos proyectos en los que he trabajado, desarrollado íntegramente por mi. El objetivo de esta librería es ayudar en el tratamiento y procesado de imágines en tiempo real en Python (basado en la librería OpenCV).

Después de más de 6 meses de desarrollo y 9 releases. Al fin tenemos una versión que cumple con los estándares mínimos para un entorno de producción.

Actualmente existen al menos 2 empresas que la utilizan como parte de sus proyectos.

Por un lado ofrece mayor facilidad de uso que OpenCV y por el otro, mayor rendimiento en la obtención de fotogramas de videos y streamings, siendo hasta un 52% más rápido.

También es capaz de pintar y etiquetar objetos seleccionados, así como, trackearlos y detectar cambios de escena (por ejemplo, detectar cuando hay un cambio de cámara en televisión).

Además ofrece algunas otras funcionalidades, tales como, detectar eventos de teclado, guardar en ficheros comprimidos la edición (sin perder el archivo original), preprocesar la respuesta, etc.

Técnicas y Tecnologías utilizadas:

v1.0.0 - CR

Este proyecto es, por un lado, una implementación completa del famoso juego de móvil 2048 en forma de aplicación de escritorio (básado en un proyecto OpenSource creado por yangshun) y por otro lado una Inteligencia Artificial capaz de jugar dicho juego.

Para la implementación de dicha IA se ha utilizado una red neuronal multicapa entrenada por medio de un conjunto de datos generados de partidas previas utilizando diferentes heurísticas. Tales como: random (juega partidas con movimientos totalmente aleatorios), corner (trata de que la ficha de más valor este siempre en una esquina, aunque con cierto ruido), one_corner (igual que el anterior pero manteniendose siempre en la misma esquina) y explorer.

La heurística explorer es la que mejor resultados ha dado. Genera árboles de decisión mirando las "N" próximas jugadas y quedándose con la elección que le lleva a la mejor solución (aquella en la que no haya perdido y haya alcanzado una mayor puntuación).

Para el futuro planeo mejorar explorer (para hacer que realice más podas de caminos "poco prometedores") y crear una heurística de entrenamiento basada en algoritmos evolutivos. No obstante, la IA ya es capaz de pasarse el juego en muchas ocasiones (obtener al menos una ficha de valor 2048).

Técnicas y Tecnologías utilizadas:

v1.1.0 - Release

El objetivo de este proyecto era hacer más rápido los cálculos del juego de rol Anima Beyond Fantasy (juego de mesa de interpretación con dados, estilo Dungeons and Dragons) por medio de una aplicación de escritorio.

Este proyecto incluye un documento Excel con todos los precalculos para crear un personaje siguiendo las reglas del juego (con más de 2000 dependencias y más de 20000 datos organizados en tablas e introducidos a mano).

El proyecto es capaz de cargar dicho documento, extraer la información relevante para poder jugar y generar un documento json con información comprimida así como todas las funcionalidades para realizar los cálculos acorde a la ficha de personaje previamente cargada.

Incluye funcionalidades como auto-actualizar versiones (cuando se sube una nueva versión en GitHub) o gestión de carga de multiples personajes simultáneamente.

Actualmente y por petición popular me encuentro desarrollando en equipo la versión web completamente responsive y con funcionalidades extra.

Técnicas y Tecnologías utilizadas:

Los proyectos principales son los mencionados arriba, no obstante considero interesante, mencionar por encima los otros proyectos en los que he trabajado por mi cuenta y con los que tanto he aprendido.

  • flask_api_generator (en desarrollo): Generador automático y configurable de APIs en Flask, acepta Docker, conexión a BBDD, así como, documentación con Swagger.
  • Smart-Assistant (en desarrollo): Inteligencia artificial capaz de reconocer y añadir nuevos comandos de voz y realizar tareas típicas de un asistente virtual.
  • RubikControl: Sistema profesional para medir los tiempos y generar estadísticas de resolución de las diferentes versiones del cubo de Rubik (en Java).
  • CodeWars: Proyecto con todas las soluciones que he realizado para los problemas de la página con el mismo nombre (en Python y Java principalmente).
  • GoatQueen (por ahora repositorio privado): Juego tablero 3D en proceso de desarrollo en Unity con C#.
  • SplayTree: Árbol binario de busqueda autoajustable desarrollado en C++
  • WorldGenerator: Generador de mundos y laberintos aleatorios siguiendo un algoritmo eficiente enteramente propio. Desarrollado en C++ y haciendo uso de la librería SFML.
Técnicas y Tecnologías utilizadas:

GitHub: