Création d'un navigateur à l'aide de technologies de réalité augmentée et de méthodes d'apprentissage automatique

Récemment, la capacité d'une personne à voyager augmente incroyablement rapidement et nous pouvons découvrir de plus en plus de lieux. Mais ce n'est pas toujours facile de naviguer dans ces endroits, et parfois les bâtiments ont des formes architecturales si complexes que vous pouvez même vous perdre dans un endroit inconnu.

Par exemple, notre école d'ingénierie et de technologie n ° 777, à Saint-Pétersbourg, appartient à ces bâtiments. Nous avons été confrontés à un problème tel que lorsque les invités et les parents visitent notre école, il leur est difficile de trouver le bon bureau ou tout autre endroit nécessaire. Tout le monde sort de cette situation, quelqu'un demande sans cesse aux travailleurs du bâtiment et quelqu'un erre dans des couloirs sans fin. Après avoir analysé ce problème, nous avons décidé de faire un navigateur pour nos visiteurs pour notre école. Mais un simple navigateur avec une carte à l'intérieur du bâtiment n'est pas pertinent, ce qui ne peut pas être dit à propos d'une des technologies nouvelles et en développement rapide de la réalité augmentée (RA). Notre navigateur a été développé avec la technologie AR, la vision par ordinateur et les méthodes d'apprentissage automatique. Il vous aidera à naviguer et à trouver l'endroit exact où les visiteurs de notre école devraient se rendre.

objectif


L'objectif est de créer un assistant universel en orientation bâtiment.

Objectifs principaux:

  • Simplifier l'orientation de l'Ă©cole des nouveaux Ă©lèves, parents et invitĂ©s;
  • Rendez l'application universelle afin qu'elle supporte plus tard la navigation non seulement dans notre Ă©cole, mais aussi dans tous les autres bâtiments du monde;
  • Interface conviviale, comprĂ©hensible pour tout le monde;

AR - Réalité augmentée


Chaque année, de plus en plus de nouvelles technologies apparaissent, l'une de ces technologies de réalité augmentée ou tout simplement AR. Tout d'abord, sa toute première connaissance s'est produite lorsque la célèbre société Google a décidé de fabriquer ses lunettes avec la réalité augmentée. Ensuite, la technologie AR a commencé à se développer incroyablement rapidement. Lorsque Google a abandonné son projet Google Glass, une nouvelle ère de masques est apparue qui a reconnu notre visage et l'a transformé en célébrités. Ensuite, le Pokémon a capturé les deux réalités et les gens ont parcouru des kilomètres à la recherche du personnage le plus cool.

Plus récemment, Google et Apple ont présenté leurs moteurs ARC, ARCore et ARKit, respectivement, à partir desquels nous pouvons conclure que la technologie AR deviendra encore plus accessible pour le développement et la création de plus en plus de nouvelles applications et de nouveaux jeux.

Qu'est-ce que l'AR?


La réalité augmentée est un environnement qui, en temps réel, complète le monde réel, comme nous le voyons à l'aide de données numériques traitées à l'aide de tous les appareils informatiques et logiciels.

De plus, la réalité augmentée (RA) doit être distinguée du virtuel (réalité virtuelle, VR) et mixte (réalité mixte, MR).

Quelles sont leurs principales différences?


En RA, les objets numériques virtuels sont projetés sur un environnement réel, contrairement à la réalité virtuelle.

La réalité virtuelle est un monde créé par des moyens techniques numériques, transmis à une personne par les sens.

La réalité mixte est un croisement entre VR et AR et combine les deux approches.

La VR crée son propre monde, où une personne plonge, et la réalité augmentée travaille avec le monde physique réel, y introduisant des objets virtuels. Il s'ensuit que la VR interagit exclusivement avec les utilisateurs, tandis que la RA interagit avec le monde extérieur.

Perspectives de développement


La technologie RA peut occuper la niche que la science-fiction a consacrée aux hologrammes. Seuls les hologrammes ne seront pas bientôt disponibles, et des appareils comme les Hololens (Microsoft Augmented Reality Glasses) sont techniquement prêts. La perspective de voir des illustrations interactives virtuelles dans les écoles, qui peuvent être vues de tous les côtés, avec lesquelles vous pouvez interagir et voir immédiatement le résultat de vos expériences, semble loin de beaux fantasmes brillants sur l'avenir. La formation dans toutes les spécialités d'ingénierie peut devenir beaucoup plus visuelle et facile à comprendre, tout en étant intéressante.

Pour résumer, la réalité supplémentaire n'est pas seulement les jeux et les masques sympas pour les réseaux sociaux. Il s'agit d'un grand nombre d'opportunités dans l'utilisation de la RA dans les domaines de l'éducation, de l'industrie et de la médecine.

La croissance de la réalité augmentée est stupéfiante. Contrairement à la VR, elle n'a pas besoin de s'appuyer sur des casques massifs et un matériel puissant, juste l'appareil le plus compact et le plus mobile de notre temps - un smartphone.

La réalité augmentée est déjà en train de changer notre présent: masques virtuels, chasse aux Pokémon dans les villes et les marais, les enfants se tirant dessus non pas à partir de morceaux de bois, mais à travers l'écran du téléphone. Maintenant, c'est déjà une réalité.

Planification du travail


Notre navigateur possède un système de reconnaissance des numéros d'armoire, cette reconnaissance fonctionne à l'aide de méthodes d'apprentissage automatique, et en particulier, la technologie de réseau de neurones convolutionnel a été utilisée. Plongeons-nous dans l'architecture.

Pour ce modèle, nous avons dû résoudre 2 problèmes principaux:

  • dĂ©tecter des lettres dans l'image;
  • reconnaissance des lettres.

Si pour reconnaître les lettres, il existe d'anciens - de bons réseaux de type LeNet, alors pour détecter les lettres dans l'image, nous avons dû écrire notre architecture de réseau neuronal, compiler une base de données et former le modèle. Afin de composer l'architecture, nous devions comprendre quel type de problème d'apprentissage automatique notre modèle résoudrait.

Après de nombreux débats, nous sommes parvenus à un consensus - le détecteur de texte devrait résoudre le problème de régression, c'est-à-dire le modèle devrait prédire où la lettre est potentiellement située. Ensuite, nous avons simulé un réseau neuronal composé de deux couches, sans compter les couches d'entrée et de sortie, mais nous avons ensuite rencontré un problème: il y avait beaucoup de données de sortie, à cause de cela, nous avons eu un problème - le problème de la reconversion, et nous sommes arrivés à la conclusion que nous nous avons besoin d'une architecture et d'une approche différentes du problème, après une longue discussion, nous sommes arrivés à la conclusion que nous devons détecter non pas les lettres à la fois, mais les premiers mots, puis seulement les lettres. Et ici, nous avons passé beaucoup de temps à changer la base de données, puis à ajouter un autre réseau de neurones à la cascade, à cause de cela, notre coefficient (nous avons choisi la mesure de l'erreur quadratique moyenne) a diminué de 40%, mais le résultat réel était encore loin de celui souhaité,par conséquent, nous avons décidé de réécrire l'architecture de 2 réseaux de neurones pour cela nous avons dû démonter «l'ensemble» et comprendre comment chaque réseau fonctionne séparément et comprendre pourquoi nous avons besoin de chaque paramètre pour chaque réseau. Ensuite, nous avons réalisé qu'au lieu de réduire le nombre de paramètres, nous pouvons changer l'approche du problème, et notre équipe a changé le modèle: maintenant c'est un réseau neuronal convolutif, avec cette approche, nous avons réduit le taux d'erreur de 30% et la vitesse d'exécution à travers le réseau a augmenté.maintenant c'est un réseau neuronal convolutif, avec cette approche, nous avons réduit le taux d'erreur de 30% et la vitesse de parcours à travers le réseau a augmenté.maintenant c'est un réseau neuronal convolutif, avec cette approche, nous avons réduit le taux d'erreur de 30% et la vitesse de parcours à travers le réseau a augmenté.

Le problème de la détection des caractères est résolu, il reste à résoudre le problème de la reconnaissance des caractères, la reconnaissance des caractères elle-même n'était pas une nouvelle tâche pour notre équipe, nous avons formé un réseau neuronal convolutionnel qui était similaire en architecture au réseau neuronal LeNet et a reçu un coefficient d'erreur de 99% sur l'ensemble de données de test (c'est-à-dire un réseau neuronal presque aucune erreur). Mais en pratique, cela s'est avéré être une solution inacceptable, car une image à résolution fixe devrait aller à l'entrée de ce réseau, mais en pratique, différentes images avec des résolutions différentes peuvent entrer, puis notre équipe a réfléchi et a décidé de former le même réseau de neurones, mais uniquement en images avec suffisamment une grande résolution, si grande qu'on pourrait supposer avec précision qu'il n'y aurait pas de plus grande permission d'entrer dans le réseau neuronal,mais ensuite nous avons abandonné cette idée parce que nous essayons de changer la résolution de l'image fournie à l'entrée de l'architecture qui n'implique pas un changement de résolution d'image, alors maintenant nous devons penser à l'architecture de reconnaissance des lettres, et nous avons réalisé que la meilleure solution était de prendre comme base architecture - un descendant du réseau neuronal LeNet - ResNet de Microsoft, cette architecture implique qu'il recevra des images avec différentes résolutions.qu'il recevra des images avec différentes résolutions.qu'il recevra des images avec différentes résolutions.

En conséquence, après avoir formé le réseau de neurones, le taux d'erreur pour nous est devenu 95% - oui, c'est un peu moins qu'avec l'architecture LeNet mais cela fonctionne, alors nous nous sommes souvenus que nous n'avions pas besoin de reconnaître toutes les lettres, mais seulement les chiffres et avons décidé d'ajouter avant de déterminer Le symbole est un autre modèle qui déterminera si le symbole à déterminer est un nombre ou une lettre, car ce modèle résout le problème de classification et ne classe que 2 classes, le réseau neuronal était vide de sens et nous avons donc pris la régression logistique comme base de l'architecture, après avoir ajouté ce modèle à «Ensemble» et reconversion du réseau neuronal (uniquement par des nombres), notre taux d'erreur était de + - 97% ce qui n'est pas très mauvais, sur cette «note» nous avons décidé de terminer les travaux sur la reconnaissance des caractères et, par conséquent, nous avons obtenu un tel «ensemble»:

Image originale -> Réseau neuronal convolutionnel qui détermine l'emplacement des mots -> Réseau neuronal convolutionnel qui détermine l'emplacement des lettres -> Régression logistique, qui détermine la lettre dans l'image ou le numéro -> ResNet, qui détermine le dernier chiffre

Mais nous avons eu un autre problème: le problème du suivi de la géolocalisation. Au début, nous pensions que c'était l'une des tâches les plus faciles et nous nous sommes avérés faux. Tout d'abord, nous, comme de vrais programmeurs, avons pris le chemin de la moindre résistance et avons simplement suivi la géolocalisation GPS de l'objet - cela n'a pas fonctionné, l'erreur était si grande qu'elle ne nous convenait pas du tout, nous avons décidé de réfléchir à d'autres options pour déterminer la géolocalisation et avons décidé de connecter le service de l'entreprise Yandex - Yandex Latitude, mais il s'est avéré ne pas fonctionner, c'est-à-dire ce n'est pas un service fonctionnel dans lequel vous ne pouvez pas connecter l'API, notre prochaine pensée a été de connecter le framework mapbox pour le moteur Unity (c'est là-dessus que nous avons décidé de développer notre projet), après avoir connecté avec succès ce framework, examiné ses capacités et écrit un simple tracker GPS - le résultat était déjà mieuxmais l'erreur était toujours importante, à cause de cela, nous avons continué à chercher des solutions, et après une lecture attentive de la documentation, nous avons constaté que la valeur obtenue avait une erreur de 15%, cela ne nous convenait pas, d'autant plus que cette approche avait un très gros inconvénient - elle utilisait le GPS , et nous construisons un navigateur autour de l'école, cela signifie à l'intérieur, alors le signal GPS sera soit très faible ou pas du tout + le GPS n'est pas pris en charge sur tous les appareils, c'est pourquoi nous avons changé d'approche et sommes passés de la reconnaissance globale à locale en fonction du système de positionnement visuel Cette méthode a aussi ses inconvénients, mais ils n'affectaient en rien notre travail, donc le système de suivi de géolocalisation était prêt.qu'il y a une erreur de 15% pour la valeur obtenue, cela ne nous convenait pas, d'autant plus que cette approche avait un très gros inconvénient - elle utilisait le GPS, et nous faisons le navigateur autour de l'école, puis à l'intérieur, alors le signal GPS sera soit très faible soit ne sera pas En général, + GPS n'est pas pris en charge sur tous les appareils, c'est pourquoi nous avons changé d'approche et sommes passés de la reconnaissance globale à locale en fonction du système de positionnement visuel. Cette méthode a également ses inconvénients, mais ils n'affectaient en rien notre travail, le système de suivi de la géolocalisation était donc prêt.qu'il y a une erreur de 15% pour la valeur obtenue, cela ne nous convenait pas, d'autant plus que cette approche avait un très gros inconvénient - elle utilisait le GPS, et nous faisons le navigateur autour de l'école, puis à l'intérieur, alors le signal GPS sera soit très faible soit ne sera pas En général, + GPS n'est pas pris en charge sur tous les appareils, c'est pourquoi nous avons changé d'approche et sommes passés de la reconnaissance globale à locale en fonction du système de positionnement visuel. Cette méthode a également ses inconvénients, mais ils n'affectaient en rien notre travail, le système de suivi de la géolocalisation était donc prêt.alors le signal GPS sera soit très faible, soit pas du tout + le GPS n'est pas pris en charge sur tous les appareils, c'est pourquoi nous avons changé d'approche et passé de la reconnaissance globale à locale en fonction du système de positionnement visuel, cette méthode a aussi ses inconvénients, mais ils n'ont pas affecté notre travail, donc le système de suivi de la géolocalisation était prêt.alors le signal GPS sera soit très faible, soit pas du tout + le GPS n'est pas pris en charge sur tous les appareils, c'est pourquoi nous avons changé l'approche et passé de la reconnaissance globale à locale en fonction du système de positionnement visuel, cette méthode a aussi ses inconvénients, mais ils n'ont pas affecté notre travail, donc le système de suivi de la géolocalisation était prêt.

Importance pratique


Notre application sert à mieux orienter les personnes qui sont venues pour la première fois ou qui ont tout simplement une mauvaise compréhension de la structure de l'école des gens dans notre établissement d'enseignement. Ils viendront se retrouver à l'entrée d'un stand avec un QR code, lors de la lecture de l'application téléchargée.

Fonctionnel


Ce que notre application peut faire:

  • reconnaĂ®tre le numĂ©ro d'armoire par la plaque,
  • plan scolaire dĂ©taillĂ©,
  • conduire une personne Ă  son bureau,
  • rechercher un bureau par son numĂ©ro,
  • rechercher la classe dans la liste et par son type (toutes les classes sont rĂ©parties dans certains groupes en fonction de la matière enseignĂ©e dans cette salle).

Implémentation d'application


L'application a été écrite sur l'un des moteurs les plus populaires appelé «Unity», en utilisant le langage de programmation C #, ainsi qu'en utilisant Python et la bibliothèque TensorFlow, en plus de tout ce qui précède, le gestionnaire de paquets Anaconda a été utilisé.

Comment utiliser cette application?


Supposons que je suis un parent et venu à une réunion de parents, je dois entrer dans la salle 339, un bureau d'informatique. Je suis allé à l'école et je dois scanner, en répétant le code QR de la tablette. Ensuite, après avoir réussi à charger l'application, je vais accéder au menu principal:

image

Après cela, je peux aller au menu d'instructions pour savoir comment utiliser l'application:

image

Cette instruction décrit en détail comment trouver la classe, c'est-à-dire d'abord, dans le menu principal, nous cliquons sur «Rechercher une classe», puis les menus suivants s'affichent: La

image

flèche dans le coin supérieur droit nous permet de revenir au menu principal, si le système a reconnu le numéro d'armoire, un cadre apparaît autour de la plaque, puis une fenêtre de confirmation:

image

Si le modèle a correctement reconnu l'armoire, notre «parent» conditionnel cliquera sur «oui», si le numéro d'armoire n'est pas reconnu correctement, puis cliquez sur «non» et reprendre la photo. Ainsi, l'application comprendra où nous en sommes dans l'espace scolaire.

Ensuite, le «parent» doit choisir une destination et ici il a 2 options: soit entrer le numéro du bureau, soit sélectionner son type et le retrouver dans la liste plus tard:

image

image

Après cela, le «parent» doit suivre les panneaux sur la caméra.

Lorsque vous arrivez Ă  destination, le navigateur vous en informe.

Il y a une autre option, plus familière, les «parents» cliquent sur le menu principal - «Plan scolaire» et un plan détaillé s'ouvre, où vous pouvez naviguer indépendamment comment vous rendre à l'endroit souhaité.

Plan d'Ă©tage 1 Plan d' Ă©tage

image


2

image

Pour le moment, ce sont toutes les fonctionnalités présentes dans l'application, à l'avenir, il est prévu d'affiner l'application et d'ajouter des fonctions encore plus intéressantes.

Vous pouvez regarder la vidéo sur le lien ci-dessous:


Conclusion


Avec un travail d'équipe bien coordonné, suffisamment de temps et de compétences pour appliquer les compétences générales, tout projet peut être mis en œuvre.

A travaillé sur l'application:

Ilya Vasilenko - programmeur (backend)

Parfenyev Demid - Designer

Lunev Daniil - DĂ©veloppeur Unity (frontend)

Mikhail Purtov - Data Miner, créateur

Grâce à notre projet, chaque membre de notre équipe a appris beaucoup de nouvelles choses. De la conception à la programmation et à la vision par ordinateur.

Notre Ă©quipe PYC croit que Habr adorera notre projet.

Cordialement, L'Ă©quipe PYC

Outils


Unity + C #

Python + gestionnaire de packages Anaconda + bibliothèque pour créer des réseaux de neurones TensorFlow + bibliothèque pour créer des modèles d'apprentissage automatique scikit-learn

Immersal - Une bibliothèque qui implémente VPS

Bibliographie



Site Tensorflow Site Immersal
Site C #
Site Python

* Cette publication ne prétend pas faire de la publicité pour notre application, car elle n'est même pas disponible en open source et elle ne fonctionne qu'au sein de l'école

All Articles