====== Analyse du son ambiant ====== ==== Présentation du projet ==== * Nom 1 : Bichoy MESSIHA * Créneau (AM ou PM) : AM * Nom 2 : Eslam HOSSAM * Créneau (AM ou PM) : AM ==== Description et scénario d'utilisation ==== L'idée est un détecteur du bruit qui peut calculer la puissance du son autour du portable (en dB), en tenant compte de sa géolocalisation et du temps, peut faire des statistiques pour ces valeurs et alors donne des rapports à l'utilisateur. L’intérêt est d'avertir l'utilisateur s'il y a du bruit troublant autour de lui pendant les différentes périodes de la journée, et aussi de lui donner un bilan simplifié du bruit auquel il est été exposé. **Scénario:** Barry ne parvient pas à entendre les gens facilement. L'otologiste lui a conseillé de bien surveiller le bruit autour de lui pendant ses activités quotidiennes. Il télécharge notre application qui lui affiche des informations et des statistiques du son ambiant. Il a remarqué que la période ou il est chez lui, il est exposé au bruit nuisible. Alors il a installé des fenêtres isolants de bruit. ==== Matériel disponible ==== **Cible Mobile utilisée :** * Référence du SmartPhone: HTC One M8 Eye * Caractéristiques techniques: * [[http://www.gsmarena.com/htc_one_(m8_eye)-6713.php|Fiche technique]] * Capteurs: Acceleromètre, Gyro, Proximity, Compass * Localisation: Yes, with A-GPS, GLONASS * Connection: Wi-Fi 802.11 a/b/g/n, dual-band, Wi-Fi Direct, DLNA, hotspot * Référence du SmartPhone: Sony Xperia Z2 * Caractéristiques techniques: * [[http://www.gsmarena.com/sony_xperia_z2-6144.php|Fiche technique]] * Capteurs: Acceleromètre, Gyro, Proximity, Compass * Localisation: Yes, with A-GPS, GLONASS * Connection: Wi-Fi 802.11 a/b/g/n, dual-band, Wi-Fi Direct, DLNA, hotspot * L'OS : Android 6.0.1 **Environnement logiciel :** * Android Studio (dernière version) * Projet GitHub ==== Ressources utilisées dans le Projet ==== * Liste des capteurs: * Microphone * GPS * Data collectés par le Mobile: * Son ambiant * Géolocalisation du mobile * Temps * Liste des SDK et API pour l'accès à ces informations: * Google Maps API * Librairie d'affichage des graphs : https://github.com/PhilJay/MPAndroidChart/wiki/Getting-Started * Android SDK 6.0.1 * Version OS : Android 6.0.1 ==== Choix de technologies ==== * Google Cloud (pour déployer le coté serveur): * Pour supporter le calcul intense des d'algorithmes * Pour que ça soit accessible dans n'importe location * Firebase (pour déployer la base de données) * Pour que ça soit accessible dans n'importe location * Pour que ça soit accessible par le cloud et l'application mobile * Persister les données: créer un cache local pour les données en cas de déconnexion ==== Faisabilité des choix ==== * [[https://developer.android.com/reference/android/media/MediaRecorder.html|MediaRecorder]] pour capter le son * Calcul de l'intensité du son à l'aide d'une équation * Pour déterminer le seuil permis d'exposition continu *{{:cours:plim:projet16_17:gr17:decibel_exposure_chart.gif?nolink&400|}} ==== Architecture logicielle de la solution :==== Notre système se compose de: * L'application qui a le role de: * Rassembler les données tout le long du jour (Running Service) * Afficher l'analyse à l'utilisateur * Communiquer avec l'API pour identifier la géolocalisation * Communiquer avec le coté serveur avec des requêtes REST * Base de données (Déployé sur FireBase): * Enregistrer les données envoyées par l'application mobile * Persistence des données: FireBase automatiquement crée un cache local en cas de déconnexion * Coté serveur (Déployé sur Google Cloud) * Apport des donnés depuis la base de données * Appliquer les algorithmes d'apprentissage sur ces données * Envoyer des réponses JSON pour l'application, contenant les résultats d'algorithme {{:cours:plim:projet16_17:gr17:overview-firebase-appengine-standard.png?nolink&600|}} ==== Algorithmes mis en œuvre : ==== * K-Means Clustering non-supervisé * L'utilité du Clustering nous donne un rapport simplifié des données captées pendant le jour. On se base sur deux dimensions: Le temps et L'intensité du son et l’intérêt est de montrer à l'utilisateur pour quelle période de jour il était exposé pour quelle intensité. * Custom Clustering * Pour éviter l'affichage de plusieurs marqueurs sur la carte pour la meme position, nous avons besoin de regrouper les positions qui sont proches (pour un certain rayon). Nous n'avons pas utilisé le K-means parce qu'on doit lui préciser le nombre des clusters, et dans ce cas, on ne peut pas connaitre ce type de donnée. Nous avons crée notre propre méthode pour regrouper les positions proches. ===== RENDU FINAL ===== Code Source sur github : https://github.com/eslamhossam23/ELIM/tree/Cloud ==== Installation ==== Il suffit d'installer l'application mobile sur votre smartphone Android, puisque le coté serveur et la base de données est sur cloud. Téléchargement : télécharger l'APK suivant sur votre téléphone mobile : [[https://drive.google.com/file/d/0B-2v13jZ38fILWZTTU1Rc1pMMmc/view?usp=sharing|APK]] * Choisir “Télécharger” * Allez dans l'application “Téléchargement” et cliquez sur le fichier .apk * Sélectionnez “Installer” ====Fonctionnement de l’application:==== Dès l'ouverture de l'application, le service de recording est activé. Il calcule l’intensité du son une fois chaque 30 second (le calcul d’une fois est effectivement 5 fois consécutives et on prend la moyenne afin d’éviter les anomalies). Puis le service enregistre chaque donnée au Firebase. A l’interface principale, vous trouverez quatre boutons: Get Data, Show Map, KMeans et un bouton de capture écran. {{:cours:plim:projet16_17:gr17:screenshot_20170219-232529.png?200|}} * Le bouton Get Data demande les données directement enregistrées sous Firebase et dès qu’elles sont prêtes, on les affiche sur le graphe sans aucun calcul. {{:cours:plim:projet16_17:gr17:untitled_presentation.png?200|}} * Show Map permet le passage à la carte où on affichera les positions dans lesquelles le service a enregistré l’intensité du son, et aussi l’intensité moyenne dans cette position (si il y en a plusieurs). {{:cours:plim:projet16_17:gr17:screenshot_20170219-232433.png?200|}} * KMeans permet le passage à une autre interface qui vous donne le choix de représenter le résultat de l’algorithme sous forme d’un graphe. Plus un paragraphe dessous qui explique la résultat {{:cours:plim:projet16_17:gr17:screenshot_20170219-232507.png?200|}} {{:cours:plim:projet16_17:gr17:untitled_presentation1.png?200|}} * Capture d’écran du graphe visible Donnée sans calcul: {{:cours:plim:projet16_17:gr17:img_6_17_1.jpg?200|}} Resultat Kmeans: {{:cours:plim:projet16_17:gr17:img_report_5_16_1.jpg?200|}} ====Consommation de l’application:==== Puisque l’application utilise un service activé tout le jour, il est alors indispensable d’évaluer la consommation d'énergie. Nous avons fait un petit test, nous avons laissé le service fonctionnant depuis minuit et pour 15 heures. La consommation était seulement 3%. {{:cours:plim:projet16_17:gr17:screenshot_20170211-150659.png?200|}}