====== Projet Groupe 4 ====== ===== Présentation du projet ===== * Nom 1 : Stackler Mathieu (IAM) * Créneau (AM ou PM) : AM * Nom 2 : Bin Sabari Shafiq Daniel (IAM) * Créneau (AM ou PM) : PM * Nom du projet : Localisation de Points d'Intérêt ==== Un scénario d'illustration du Projet ==== Bob est un utilisateur qui veut savoir où il passe son temps. Avec Localisator, ses positions GPS ainsi que son altitude seront enregistrées par le téléphone. L'application pourra ensuite faire des regroupements de positions afin d'identifier les lieux les plus fréquentés par l'utilisateur. On peut ensuite faire des regroupements de points (barycentres) afin de trouver les points d'intérêts de l'utilisateur (domicile, lieu de travail, magasins, …). Avec les données de plusieurs utilisateurs, on peut identifier les points intéressants comme par exemple les lieux touristiques ou les restaurants préférés par un ensemble d’utilisateurs. Ces points d’intérêts peuvent être ensuite proposés aux autres utilisateurs quand ils sont à proximité de ces derniers, pendant leurs voyages par exemple. L'application pourra les afficher sur une carte. ===== Matériel Disponible ===== Référence du SmartPhone : Sony Xperia Z3 Compact Caractéristiques techniques : http://www.sonymobile.com/fr/products/phones/xperia-z3-compact/specifications/#tabs Capteurs : * Accéléromètre * Luminosité * Orientation * Proximité * Gyroscope * Son * Magnétique * Pression * Caméra * Boussole Communication : * WiFi 802.11a/ac/b/g/n * Bluetooth 4.0 * A-GPS * 3G/4G * GPS ===== La cible Mobile ===== Notre cible sera n’importe quel utilisateur utilisant un smartphone (équipé d’un GPS et d’un baromètre) sous Android. Voici la référence de smartphone que nous allons utiliser pour développer et tester notre application : Référence du Smartphone : Sony Xperia Z3 Compact Caractéristiques techniques : http://www.sonymobile.com/fr/products/phones/xperia-z3-compact/specifications/#tabs ===== L'environnement logiciel ===== Le développement de l’application sera fait sous Android Studio. Le développement du serveur sera fait sur n'importe quel IDE supportant Java. ===== L'activité à reconnaître ===== Nous enregistrons les positions d’un utilisateur pendant toute la durée que le téléphone est allumé. La reconnaissance d’activité est faite avec les paramètres comme l’heure et la durée de temps que l’utilisateur reste sur un lieu. Nous pouvons faire des hypothèses, par exemple, son lieu de travail étant le lieu où il passe sa journée de lundi à vendredi, et sa maison étant le lieu qu’il reste de la nuit jusqu’au matin. ===== Ressources utilisées dans le Projet ===== Liste des capteurs mais aussi Data collectés par le Mobile, utilisés pour le projet : * GPS avec en plus le réseau mobile pour obtenir la position de l'utilisateur * Baromètre pour connaître l’altitude, qui va donner une meilleure précision de la position Liste des SDK et API pour l'accès à ces informations : * SDK : Android (4.3) https://developer.android.com/about/versions/android-4.3.html * API Google Maps : https://developers.google.com/maps/documentation/ * API pour le baromètre : https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_PRESSURE * Environnement de logiciel : Androïd * Version : 6.0.1 ===== Les algorithmes ===== Nous avons choisi d’utiliser l’algorithme de partitionnement en **k-means**. Cet algorithme est adapté pour faire le clustering, qui est le cœur de notre application. La reconnaissance sera faite en mode non supervisé. Les métriques qui seront utilisées pour l’apprentissage sont les coordonnées GPS et l’altitude, et le temps d’enregistrement de coordonnées. Pour faire le clustering, il faut identifier les points communs pour une zone, dont les distances entre les points, et aussi l’heure d’enregistrement. Donc, si la distance entre les points est faible et le temps d’enregistrement est proche, ils appartiennent à une même zone. Les barycentres peuvent être choisis en prenant les points de GPS dans des heures spécifiques (minuit peut par exemple identifier le domicile). Pour identifier les lieux touristiques, on peut considérer par exemple les points qui ne sont ni la maison ni le lieu de travail de l’utilisateur, et les lieux visitées pendant les weekends ou les jours fériés. ===== Faisabilité ===== La récupération des coordonnées GPS ainsi que l'altitude de l'utilisateur ne posent pas de problème, le mobile disposant d'un capteur GPS et d'un baromètre. L'affichage des points d'intérêts via Google Maps est également faisable, car notre algorithme donnera directement la longitude et la latitude des points d'intérêts, il suffira alors juste de les afficher. Liste des SDK et API pour l'accès à ces informations : * SDK : Android (4.3): https://developer.android.com/about/versions/android-4.3.html * API pour le GPS : https://developer.android.com/reference/android/location/LocationManager.html * API pour le baromètre : https://developer.android.com/reference/android/hardware/Sensor.html#TYPE_PRESSURE * API Google Maps : https://developers.google.com/maps/documentation/ Une contrainte de cette application est que les données doivent être enregistrées pendant toute la durée d’allumage de téléphone, donc elle doit tourner toujours en arrière-plan. Cela peut réduire l’autonomie de la batterie. Ensuite, après le partitionnement par l’algorithme d’apprentissage, nous avons bien des zones, mais nous n’avons pas toujours automatiquement la description de ces zones. On pourrait dans ces cas utiliser les données de sites comme Google Maps pour identifier les lieux, et peut-être demander la confirmation de l’utilisateur pour valider notre hypothèse. ======= Rendu Final ======= ===== Code ===== Pour lancer le serveur, extraire le .zip et lancer le .jar avec la commande java -jar Jar du serveur : {{:cours:plim:projet16_17:gr4:localisatorserveur-1.0-snapshot-shaded.jar.zip|}} APK : {{:cours:plim:projet16_17:gr4:localisator.apk.zip|}} ==== Code Source ==== Le code source est disponible sur GitHub: -> application : https://github.com/shafdanny/localisator -> serveur : https://github.com/MathieuStackler/LocalisatorServeur ==== How To ==== == Application Androïd : == Développée avec Androïd Studio * Télécharger le .zip * L'extraire * Lancer l'installation de l'apk * Accepter les permissions pour le GPS et le Storage Externe * Mettre l'adresse IP du serveur suivi du port 4567 (voir image) {{:cours:plim:projet16_17:gr4:screen.png?300|}} Explication des différents boutons : * Envoie des données : envoie les coordonnées GPS de l'application au serveur. Le serveur calcule le nombre de clusters défini par l'utilisateur (entre 2 et 4). * Lancement Service : démarre la collecte de coordonnées GPS. * Arrêt Service : arrête la collecte de coordonnées GPS. * Suppression des données : supprime les coordonnées GPS stockées en local sur le téléphone. * Map : affiche Google Maps avec les clusters précédemment calculés. * Find Match : envoie une requête au serveur pour savoir si d'autres ID ont des clusters identiques aux notre. Affichage d'un Toast avec les ID. == Serveur : == Développé sur un IDE supportant Java (Eclipse ou IntellIJ) * Télécharger le .zip * L'extraire * Dans un terminal, utiliser la commande "java -jar LocalisatorServeur-1.0-SNAPSHOT-shaded.jar" == Possibles erreurs : == * Lancer le serveur depuis un IDE (Eclipse ou IntellIJ) en cas de time-out avec le jar.