Los mejores trabajos de graduación del semestre de primavera de Technoprojects



Nuestra nueva historia sobre los proyectos de graduación de los estudiantes de nuestros proyectos de estudio es la última de este año. En esta ocasión te presentaremos tres trabajos de alumnos de Tecnoparque, Tecnópolis y Tecnosfera. Estos son proyectos de graduación basados ​​en los resultados de dos años de estudio, y el jurado los seleccionó como el mejor trabajo. También nos gustaría recordarles que los programas de formación en Tecnoparque, Tecnópolis y Tecnosfera tienen especialización propia y son muy diferentes.



Publicaciones anteriores: 1 , 2 , 3 , 4 , 5 .



Esta es la primera vez que estudiantes que han defendido proyectos están expuestos a estas tecnologías. El proyecto tiene una duración de un semestre, el propósito del artículo es mostrar el proceso educativo y los resultados del trabajo de los estudiantes.




Facepick, Tecnópolis



Servicio de búsqueda de fotografías por caras.



En eventos masivos (conferencias, vacaciones, fiestas corporativas, bodas) se toman cientos, si no miles, de fotos. Y lleva mucho tiempo encontrar imágenes que te muestren a ti y a tus amigos o familiares. Por lo tanto, el equipo del proyecto decidió crear un servicio para encontrar rápidamente fotografías que contengan rostros específicos.



El sistema, usando redes neuronales, primero reconoce rostros en imágenes de referencia y luego agrupa la base de fotografías de las personas encontradas. El servicio puede funcionar con fuentes externas: VKontakte, Odnoklassniki, Yandex.Disk y Google Drive.



El álbum procesado es un conjunto de fotopacks, cada uno de los cuales contiene fotografías de una persona. En la página del álbum procesado, el usuario puede ver las fotos de un paquete de fotos en particular, así como descargarlo en su dispositivo o compartirlo con amigos. Puede buscar el álbum procesado cargando una foto de una persona.











El servicio es una aplicación cliente-servidor con API REST. La parte del servidor consta de dos componentes principales: la aplicación Java, que implementa la lógica de interacción del usuario con el servicio; y aplicaciones de Python para identificar rostros en fotografías y extraer sus características únicas utilizando una red neuronal.



Los autores se centraron en la escalabilidad, por lo que utilizaron un equilibrador de carga para equilibrar la carga en el backend, y el uso de la cola de mensajes de Redis para la interacción entre las aplicaciones Java y Python le permite cambiar de forma independiente la cantidad de instancias de estos componentes.



Todos los servicios se implementan en contenedores Docker separados, y se utiliza docker-compose para organizarlos. Para implementar el lado del cliente de la aplicación, usamos TypeScript y React. La base de datos PostgreSQL se utiliza como almacenamiento de datos persistente.







En el futuro, los graduados quieren mejorar la precisión del reconocimiento, agregar filtros por género y edad, y admitir Facebook y Google Photos. También hay ideas para monetizar el servicio limitando la funcionalidad gratuita e introduciendo publicidad.



Equipo de proyecto: Vadim Dyachkov, Egor Shakhmin, Nikolay Rubtsov.



Video con protección de proyectos .



Creadores de juegos, Tecnoparque



Solución de hardware y software para el registro de entrenamiento deportivo.



Dio la casualidad de que todos los miembros del equipo del proyecto son aficionados a los deportes. Al entrar al gimnasio y ver a la gente registrar sus entrenamientos y su progreso, los estudiantes se preguntaron si este proceso podría mejorarse. Después de la investigación y las encuestas, el equipo se dio cuenta de que las aplicaciones de entrenamiento existentes tienen una UX demasiado compleja y que los dispositivos portátiles del mercado funcionan bien, principalmente con ejercicios cardiovasculares (correr, elipse, etc.). Como resultado, formularon su esquema de trabajo:





El dispositivo se fabricó de forma independiente, pues la integración con las soluciones existentes (por ejemplo, MiBand) resultó ser muy laboriosa, y en el caso de los relojes y pulseras, los desarrolladores no quedaron satisfechos con la colocación en la muñeca, esto dio menos información sobre los patrones de movimiento.



Elegimos el módulo ESP32-WROOM como parte del ESP32-devkit-v1. Cumplió con ciertos requisitos, para él se escribieron utilidades para generar código y firmware en Python, y además, se puede programar desde el IDE de Arduino como cualquier placa Arduino. El módulo IMU de Amperka fue elegido para la función de sensores, que incluye un acelerómetro y un giroscopio. Toda la comunicación con los sensores se realiza mediante el protocolo I2C.



Diagrama de prototipo:







Para la próxima versión del dispositivo, se ordenó la impresión de placas y la soldadura de componentes en China.









A continuación, fue necesario entrenar la red neuronal para reconocer varios ejercicios. Sin embargo, no hay tantos conjuntos de datos abiertos que contengan series de tiempo del acelerómetro y el giroscopio durante la actividad física. Y la mayoría de ellos solo cubren correr, caminar, etc. Como resultado, decidimos hacer un set de entrenamiento nosotros mismos. Elegimos tres ejercicios principales que no requerían equipo especial: flexiones, sentadillas y giros.



Datos del acelerómetro después del filtrado.





Datos del giroscopio después del filtrado.



Una red neuronal recurrente con arquitectura LSTM se encarga de clasificar los ejercicios. Para la conveniencia de visualizar la serie de tiempo, se utilizó el análisis de componentes principales (PCA).





El resultado de la red neuronal (línea naranja - la probabilidad de hacer flexiones, verde - sentadillas).



Para contar el número de repeticiones se utilizó el método de contar máximos locales, teniendo en cuenta el nivel de señal base. Después de lograr resultados satisfactorios, utilizamos la aplicación móvil. Una de las condiciones fue el desarrollo de una interfaz de este tipo que requeriría una interacción mínima con un teléfono inteligente. Elegimos MVP como patrón de diseño.



Interfaz de aplicación:









Además de la aplicación cliente, los autores desarrollaron el programa de utilidad Batcher, que facilitó el registro y marcado de datos para entrenar una red neuronal:





Además, los autores escribieron un mecanismo para validar lotes después de guardarlos en la base de datos.



Para almacenar series de tiempo se eligió la base de datos InfluxDB, que está adaptada para tales tareas. Para implementar un servicio de aprendizaje automático, elegimos una pila estándar de Python, Django y Celery. La cola de tareas permitió que la tarea de clasificación se realizara de forma asincrónica sin bloquear la interfaz principal de la aplicación.



Para almacenar los datos del usuario, tomaron Postgres, el backend de la aplicación en sí se implementó en Go usando el marco Gin.





Arquitectura general.



Como resultado, el equipo logró sus objetivos y desarrolló una versión MVP del producto, que le permite resolver la tarea de registrar la capacitación con un solo botón. Ahora los estudiantes están trabajando para reducir el costo y el tamaño del dispositivo, mejorar la precisión de la red neuronal y expandir el conjunto de ejercicios compatibles.



Equipo de proyecto: Oleg Soloviev, Temirlan Rakhimgaliev, Vladimir Elfimov, Anton Martynov.



Video con protección de proyectos .



GestureApp, tecnosfera



Un marco para una interfaz sin contacto.



A veces resulta inconveniente o indeseable utilizar interfaces táctiles familiares. Por ejemplo, cuando conduce un automóvil, usa un cajero automático o una terminal de pago, o cuando simplemente tiene las manos sucias. Para resolver este problema, los autores crearon un marco de interfaz sin contacto que permite que los gestos controlen la aplicación.



Para funcionar, GestureApp necesita una cámara de video, cuya señal se procesa en tiempo real para reconocer los gestos del usuario. Y dependiendo de los gestos, el framework da los comandos adecuados a la aplicación.





La carga computacional es relativamente baja, el marco puede funcionar en dispositivos bastante débiles y no requiere equipo especial.



Los gestos son reconocidos por la red neuronal MobileNet3D. La red neuronal da las probabilidades de clases de gestos, así como una clase especial "sin gesto". Esta arquitectura permite el reconocimiento de gestos tanto estáticos como dinámicos. La red neuronal se entrenó en el conjunto de datos Jester. Se ha logrado la precisión de la predicción F 1 = 0,92.



La secuencia de captura recibe fotogramas de la cámara frontal y los coloca al final de la lista. Si su longitud es mayor que 32, el hilo de captura activa el hilo de ejecución del modelo. Toma 32 fotogramas desde el principio de la lista, predice las clases y luego elimina elementos del final hasta que queda un elemento. Esto elimina la necesidad de una sincronización intensa y mejora significativamente el rendimiento: 20 FPS en el iPhone 11, 18 FPS en el iPhone XS Max, 15 FPS en el iPhone XR. Y con una tubería inteligente para preprocesamiento y posprocesamiento, el consumo de energía se mantiene al mínimo.



Hasta ahora, el marco solo funciona para iOS y Windows. El desarrollo utilizó el marco PyTorch, la plataforma TwentyBN y el lenguaje Swift.



Los planes incluyen: mejorar la calidad del reconocimiento, agregar reconocimiento de nuevos gestos sin volver a entrenar a todos los modelos, crear una versión para Android, agregar no solo gestos de botones, sino también de controles deslizantes.



Equipo de proyecto: Maxim Matyushin, Boris Konstantinovsky, Miroslav Morozov.



Video con protección de proyectos .






Puede leer más sobre nuestros proyectos educativos en este enlace . Y van más a menudo al canal Technostream , aparecen regularmente nuevos videos de capacitación sobre programación, desarrollo y otras disciplinas.



All Articles