CityDex est une application Android qui a été réalisée lors d'un projet universitaire. Il s'agit d'une application mobile ludique de collection de villes à partir des panneaux d'entrée d'agglomération de France. Autrement dit, pour collectionner des villes, l'utilisateur doit prendre en photo des panneaux d'entrée d'agglomération françaises.
- Java et Android SDK
- Détection d'objet
- OCR
- OpenCV
- API Découpage administratif
- Localisation
- Notifications
L'application est entièrement écrite et développée en Java en utilisant le SDK Android ainsi que l'éditeur Android Studio.
Lien du SDK : https://developer.android.com
L'application utilise la détection d'objet pour reconnaitre un panneau dans une image. Nous utilisons TensorFlowLite avec un modèle entrainé sur plus de 250 images de panneaux pour identifier la postition d'un panneau et sa position dans une image. Nous avons labellisé ces images afin de générer des fichiers .xml nécessaires à l'entraînement du modèle. La position retournée est un rectangle ce qui nous permet de rogner l'image pour faciliter l'OCR.
L'application utilise l'OCR pour lire le nom de ville dans le panneau. Nous avions d'abord utilisé tess-two, qui permet d'utiliser Tesseract dans Android. Cependant les résultats étant très moyens et la bibliothèque n'étant plus maintenue, nous avons décidé de changer de bibliothèque. Nous utilisons maintenant le ML Kit Text Recognition de Google.
Nous avons utilisé OpenCV pour préparer la photo prise par un utilisateur pour la donner à l'OCR pour avoir de meilleurs résultats. Nous l'avons par exemple utilisé pour mettre l'image en nuances de gris, augmenter le contraste ou éliminer le bruit.
Cette API nommée API Géo nous permet de récupérer des informations sommaires à propos des villes de France. Elle nous permet aussi de savoir si la ville existe en France et de récupérer toutes les informations qui nous sont nécessaires pour afficher une ville à l'utilisateur.
L'application utilise la localisation comme mesure d'anti-triche. Nous utilisions pour cela la bibliothèque fourni dans le SDK Android. Cependant la détection de la localisation durait beaucoup de temps et le code devenait compliqué à comprendre et à maintenir. Nous avons changé de bibliothèque pour utiliser la localisation du GooglePlayService (FusedLocationProviderClient)
Pendant une maintenance de notre application, nous avons également implémenter un système de notifications sur notre application. Nous avons pour cela utilisé différentes classes directement implémetées dans le SDK Android. A chaque lancement, et si le joueur se trouve dans une ville dont il n'a pas le panneau dans sa collection, une notification est envoyée afin d'informer le joueur qu'il ne possède pas cette ville. Tout le système de notification utilise la localisation décrite ci-dessus.
Si vous rencontrez un bug, un problème ou même si vous avez une quelconque question sur notre application, n'hésitez pas à ouvrir une issue directement via la catégorie issues du Github, nous tenterons de vous répondre au plus vite !
Charles DECELLIÈRES (professeur tuteur)
Théo LE BAIL
Bastien TAROT
Nathan POLLART
Axel GUÉRANGER