Os melhores trabalhos de graduação do semestre da primavera de Technoprojects



Nossa nova história sobre os projetos de graduação dos alunos dos nossos projetos de estudos é a última deste ano. Desta vez, apresentaremos três trabalhos de alunos do Technopark, Technopolis e Technosphere. São projetos de graduação baseados nos resultados de dois anos de estudos, e o júri os selecionou como os melhores trabalhos. Gostaríamos também de lembrar que os programas de treinamento no Technopark, Technopolis e Technosphere têm especializações próprias e são muito diferentes.



Publicações anteriores: 1 , 2 , 3 , 4 , 5 .



É a primeira vez que alunos que defendem projetos são expostos a essas tecnologias. O projeto tem duração de um semestre, o objetivo do artigo é mostrar o processo educacional e os resultados do trabalho dos alunos.




Facepick, Technopolis



Serviço de pesquisa de fotos por rostos.



Em eventos públicos - conferências, feriados, festas corporativas, casamentos - centenas ou mesmo milhares de fotografias são tiradas. E leva muito tempo para encontrar fotos que mostrem você e seus amigos ou parentes. Portanto, a equipe do projeto decidiu fazer um serviço para encontrar rapidamente fotografias que contenham rostos especificados.



O sistema, usando redes neurais, primeiro reconhece rostos em imagens de referência e, em seguida, agrupa a base de fotografias das pessoas encontradas. O serviço pode funcionar com fontes externas: VKontakte, Odnoklassniki, Yandex.Disk e Google Drive.



O álbum processado é um conjunto de pacotes de fotos, cada um contendo as fotos de uma pessoa. Na página do álbum processado, o usuário pode visualizar as fotos de um determinado photopack, e também fazer o download para o seu aparelho ou compartilhar com os amigos. Você pode pesquisar o álbum processado fazendo upload da foto de uma pessoa.











O serviço é um aplicativo cliente-servidor com API REST. A parte do servidor consiste em dois componentes principais: aplicativo Java, que implementa a lógica de interação do usuário com o serviço; e aplicativos Python para identificar rostos em fotografias e extrair seus recursos exclusivos usando uma rede neural.



Os autores se concentraram na escalabilidade, então eles usaram um balanceador de carga para balancear a carga no back-end, e usar a fila de mensagens Redis para interação entre aplicativos Java e Python permite que você altere independentemente o número de instâncias desses componentes.



Todos os serviços são implantados em contêineres Docker separados e docker-compose é usado para orquestrá-los. Para implementar o lado cliente do aplicativo, usamos TypeScript e React. O banco de dados PostgreSQL é usado como um armazenamento de dados persistente.







No futuro, os graduados desejam melhorar a precisão do reconhecimento, adicionar filtros por sexo e idade e suporte para Facebook e Google Fotos. Também há ideias para monetizar o serviço, limitando a funcionalidade gratuita e introduzindo publicidade.



Equipe do projeto: Vadim Dyachkov, Egor Shakhmin, Nikolay Rubtsov.



Vídeo com proteção do projeto .



Criadores de teatro, Technopark



Solução de hardware e software para registro de treinamento esportivo.



Acontece que todos os membros da equipe do projeto gostam de esportes. Entrando na academia e observando as pessoas registrar seus treinos e progresso, os alunos se perguntaram se esse processo poderia ser melhorado. Depois de pesquisas e pesquisas, a equipe percebeu que os aplicativos de treino existentes têm uma experiência do usuário muito complexa e os vestíveis no mercado funcionam bem principalmente para exercícios cardiovasculares (corrida, elipse, etc.). Como resultado, eles formularam seu esquema de trabalho:





O dispositivo foi feito de forma independente, porque a integração com as soluções existentes (por exemplo, MiBand) acabou consumindo muito tempo e, no caso de relógios e pulseiras, os desenvolvedores não ficaram satisfeitos com a colocação no pulso, isso deu menos informações sobre os padrões de movimento.



Escolhemos o módulo ESP32-WROOM como parte do ESP32-devkit-v1. Ele atendeu a certos requisitos, utilitários para gerar código e firmware em Python foram escritos para ele e, além disso, pode ser programado no IDE do Arduino como qualquer placa Arduino. O módulo Amperka IMU foi escolhido para o papel de sensores, que inclui um acelerômetro e um giroscópio. Toda a comunicação com os sensores é realizada através do protocolo I2C.



Diagrama de protótipo:







Para a próxima versão do dispositivo, a impressão da placa e a soldagem de componentes foram encomendadas na China.









Em seguida, foi necessário treinar a rede neural para reconhecer vários exercícios. No entanto, não existem tantos conjuntos de dados abertos que conteriam séries temporais do acelerômetro e giroscópio durante a atividade física. E a maioria deles cobre apenas corrida, caminhada, etc. Como resultado, decidimos fazer um conjunto de treinamento nós mesmos. Escolhemos três exercícios principais que não exigiam equipamento especial: flexões, agachamentos e torções.



Dados do acelerômetro após a filtragem.





Dados do giroscópio após a filtragem.



Uma rede neural recorrente com arquitetura LSTM é responsável pela classificação dos exercícios. Para conveniência de visualização das séries temporais, foi utilizada a análise de componentes principais (PCA).





O resultado da rede neural (linha laranja - a probabilidade de fazer flexões, verde - agachamentos).



Para a contagem do número de repetições, foi utilizado o método de contagem dos máximos locais, levando em consideração o nível do sinal de base. Após obter resultados satisfatórios, adotamos o aplicativo móvel. Uma das condições era o desenvolvimento de uma interface que exigiria o mínimo de interação com um smartphone. Escolhemos MVP como padrão de design.



Interface do aplicativo:









Além do aplicativo cliente, os autores desenvolveram o programa utilitário Batcher, que facilitou a gravação e marcação de dados para o treinamento de uma rede neural:





Além disso, os autores escreveram um mecanismo para validar lotes após salvá-los no banco de dados.



Para o armazenamento das séries temporais, foi escolhido o banco de dados InfluxDB, que é adaptado para tais tarefas. Para implementar um serviço de aprendizado de máquina, escolhemos uma pilha padrão de Python, Django e Celery. A fila de tarefas permitiu que a tarefa de classificação fosse realizada de forma assíncrona, sem bloquear a interface principal do aplicativo.



Para armazenar dados do usuário, eles pegaram o Postgres, o backend do próprio aplicativo foi implementado em Go usando o framework Gin.





Arquitetura geral.



Como resultado, a equipe atingiu seus objetivos e desenvolveu uma versão MVP do produto que permite resolver a tarefa de registrar o treinamento com um único botão. Agora os alunos estão trabalhando para reduzir o custo e o tamanho do dispositivo, melhorar a precisão da rede neural e expandir o conjunto de exercícios com suporte.



Equipe do projeto: Oleg Soloviev, Temirlan Rakhimgaliev, Vladimir Elfimov, Anton Martynov.



Vídeo com proteção do projeto .



GestureApp, Technosphere



Uma estrutura para uma interface sem contato.



Às vezes, torna-se inconveniente ou indesejável usar interfaces táteis familiares. Por exemplo, quando você está dirigindo um carro, usando um caixa eletrônico ou terminal de pagamento, ou quando suas mãos estão simplesmente sujas. Para resolver este problema, os autores criaram uma estrutura de interface sem contato que permite gestos para controlar o aplicativo.



Para funcionar, o GestureApp precisa de uma câmera de vídeo, cujo sinal é processado em tempo real para reconhecer os gestos do usuário. E dependendo dos gestos, o framework dá os comandos apropriados ao aplicativo.





A carga computacional é relativamente baixa, a estrutura pode funcionar em dispositivos bastante fracos e não requer equipamento especial.



Os gestos são reconhecidos pela rede neural MobileNet3D. A rede neural dá as probabilidades de classes de gestos, bem como uma classe especial "sem gesto". Esta arquitetura permite o reconhecimento de gestos estáticos e dinâmicos. A rede neural foi treinada no conjunto de dados Jester. A precisão da previsão F 1 = 0,92 foi alcançada .



O fluxo de captura recebe quadros da câmera frontal e os coloca no final da lista. Se seu comprimento for maior que 32, o encadeamento de captura ativará o encadeamento de execução do modelo. Ele pega 32 quadros do início da lista, prevê as classes e remove os elementos do final até que um elemento permaneça. Isso elimina a necessidade de sincronização pesada e melhora significativamente o desempenho: 20 FPS no iPhone 11, 18 FPS no iPhone XS Max, 15 FPS no iPhone XR. E com um pipeline inteligente para pré e pós-processamento, o consumo de energia é mínimo.



Até agora, o framework só funciona para iOS e Windows. O desenvolvimento utilizou o framework PyTorch, a plataforma TwentyBN e a linguagem Swift.



Os planos incluem: melhorar a qualidade de reconhecimento, adicionar reconhecimento de novos gestos sem treinar novamente todos os modelos, criar uma versão para Android, adicionar não apenas gestos de botão, mas também gestos de controles deslizantes.



Equipe do projeto: Maxim Matyushin, Boris Konstantinovsky, Miroslav Morozov.



Vídeo com proteção do projeto .






Você pode ler mais sobre nossos projetos educacionais neste link . E com mais frequência vá ao canal Technostream , regularmente aparecem novos vídeos de treinamento sobre programação, desenvolvimento e outras disciplinas.



All Articles