Criando um Navegador Utilizando Tecnologias de Realidade Aumentada e Métodos de Aprendizado de Máquina

Recentemente, a capacidade de viajar de uma pessoa está crescendo incrivelmente rápido, e podemos descobrir mais e mais lugares. Mas nem sempre é fácil navegar nesses lugares, e às vezes os edifícios têm formas arquitetônicas tão complexas que você pode até se perder em um local desconhecido.

Por exemplo, nossa Escola de Engenharia e Tecnologia Nº 777, São Petersburgo, pertence a esses edifícios. Enfrentamos um problema tão grande que, quando os pais e os convidados visitam nossa escola, é difícil encontrar o escritório certo ou outro local necessário. Todo mundo encontra seu caminho para sair dessa situação, alguém pergunta incessantemente os trabalhadores da construção e alguém apenas vagueia por corredores sem fim. Tendo analisado esse problema, decidimos fazer um navegador para os visitantes da nossa escola. Mas um navegador simples, com um mapa dentro do edifício, não é relevante, o que não pode ser dito sobre uma das tecnologias novas e de rápido desenvolvimento da realidade aumentada (AR). Nosso navegador foi desenvolvido com a tecnologia AR, visão computacional e métodos de aprendizado de máquina. Isso o ajudará a navegar e encontrar o local exato para onde os visitantes de nossa escola devem ir.

objetivo


O objetivo é criar um assistente universal na construção de orientação.

Objetivos principais:

  • Simplificar a orientação da escola de novos alunos, pais e convidados;
  • Torne o aplicativo universal para que mais tarde ele suporte a navegação não apenas em nossa escola, mas também em outros edifícios ao redor do mundo;
  • Interface amigável, compreensível para todos;

AR - Realidade Aumentada


Agora, a cada ano, mais e mais novas tecnologias aparecem, uma dessas tecnologias de realidade aumentada ou apenas RA. Primeiro, seu primeiro conhecido, aconteceu quando a conhecida empresa Google decidiu fazer seus óculos com realidade aumentada. Então a tecnologia AR começou a se desenvolver incrivelmente rápido. Quando o Google abandonou o projeto de vidro do Google, surgiu uma nova era de máscaras que reconheceu nosso rosto e o transformou em celebridades. Em seguida, o Pokémon capturou realidades e pessoas viajaram quilômetros em busca do personagem mais legal.

Mais recentemente, o Google e a Apple introduziram seus mecanismos ARC, ARCore e ARKit, respectivamente, a partir dos quais podemos concluir que a tecnologia AR se tornará ainda mais acessível para o desenvolvimento e criação de mais e mais novos aplicativos e jogos.

O que é AR?


A realidade aumentada é um ambiente que em tempo real complementa o mundo real, como o vemos com a ajuda de dados digitais processados ​​usando qualquer dispositivo e software de computação eletrônica.

Além disso, a realidade aumentada (RA) deve ser distinguida da virtual (realidade virtual, VR) e mista (realidade mista, RM).

Quais são as principais diferenças?


No AR, os objetos digitais virtuais são projetados em um ambiente real, diferente da realidade virtual.

A realidade virtual é um mundo criado por meios técnicos digitais, transmitidos a uma pessoa através dos sentidos.

A realidade mista é um cruzamento entre VR e AR e combina as duas abordagens.

A VR cria seu próprio mundo, onde uma pessoa mergulha, e a realidade aumentada trabalha com o mundo físico real, introduzindo objetos virtuais nele. Daqui resulta que a VR interage exclusivamente com os usuários, enquanto a AR interage com o mundo exterior.

Perspectivas de desenvolvimento


A tecnologia AR pode ocupar o nicho que a ficção científica dedicou aos hologramas. Somente hologramas não serão tão em breve, e dispositivos como Hololens (Microsoft Augmented Reality Glasses) estão tecnicamente prontos. A perspectiva de ver ilustrações interativas virtuais nas escolas, que podem ser vistas de todos os lados, com as quais você pode interagir e ver imediatamente o resultado de suas experiências, parece longe de belas fantasias brilhantes sobre o futuro. O treinamento em qualquer especialidade de engenharia pode se tornar muito mais visual e fácil de entender, além de interessante.

Para resumir, a realidade adicional não são apenas jogos e máscaras legais para redes sociais. Esse é um grande número de oportunidades no uso de RA nos campos da educação, indústria e medicina.

O crescimento da realidade aumentada é espantoso. Ao contrário da VR, ela não precisa contar com capacetes maciços e hardware poderoso, apenas o dispositivo mais compacto e móvel de nossa época - um smartphone.

A realidade aumentada já está mudando nosso presente: máscaras virtuais, caça Pokemon nas cidades e pântanos, crianças atirando uma na outra não a partir de pedaços de madeira, mas através da tela do telefone. Agora já é uma realidade.

Planejamento de trabalho


Nosso navegador possui um sistema de reconhecimento de número de gabinete, esse reconhecimento funciona usando métodos de aprendizado de máquina e, especificamente, foi usada a tecnologia de rede neural convolucional. Vamos mergulhar na arquitetura.

Para este modelo, tivemos que resolver 2 problemas principais:

  • detectar letras na imagem;
  • reconhecimento de cartas.

Se para o reconhecimento de letras existem redes antigas - boas do tipo LeNet, para detectar letras na imagem, tivemos que escrever nossa arquitetura de rede neural, compilar um banco de dados e treinar o modelo. Para compor a arquitetura, precisávamos entender que tipo de problema de aprendizado de máquina nosso modelo resolveria.

Após muito debate, chegamos a um consenso - o detector de texto deve resolver o problema de regressão, ou seja, o modelo deve prever onde a carta está potencialmente localizada. Em seguida, simulamos uma rede neural composta de duas camadas, não incluindo as de entrada e de saída, mas enfrentamos um problema: havia muitos dados de saída, por isso tivemos um problema - o problema de reciclagem, e chegamos à conclusão de que precisamos de uma arquitetura e abordagem diferentes para o problema. Após uma longa discussão, chegamos à conclusão de que precisamos detectar não letras de uma só vez, mas primeiras palavras, e somente então letras. E aqui passamos bastante tempo alterando o banco de dados e adicionamos outra rede neural à cascata, por causa disso nosso coeficiente (escolhemos a métrica Erro Quadrático Médio) diminuiu 40%, mas ainda assim o resultado real estava longe do desejado,portanto, decidimos reescrever a arquitetura de duas redes neurais para isso, tivemos que desmontar o “conjunto” e entender como cada rede funciona separadamente e entender por que precisamos de cada parâmetro para cada rede. Então percebemos que, em vez de reduzir o número de parâmetros, podemos mudar a abordagem do problema e nossa equipe mudou o modelo: agora essa é uma rede neural convolucional, com essa abordagem, reduzimos a taxa de erros em 30% e a velocidade de execução pela rede aumentou.agora essa é uma rede neural convolucional; com essa abordagem, reduzimos a taxa de erros em 30% e a velocidade de execução na rede aumentou.agora essa é uma rede neural convolucional; com essa abordagem, reduzimos a taxa de erros em 30% e a velocidade de execução pela rede aumentou.

O problema da detecção de caracteres está resolvido, resta resolver o problema do reconhecimento de caracteres, o reconhecimento de caracteres em si não era uma tarefa nova para nossa equipe, treinamos uma rede neural convolucional semelhante em arquitetura à rede neural LeNet e recebemos um coeficiente de erro de 99% no conjunto de dados de teste (ou seja, uma rede neural quase sem erro). Mas, na prática, isso acabou sendo uma solução inaceitável, uma vez que uma imagem de resolução fixa deve ser inserida nessa rede, mas, na prática, imagens diferentes com resoluções diferentes podem aparecer, e então nossa equipe pensou nisso e decidiu treinar a mesma rede neural, mas apenas em imagens com quantidade suficiente. uma resolução grande, tão grande que se poderia supor com precisão que não haveria maior permissão para entrar na rede neural,mas então abandonamos essa ideia porque estamos tentando alterar a resolução da imagem fornecida para a entrada da arquitetura, o que não implica uma alteração na resolução da imagem; agora, precisamos pensar na arquitetura de reconhecer letras e percebemos que a melhor solução era tomar como base arquitetura - descendente da rede neural LeNet - ResNet da Microsoft, essa arquitetura implica que receberá imagens com diferentes resoluções.que receberá imagens com diferentes resoluções.que receberá imagens com diferentes resoluções.

Como resultado, depois de treinarmos a rede neural, a taxa de erro para nós se tornou 95% - sim, é um pouco menor do que com a arquitetura LeNet, mas funciona. Lembramos que não precisávamos reconhecer todas as letras, mas apenas os números e decidimos adicionar antes de determinar símbolo é outro modelo que determinará se o símbolo a ser determinado é um número ou uma letra, uma vez que este modelo resolve o problema de classificação e classifica apenas duas classes, a rede neural não tinha sentido e, portanto, tomamos a regressão logística como base da arquitetura, depois de adicionar este modelo a “Ensemble” e reciclagem da rede neural (apenas por números), nossa taxa de erro foi de + - 97%, o que não é muito ruim, nesta “nota” decidimos terminar o trabalho de reconhecimento de caracteres e, como resultado, obtivemos esse “ensemble”:

Foto original -> Rede neural convolucional que determina a localização das palavras -> Rede neural convolucional que determina a localização das letras -> Regressão logística, que determina a letra na imagem ou número -> ResNet, que determina o dígito final

Mas tivemos mais um problema: o problema com o rastreamento da localização geográfica. A princípio, pensamos que essa era uma das tarefas mais fáceis e acabou por estar errada. Em primeiro lugar, nós, como programadores de verdade, seguimos o caminho de menor resistência e simplesmente rastreamos a localização geográfica do GPS no objeto - não funcionou, o erro foi tão grande que não nos serviu nada, decidimos pensar em outras opções para determinar a localização geográfica e decidimos conectar o serviço da empresa Yandex - Yandex Latitude, mas acabou não funcionando, ou seja, não é um serviço em que você não pode conectar a API. Nosso próximo pensamento foi conectar a estrutura de mapbox para o mecanismo Unity (foi nele que decidimos desenvolver nosso projeto), depois que conectamos essa estrutura com sucesso, examinamos suas capacidades e escrevemos um rastreador GPS simples - o resultado já estava melhormas o erro ainda era grande, por isso continuamos a procurar soluções e, após uma leitura cuidadosa da documentação, descobrimos que o valor obtido apresentava um erro de 15%, o que não nos convinha, principalmente porque essa abordagem tinha uma desvantagem muito grande - usava o GPS , e estamos fazendo um navegador pela escola, ou seja, dentro de casa, então o sinal do GPS ficará muito fraco ou não + GPS não é suportado em todos os dispositivos, por isso mudamos a abordagem e passamos do reconhecimento global para o local com base no Sistema de Posicionamento Visual Esse método também tem suas desvantagens, mas elas não afetaram nosso trabalho de forma alguma, portanto o sistema de rastreamento por localização geográfica estava pronto.que existe um erro de 15% para o valor obtido, isso não nos convinha, especialmente porque essa abordagem teve uma grande desvantagem - ela usava GPS, e fazemos o navegador pela escola, depois em ambientes fechados, então o sinal de GPS será muito fraco ou não será Em geral, o + GPS não é suportado em todos os dispositivos, e foi por isso que mudamos a abordagem e passamos do reconhecimento global para o local com base no Sistema de Posicionamento Visual. Este método também tem suas desvantagens, mas elas não afetaram o nosso trabalho de forma alguma, por isso o sistema de rastreamento por localização geográfica estava pronto.que existe um erro de 15% para o valor obtido, isso não nos convinha, especialmente porque essa abordagem teve uma grande desvantagem - ela usava GPS, e fazemos o navegador pela escola, depois em ambientes fechados, então o sinal de GPS será muito fraco ou não será Em geral, o + GPS não é suportado em todos os dispositivos, e foi por isso que mudamos a abordagem e passamos do reconhecimento global para o local com base no Sistema de Posicionamento Visual. Este método também tem suas desvantagens, mas elas não afetaram o nosso trabalho de forma alguma, por isso o sistema de rastreamento por localização geográfica estava pronto.então o sinal do GPS ficará muito fraco ou não + O GPS não é suportado em todos os dispositivos, por isso mudamos a abordagem e passamos do reconhecimento global para o local com base no Sistema de Posicionamento Visual, esse método também tem suas desvantagens, mas não afetou nosso trabalho, então o sistema de localização geográfica estava pronto.então o sinal do GPS ficará muito fraco ou não + O GPS não é suportado em todos os dispositivos, por isso mudamos a abordagem e passamos do reconhecimento global para o local com base no Sistema de Posicionamento Visual, esse método também tem suas desvantagens, mas não afetou nosso trabalho, então o sistema de localização geográfica estava pronto.

Significado prático


Nosso aplicativo serve para orientar melhor as pessoas que vieram pela primeira vez ou que simplesmente têm um entendimento ruim da estrutura da escola de pessoas em nossa instituição educacional. Eles virão e encontrarão na entrada um estande com um código QR, ao ler qual aplicativo é baixado.

Funcional


O que nosso aplicativo pode fazer:

  • reconhecer o número do gabinete pela placa,
  • mapa detalhado da escola,
  • levar uma pessoa ao seu escritório,
  • procure um escritório pelo seu número,
  • procure a sala de aula na lista e por tipo (todas as salas de aula estão distribuídas em determinados grupos, dependendo da matéria ensinada nesta sala).

Implementação de aplicativo


O aplicativo foi escrito em um dos mecanismos mais populares chamados “Unity”, usando a linguagem de programação C #, além de usar o Python e a biblioteca TensorFlow, além de todas as opções acima, o gerenciador de pacotes Anaconda foi usado.

Como usar esta aplicação?


Suponha que eu seja pai e tenha vindo à reunião de pais, preciso entrar na sala 339, um escritório de informática. Eu fui para a escola e preciso digitalizar, enquanto repito o código QR do tablet. Depois de carregar o aplicativo com êxito, chegarei ao menu principal:

imagem

Depois disso, posso acessar o menu de instruções para descobrir como usar o aplicativo:

imagem

Esta instrução descreve em detalhes como encontrar a classe, ou seja, primeiro, no menu principal, clicamos em “Find Class” e os seguintes menus são exibidos: A

imagem

seta no canto superior direito nos permite voltar ao menu principal, se o sistema reconheceu o número do gabinete, um quadro aparece ao redor da placa e uma janela de confirmação:

imagem

Se o modelo reconheceu corretamente o gabinete, nosso “pai” condicional clicará em “sim”, se o número do gabinete não for reconhecido corretamente, clique em “não” e tire a foto novamente. Portanto, o aplicativo entenderá onde estamos no espaço da escola.

Em seguida, o "pai" deve escolher um destino e aqui ele tem duas opções: digite o número do escritório ou selecione seu tipo e encontre-o na lista posteriormente:

imagem

imagem

Depois disso, o "pai" deve seguir as indicações da câmera.

Quando você chegar ao seu destino, o navegador o notificará.

Há outra opção, mais familiar, o “pai” clica no menu principal - “Plano da escola” e um plano detalhado é aberto, onde você pode navegar independentemente como chegar ao local desejado.

Planta 1 Planta

imagem


2

imagem

No momento, essa é toda a funcionalidade presente no aplicativo; no futuro, está planejado finalizar o aplicativo e adicionar funções ainda mais interessantes.

Você pode assistir ao vídeo no link abaixo:


Conclusão


Com um trabalho em equipe bem coordenado, tempo e habilidades suficientes para aplicar habilidades pessoais, qualquer projeto pode ser implementado.

Trabalhou no aplicativo:

Ilya Vasilenko - programador (back-end)

Demid Parfenyev - designer

Lunev Daniil - desenvolvedor de unidade (front-end)

Mikhail Purtov - Data Miner, criador

Graças ao nosso projeto, cada membro de nossa equipe aprendeu muitas coisas novas. Do design à programação e visão computacional.

Nossa equipe do PYC acredita que Habr amará nosso projeto.

Atenciosamente, Equipe PYC

Ferramentas


Unity + C #

Python + gerenciador de pacotes Anaconda + biblioteca TensorFlow para criação de redes neurais + biblioteca para criação de modelos de aprendizado de máquina

scikit -learn Immersal - Uma biblioteca que implementa VPS

Bibliografia



Site Tensorflow Site Immersal
Site C #
Site Python

* Esta publicação não pretende divulgar nosso aplicativo, porque nem sequer está disponível em código aberto e funciona apenas dentro da escola

All Articles