Crear un navegador utilizando tecnologías de realidad aumentada y métodos de aprendizaje automático

Recientemente, la capacidad de viajar de una persona está creciendo increíblemente rápido, y podemos descubrir más y más lugares. Pero no siempre es fácil navegar en estos lugares, y a veces los edificios tienen formas arquitectónicas tan complejas que incluso puede perderse en un lugar desconocido.

Por ejemplo, nuestra Escuela de Ingeniería y Tecnología No. 777, San Petersburgo, pertenece a dichos edificios. Nos enfrentamos a un problema tal que cuando los invitados y los padres visitan nuestra escuela, les resulta difícil encontrar la oficina correcta u otro lugar necesario. Todos encuentran su salida de esta situación, alguien pregunta interminablemente a los trabajadores de la construcción, y alguien simplemente deambula por pasillos interminables. Después de analizar este problema, decidimos hacer un navegador para nuestros visitantes para nuestra escuela. Pero un simple navegador con un mapa dentro del edificio no es relevante, lo que no se puede decir sobre una de las nuevas tecnologías de realidad aumentada (AR) que se está desarrollando rápidamente. Nuestro navegador fue desarrollado con tecnología AR, visión por computadora y métodos de aprendizaje automático. Le ayudará a navegar y encontrar el lugar exacto donde deben ir los visitantes de nuestra escuela.

propósito


El objetivo es crear un asistente universal en la orientación del edificio.

Objetivos principales:

  • Para simplificar la orientación de la escuela de nuevos estudiantes, padres e invitados;
  • Haga que la aplicación sea universal para que luego sea compatible con la navegación no solo en nuestra escuela, sino también en cualquier otro edificio del mundo;
  • Interfaz fácil de usar, comprensible para todos;

AR - Realidad Aumentada


Ahora, cada año aparecen más y más nuevas tecnologías, una de esas tecnologías de realidad aumentada o simplemente AR. Primero, su primer conocido, sucedió cuando la conocida empresa Google decidió hacer sus gafas con realidad aumentada. Entonces, la tecnología AR comenzó a desarrollarse increíblemente rápido. Cuando Google abandonó su proyecto de Google Glass, una nueva era de máscaras llegó a reconocer nuestra cara y convertirla en celebridades. Luego, el Pokémon capturó las realidades y la gente viajó kilómetros en busca del personaje más genial.

Más recientemente, Google y Apple presentaron sus motores ARC, ARCore y ARKit, respectivamente, de los cuales podemos concluir que la tecnología AR será aún más accesible para el desarrollo y la creación de más y más nuevas aplicaciones y juegos.

¿Qué es la AR?


La realidad aumentada es un entorno que en tiempo real complementa el mundo real, tal como lo vemos con la ayuda de los datos digitales procesados ​​utilizando cualquier dispositivo y software informático electrónico.

Además, la realidad aumentada (AR) debe distinguirse de la virtual (realidad virtual, VR) y la mixta (realidad mixta, MR).

¿Cuáles son sus principales diferencias?


En AR, los objetos digitales virtuales se proyectan en un entorno real, a diferencia de la realidad virtual.

La realidad virtual es un mundo creado por medios técnicos digitales, transmitidos a una persona a través de los sentidos.

La realidad mixta es un cruce entre VR y AR y combina ambos enfoques.

La realidad virtual crea su propio mundo, donde una persona se sumerge, y la realidad aumentada trabaja con el mundo físico real, introduciendo objetos virtuales en él. De ello se deduce que la realidad virtual interactúa exclusivamente con los usuarios, mientras que AR interactúa con el mundo exterior.

Perspectivas de desarrollo.


La tecnología AR puede ocupar el nicho que la ciencia ficción ha dedicado a los hologramas. Solo los hologramas no serán pronto, y dispositivos como Hololens (Microsoft Augmented Reality Glasses) están técnicamente listos. La posibilidad de ver ilustraciones interactivas virtuales en las escuelas, que se pueden ver desde todos los lados, con las que puedes interactuar e inmediatamente ver el resultado de tus experiencias, parece estar lejos de las hermosas y brillantes fantasías sobre el futuro. La capacitación en cualquier especialidad de ingeniería puede ser mucho más visual y fácil de entender, así como también interesante.

Para resumir, la realidad adicional no es solo juegos y máscaras geniales para redes sociales. Esta es una gran cantidad de oportunidades en el uso de AR en los campos de la educación, la industria y la medicina.

El crecimiento de la realidad aumentada es asombroso. A diferencia de la realidad virtual, no necesita depender de cascos masivos y hardware potente, solo el dispositivo más compacto y móvil de nuestro tiempo: un teléfono inteligente.

La realidad aumentada ya está cambiando nuestro presente: máscaras virtuales, caza de Pokémon en ciudades y pantanos, niños que se disparan unos a otros no desde pedazos de madera, sino a través de la pantalla del teléfono. Ahora ya es una realidad.

Planificación del trabajo


Nuestro navegador tiene un sistema de reconocimiento de número de gabinete, este reconocimiento funciona utilizando métodos de aprendizaje automático y, específicamente, se utilizó tecnología de red neuronal convolucional. Vamos a sumergirnos en la arquitectura.

Para este modelo, tuvimos que resolver 2 problemas principales:

  • detectar letras en la imagen;
  • Reconocimiento de cartas.

Si para reconocer las letras hay viejas, buenas redes tipo LeNet, entonces para detectar letras en la imagen tuvimos que escribir nuestra arquitectura de red neuronal, compilar una base de datos y entrenar el modelo. Para componer la arquitectura, necesitábamos comprender qué tipo de problema de aprendizaje automático resolvería nuestro modelo.

Después de mucho debate, llegamos a un consenso: el detector de texto debería resolver el problema de regresión, es decir. el modelo debe predecir dónde se encuentra potencialmente la letra. Luego simulamos una red neuronal que consta de dos capas, sin incluir las capas de entrada y salida, pero luego nos enfrentamos a un problema: había muchos datos de salida, debido a esto tuvimos un problema: el problema del reciclaje y llegamos a la conclusión de que necesitamos una arquitectura y un enfoque diferentes para el problema, después de una larga discusión llegamos a la conclusión de que necesitamos detectar no letras a la vez, sino primeras palabras, y solo luego letras. Y aquí pasamos bastante tiempo cambiando la base de datos y luego agregamos otra red neuronal a la cascada, debido a esto nuestro coeficiente (elegimos la métrica de error cuadrático medio) disminuyó en un 40%, pero el resultado real estaba lejos de ser el deseado,por lo tanto, decidimos reescribir la arquitectura de 2 redes neuronales para esto, tuvimos que desmontar el "conjunto" y entender cómo funciona cada red por separado y entender por qué necesitamos cada parámetro para cada red. Luego nos dimos cuenta de que en lugar de reducir el número de parámetros, podemos cambiar el enfoque del problema, y ​​nuestro equipo cambió el modelo: ahora esta es una red neuronal convolucional, con este enfoque, redujimos la tasa de error en un 30% y la velocidad de ejecución a través de la red aumentó.ahora esta es una red neuronal convolucional, con este enfoque hemos reducido la tasa de error en un 30% y la velocidad de ejecución a través de la red ha aumentado.ahora esta es una red neuronal convolucional, con este enfoque hemos reducido la tasa de error en un 30% y la velocidad de ejecución a través de la red ha aumentado.

El problema de la detección de caracteres está resuelto, queda por resolver el problema del reconocimiento de caracteres, el reconocimiento de caracteres en sí no era una tarea nueva para nuestro equipo, capacitamos una red neuronal convolucional que era similar en arquitectura a la red neuronal LeNet y recibimos un coeficiente de error del 99% en el conjunto de datos de prueba (es decir, una red neuronal casi no hay error) Pero en la práctica, resultó ser una solución inaceptable, ya que una imagen de resolución fija debería ir a la entrada de esta red, pero en la práctica, pueden aparecer diferentes imágenes con diferentes resoluciones, y luego nuestro equipo lo pensó y decidió entrenar la misma red neuronal, pero solo en imágenes con suficiente una resolución grande, tan grande que se podría suponer con precisión que no habría mayor permiso para ingresar a la red neuronal,pero luego abandonamos esta idea porque estamos tratando de cambiar la resolución de la imagen suministrada a la entrada de la arquitectura que no implica un cambio en la resolución de la imagen, por lo que ahora tenemos que pensar en la arquitectura de reconocer letras, y nos dimos cuenta de que la mejor solución era tomar como base arquitectura - un descendiente de la red neuronal LeNet - ResNet de Microsoft, esta arquitectura implica que recibirá imágenes con diferentes resoluciones.que recibirá imágenes con diferentes resoluciones.que recibirá imágenes con diferentes resoluciones.

Como resultado, después de entrenar la red neuronal, la tasa de error para nosotros se convirtió en 95%: sí, es un poco menos que con la arquitectura LeNet pero funciona, entonces recordamos que no necesitábamos reconocer todas las letras, sino solo los números y decidimos sumar antes de determinar El símbolo es otro modelo que determinará si el símbolo a determinar es un número o una letra, ya que este modelo resuelve el problema de clasificación y clasifica solo 2 clases, la red neuronal no tenía sentido y, por lo tanto, tomamos la regresión logística como base de la arquitectura, después de agregar este modelo a "Conjunto" y reentrenamiento de la red neuronal (solo por números), nuestra tasa de error fue de + - 97%, lo cual no está mal, en esta "nota" decidimos terminar el trabajo de reconocimiento de caracteres y, como resultado, obtuvimos dicho "conjunto":

Imagen original -> Red neuronal convolucional que determina la ubicación de las palabras -> Red neuronal convolucional que determina la ubicación de las letras -> Regresión logística, que determina la letra en la imagen o número -> ResNet, que determina el dígito final

Pero luego tuvimos un problema más: el problema con el seguimiento de la geolocalización. Al principio pensamos que esta era una de las tareas más fáciles y resultó estar equivocada. En primer lugar, nosotros, como programadores reales, tomamos el camino de menor resistencia y simplemente rastreamos la geolocalización GPS en el objeto: no funcionó, el error fue tan grande que no nos convenía en absoluto, decidimos pensar en otras opciones para determinar la geolocalización y decidimos conectar el servicio de la empresa Yandex - Yandex Latitude, pero resultó no funcionar, es decir no es un servicio funcional en el que no se puede conectar la API, nuestro siguiente pensamiento fue conectar el marco de mapbox para el motor de Unity (fue sobre eso que decidimos desarrollar nuestro proyecto), después de conectar con éxito este marco, examinar sus capacidades y escribir un rastreador GPS simple - el resultado ya estaba mejorpero el error aún era grande, debido a esto continuamos buscando soluciones, y después de una lectura cuidadosa de la documentación, encontramos que el valor obtenido tenía un error del 15%, esto no nos convenía, especialmente porque este enfoque tenía un gran inconveniente: usaba GPS , y estamos haciendo un navegador alrededor de la escuela, significa que en el interior, entonces la señal del GPS será muy débil o no se aplicará nada + El GPS no es compatible con todos los dispositivos, razón por la cual cambiamos el enfoque y pasamos del reconocimiento global al local basado en el Sistema de posicionamiento visual Este método también tiene sus inconvenientes, pero no afectaron nuestro trabajo de ninguna manera, por lo que el sistema de seguimiento de geolocalización estaba listo.que hay un error del 15% para el valor obtenido, esto no nos convenía, especialmente porque este enfoque tenía un gran inconveniente: usaba GPS, y hacemos el navegador por la escuela, luego en interiores, luego la señal de GPS será muy débil o no En general, + GPS no es compatible con todos los dispositivos, es por eso que cambiamos el enfoque y pasamos del reconocimiento global al local basado en el Sistema de posicionamiento visual. Este método también tiene sus inconvenientes, pero no afectaron nuestro trabajo de ninguna manera, por lo que el sistema de seguimiento de geolocalización estaba listo.que hay un error del 15% para el valor obtenido, esto no nos convenía, especialmente porque este enfoque tenía un gran inconveniente: usaba GPS, y hacemos el navegador por la escuela, luego en interiores, luego la señal de GPS será muy débil o no En general, + GPS no es compatible con todos los dispositivos, por eso cambiamos el enfoque y pasamos del reconocimiento global al local basado en el Sistema de posicionamiento visual. Este método también tiene sus inconvenientes, pero no afectaron nuestro trabajo de ninguna manera, por lo que el sistema de seguimiento de geolocalización estaba listo.entonces la señal de GPS será muy débil o no se aplicará en absoluto + GPS no es compatible con todos los dispositivos, es por eso que cambiamos el enfoque y cambiamos del reconocimiento global al local basado en el Sistema de posicionamiento visual, este método también tiene sus inconvenientes, pero no afectaron nuestro trabajo, por lo que el sistema de seguimiento de geolocalización estaba listo.entonces la señal de GPS será muy débil o no se aplicará en absoluto + GPS no es compatible con todos los dispositivos, es por eso que cambiamos el enfoque y cambiamos del reconocimiento global al local basado en el Sistema de posicionamiento visual, este método también tiene sus inconvenientes, pero no afectaron nuestro trabajo, por lo que el sistema de seguimiento de geolocalización estaba listo.

Significado práctico


Nuestra aplicación sirve para orientar mejor a las personas que han venido por primera vez o que simplemente tienen una comprensión deficiente de la estructura de la escuela de personas en nuestra institución educativa. Vendrán y se encontrarán en la entrada con un stand con un código QR, cuando lean cuál es la descarga de la aplicación.

Funcional


Lo que nuestra aplicación puede hacer:

  • reconocer el número de gabinete por la placa,
  • mapa escolar detallado,
  • llevar a una persona a su oficina,
  • buscar una oficina por su número,
  • busque el aula en la lista y por tipo (todas las aulas se distribuyen en ciertos grupos según la materia que se imparte en esta sala).

Implementación de la aplicación


La aplicación fue escrita en uno de los motores más populares llamado "Unity", utilizando el lenguaje de programación C #, así como Python y la biblioteca TensorFlow, además de todo lo anterior, se utilizó el administrador de paquetes Anaconda.

¿Cómo usar esta aplicación?


Supongamos que soy padre y vine a una reunión de padres, necesito entrar al salón 339, una oficina de informática. Fui a la escuela y debo escanear, mientras repito el código QR de la tableta. Luego, después de cargar con éxito la aplicación, accederé al menú principal:

imagen

después de eso, puedo ir al menú de instrucciones para averiguar cómo usar la aplicación:

imagen

Esta instrucción describe en detalle cómo encontrar la clase, es decir. primero, en el menú principal, hacemos clic en "Buscar clase", luego se muestran los siguientes menús: la

imagen

flecha en la esquina superior derecha nos permite volver al menú principal, si el sistema reconoció el número del gabinete, aparecerá un marco alrededor de la placa y luego una ventana de confirmación:

imagen

Si el modelo reconoció correctamente el gabinete, nuestro "padre" condicional hará clic en "sí", si el número del gabinete no se reconoce correctamente, luego haga clic en "no" y tome la fotografía nuevamente. Entonces la aplicación comprenderá dónde estamos en el espacio escolar.

Luego, el "padre" debe elegir un destino y aquí tiene 2 opciones, ya sea ingresar el número de la oficina o seleccionar su tipo y encontrarlo en la lista más tarde:

imagen

imagen

después de eso, el "padre" debe seguir las señales en la cámara.

Cuando llegue a su destino, el navegador se lo notificará.

Hay otra opción, más familiar, el "padre" hace clic en el menú principal: "Plan escolar" y se abre un plan detallado, donde puede navegar de forma independiente cómo llegar al lugar deseado.

Plano de planta 1 Plano de planta

imagen


2

imagen

Por el momento, esta es toda la funcionalidad presente en la aplicación, en el futuro está previsto finalizar la aplicación y agregar funciones aún más interesantes.

Puedes ver el video en el siguiente enlace:


Conclusión


Con un trabajo en equipo bien coordinado, tiempo suficiente y habilidades para aplicar habilidades blandas, se puede implementar cualquier proyecto.

Trabajó en la aplicación:

Ilya Vasilenko - programador (backend)

Parfenyev Demid - Diseñador

Lunev Daniil - Desarrollador de Unity (frontend)

Mikhail Purtov - Data Miner, creador

Gracias a nuestro proyecto, cada miembro de nuestro equipo aprendió muchas cosas nuevas. Desde el diseño hasta la programación y la visión por computadora.

Nuestro equipo de PYC cree que Habr amará nuestro proyecto.

Saludos, Equipo PYC

Herramientas


Unity + C #

Python + Anaconda package manager + biblioteca para crear redes neuronales TensorFlow + biblioteca para crear modelos de aprendizaje automático scikit-learn

Immersal - Una biblioteca que implementa VPS

Bibliografía


Sitio
web de Tensorflow
Sitio web de inmersión Sitio web de C #
Sitio de Python

* Esta publicación no pretende anunciar nuestra aplicación, porque ni siquiera está disponible en código abierto y funciona solo dentro de la escuela

All Articles