Réalisé par: ​Maxime de CORTA – Azza BOUTOUR – Anis BELKACEM – Julie ROUX – Alexis REY
Tuteurs: David BLACHON - François P...
Introduction
Le projet de groupe est l’occasion de s’approcher d’une démarche d’entreprise avec un
cahier des charges, des...
ce projet. Cette application a pour but d'analyser le comportement de l'utilisateur du smartphone,
afin de répondre au mie...
l’activité en cours). Cet algorithme est « entraîné » préalablement via des vecteurs
auxquels on a déjà attribué un label....
Pour pouvoir travailler sur ces langages, et développer l'application, nous avons utilisé le
logiciel Eclipse, ainsi qu'un...
Nous pouvons construire l’arbre en choisissant un ordre de critère différent. L’arbre en
fait construit sera celui qui dem...
II. Implémentation de l’application
1. Les librairies de fonctions WEKA
Le logiciel WEKA est un logiciel open source (libr...
La librairie “ Weka for Android ” utilise à l’origine des fichiers de format ARFF (développé
par l’université de Waikato) ...
Importation du modèle grâce à la fonction modelLoader
La méthode ​modelLoader ​utilise le Helper ​SerializationHelper ​pou...
La fonction récupère les instances grâce à ​currentInstance​. Cette dernière va lire le fichier
.arff​généré lors de la ca...
La prédiction de l’activité se fait en temps réel; nous avons implémenté le code nécessaire
pour pouvoir visualiser la cha...
n’ont pas été enregistrées pour la création du modèle) et observer son comportement: soit elle
donnera une réponse complèt...
Une Activité comportant 3 boutons: l'un lançant MyService , l'autre stoppant MyService, et
le dernier permettant de notifi...
public void WriteInFile(String ToWrite); ​Ecrit le String “ToWrite” dans le fichier texte
public void WriteInit();
public ...
IV. Gestion de projet
1.Gestion du groupe
a. Organigramme des tâches
.
14
b. Distribution des tâches
Le projet s’articule autour de deux pôles :
❏ L’implémentation de l’algorithme Random Forest au...
2. Analyse du Diagramme de Gantt
Le Diagramme de Gantt du projet a été conçu pour nous donner un plan du travail à faire.
...
En se basant sur le diagramme de Gantt, nous avons pu avoir une vision globale de notre
avancée, ce qui nous a permis d’év...
d. Azza Boutour :
Ce projet fut vraiment très instructif autant sur le plan technique, avec l’apprentissage du
langage Jav...
Annexes
Annexe 1: Diagramme de GANTT
Annexe 2:Critères de notes pour l’évaluation latérale finale
Investissement /5 (I)
Co...
Alexis Rey : 5+4+5+4,5 -> 4,6
Julie Roux : 4,5+4,5+4,5+5 -> 4,6
Maxime de Corta : 5+5+5+5 -> 5
Anis Belkacem: 5+5+5+5 -> 5...
Weka est disponible en tant que logiciel et en tant qu’API (“librairie de fonctions”.)
Grâce au jeu de donnée que Blachon ...
Viennent ensuite les données juste après le “@data”.
Ainsi, chaque ligne correspond à un patient. Les valeurs des attribut...
À gauche, la liste des attributs qu’on a vu dans le fichier .arff. Ici, c’est l’attribut preg qui est
sélectionné. Ainsi, ...
Création du modèle en utilisant l’algorithme Random Forest
Pour cela, nous il faut passer à l’onglet Classify tout en haut...
Il existe plusieurs algorithmes de classification. Pour avoir la liste des algorithmes disponibles
cliquez sur choose, à c...
De ce fait, dans la partie “Summary”, on obtient le pourcentage de bonnes réponses ce qui
correspond à la fiabilité de not...
Prochain SlideShare
Chargement dans…5
×

65_rapport_final

35 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
35
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

65_rapport_final

  1. 1. Réalisé par: ​Maxime de CORTA – Azza BOUTOUR – Anis BELKACEM – Julie ROUX – Alexis REY Tuteurs: David BLACHON - François PORTET Projet de Groupe 2015 Projet 65 : Reconnaissance d’activités physiques ________________________________________________________________________________ Rapport final ________________________________________________________________________________ Table des matières : Introduction I. Notre projet ​1. Le continûment d’un projet existant 2. Un environnement de travail : JAVA et Androïd 3. L’algorithme Random Forest II. Implémentation de l’application ​1. Les librairies de fonctions WEKA 2. Les outils déjà développés 3. Implémentation de l'algorithme Random Forest, et rendu d'une décision III. Tester notre application 1. Établissement de protocole​s de test 2. Notre Application de Test 3. Implémentation dans l’application IV. Gestion de projet 1.Gestion du groupe 2.Analyse du Diagramme de ​GANTT 3.Analyse critique de la réalisation du projet 4. Apports personnels du projet Annexe 1: ​Diagramme de GANTT Annexe 2: ​Critères de notes pour l’évaluation latérale finale Annexe 3: WEKA 0
  2. 2. Introduction Le projet de groupe est l’occasion de s’approcher d’une démarche d’entreprise avec un cahier des charges, des délais, des rapports de l’avancement et surtout une réalisation fonctionnelle à l’issue d’un travail de presque 6 mois. Nous avions choisi parmi la liste proposée, le Projet Reconnaissance d’activités physiques. Ce projet se développe autour d’une application Androïd pour Smartphone. Le but de ce projet est de rendre une application capable de reconnaître certaines activités physiques en temps réel (par exemple les actions « marcher », « être allongé», « être en réunion », etc). Cela pourrai ainsi permettre de modifier des paramètres du téléphone pour répondre au mieux à ces activités (par exemple, passer automatiquement en mode vibreur en réunion). La plupart des recherches étaient directement axées sur la reconnaissance de capteurs d'accéléromètre et peu d'études ont intégrées le canal audio dans leur modèle même si c’est un capteur qui est toujours disponible sur toutes sortes de smartphones. Pour reconnaître ces différents états, l’application devra se baser sur des données enregistrées via les capteurs que propose le téléphone. Ces capteurs nous permettent d’avoir accès au son, aux mouvements, à l’heure, aux connections, au baromètre … Pour notre projet, nous nous restreindrons aux données collectées par les accéléromètres et le micro son. L’application devra alors analyser ces données, pour tenter de déterminer dans quelle situation se trouve l’utilisateur. Une partie de ce projet sera également dédiée à la réalisation de tests, afin de valider notre application et de vérifier son fonctionnement, afin d’établir ses éventuels points à améliorer. I. Notre projet 1.​​Le continûment d’un projet existant Le Projet 65, intitulé "Reconnaissance d'activités physiques", ne part pas de zéro. Il s'inscrit dans le continûment d'un projet d'application Androïd datant de l'année dernière. Ces deux projets avaient pour but d'apporter de nouvelles fonctionnalités à un projet d'application Androïd, nommée RecordMe, développée dans le cadre de la thèse de David BLACHON, l'un des tuteurs de 1
  3. 3. ce projet. Cette application a pour but d'analyser le comportement de l'utilisateur du smartphone, afin de répondre au mieux à ses besoins. Pour cela, l'application se base sur des enregistrements de données collectées à l'aide des multiples capteurs qu'offre un smartphone, et sur le traitement de ces données afin de les comparer à des modèles existant pour déterminer l’activité physique. L'année dernière, le projet était porté sur un moyen de sauvegarder des données enregistrées sur le téléphone vers un serveur distant, de manière sécurisée, afin de pouvoir libérer de la mémoire sur le téléphone. Le projet que nous avons réalisé s'intéresse, lui, au traitement des données enregistrées par les capteurs. En d'autre termes, nous avons dû implémenter un algorithme permettant d'analyser les données collectées, en les comparant avec des modèles prédéfinis, pour déterminer l'activité physique qu'est en train de faire l'utilisateur. Cet algorithme, ainsi que son fonctionnement, sera détaillé par la suite. Voici donc un résumé de ce qui a déjà été implémenté dans l'application que nous a fourni David BLACHON: ❏ L’enregistrement par le smartphone des données fournies par les différents capteurs : micro, accéléromètres, gyroscope, capteur de luminosité, capteur d’humidité, etc. Toutes ces informations volumineuses sont sauvegardées directement sur le téléphone. ❏ Le projet de l’année dernière consistait à libérer la mémoire du téléphone, en copiant ces données sur un serveur distant, via un protocole sécurisé (FTP), dès que le téléphone est connecté en Wifi, puis supprimer les données du téléphone. Cette partie est maintenant implémentée dans l’application. ❏ L’interface graphique de l’application est réalisée. Elle permet, entre autres, de réaliser des enregistrements en sélectionnant le ou les capteurs voulus, ❏ Un algorithme, nommé Random Forest, permet de faire de la classification de données. Il peut être « entraîné intelligemment » à classer tel ou tel jeu de données et de lui attribuer une étiquette, en fonction d’échantillons tests de données déjà étiquetés. Cet algorithme est disponible en Open Source via le logiciel Weka. ❏ Des enregistrements tests nous sont fournis pour constituer la base de données de l’algorithme. Ce qu’il nous restait donc à faire: ❏ Se former à JAVA et Androïd, deux langages informatiques très proches et indispensables à maîtriser pour mener à bien ce projet. ❏ Comprendre tout ce qui a été codé dans l’application jusqu’à présent : son fonctionnement, ses caractéristiques, etc. De plus, il nous faut également saisir le fonctionnement de l’algorithme permettant de classifier intelligemment les données qu’il traite pour mieux l’intégrer à l’application. NB: Un classifieur est un algorithme intelligent, auquel on fournit un vecteur de données (celles des capteurs) et qui attribue à ce vecteur un label (celui de 2
  4. 4. l’activité en cours). Cet algorithme est « entraîné » préalablement via des vecteurs auxquels on a déjà attribué un label. ❏ Récupérer dans le code de l’algorithme, en extraire les parties utiles, et l’adapter (le coder) pour une utilisation sur la plate forme Androïd. ❏ Établir au moins deux protocoles de tests pour vérifier le bon fonctionnement de l’application. Voici un schéma récapitulatif du fonctionnement de notre application (à noter que nous ne travaillerons que sur l’accéléromètre et le son): 2. Un environnement de travail : JAVA et Androïd Pour développer une application Androïd, il est nécessaire de connaître le langage JAVA, qui est un langage de programmation dit Orienté Objet. C'est un langage qui n'est pas enseigné en première année à phelma, il nous a donc fallu l'apprendre pour pouvoir développer notre application. C'est pourquoi, si l'on regarde notre GANTT (cf fin du rapport), on peut remarquer qu'une partie du projet a été consacrée à l'apprentissage de ce langage. De plus, une application Androïd a aussi son propre langage de programmation, à ceci près que ce langage est compatible avec JAVA: il est donc possible d'intégrer directement du code en JAVA dans le code d'une application Androïd. Cependant, il ne nous était pas nécessaire d'avoir une formation très poussée en Androïd, puisque la quasi totalité du code que nous avons écrit est en JAVA. Cette petite formation nous a servi à deux chose: comprendre le code déjà écrit dans l'application de David BLACHON ainsi que son architecture, ainsi que développer une petite application test, que nous verrons par la suite. 3
  5. 5. Pour pouvoir travailler sur ces langages, et développer l'application, nous avons utilisé le logiciel Eclipse, ainsi qu'un plugin dédié au développement d'applications Androïd. 3. L’algorithme Random Forest Afin de pouvoir traiter les données reçues par le téléphone et reconnaître l’activité physique effectuée par l’utilisateur du Smartphone, nous utiliserons un algorithme de classification appelé Random Forest (forêt d’arbres aléatoire) qui est un outil permettant de déterminer l’activité selon des paramètres d’entrée. Cet algorithme sera tiré du logiciel open source Weka, notre travaille consiste donc à comprendre le fonctionnement du code dans WEKA et de l’implémenter dans le code source de l’application. L'algorithme Random forest effectue un apprentissage sur de multiples arbres de décisions (decisional trees) entraînés sur des sous-ensembles de données légèrement différents. Le but d’un arbre de décision est de prédire une variable en fonction d'attributs pour une liste d’états. On suppose avoir une liste d'états caractérisés par des variables explicatives, et on cherche à prédire une variable expliquée. Pour expliquer le fonctionnement générale des arbres de décisions, nous allons prendre un exemple simple qu’est le golf. Nous avons tout d’abord une base de donnée qui ressemblera à cela : Temps Température Vent Pratique Pluie Froid Fort Non Soleil Froid Faible Oui Nuageux Chaud Fort Oui Pluie Chaud Fort Oui Pour un ensemble de donnée on classe si oui on non on peut pratiquer le golf. A partir de ces données, construire un arbre consisterai à faire : 4
  6. 6. Nous pouvons construire l’arbre en choisissant un ordre de critère différent. L’arbre en fait construit sera celui qui demande le moins d’itération pour déterminer l’état. Si par exemple lorsque on développe pour un critère donné, on a un résultat pur, c’est à dire que par exemple si il, fait chaud quel que soit le temps ou le vent il y a le même résultat, alors on arrête de développer l’arbre à cet étape là. Lorsque nous avons beaucoup de données, avec de même lots de données qui donnent des résultats différents, l’usage d’un simple arbre décisionnel donne une précision assez faible (grande variance). Ainsi, l’algorithme Random Forest consiste à construire un certain nombre n d’arbres décisionnels (le nombre n étant un paramètre de la fonction) et de faire une moyenne des résultats que chaque arbre donne. L'algorithme donnera donc comme résultat l’état qui apparaîtra le plus grand nombre de fois. Chaque arbre est ici développé le plus possible, il n’y a pas d’élagage. Chaque arbre est peu précis, mais il apparaît que l'agrégation de ces petits arbres donne un résultat avec une bonne précision. Ce système de classification offre également une très bonne efficacité et précision sur les grandes bases de données. 5
  7. 7. II. Implémentation de l’application 1. Les librairies de fonctions WEKA Le logiciel WEKA est un logiciel open source (libre) développé par une université Néo-Zelandaise. Ce logiciel offre une librairie de fonctions d’apprentissage automatique pour analyser les données et faire des prédictions, développée en langage JAVA. Ce logiciel bénéficie d’une interface graphique permettant un accès simple à ses fonctionnalités. Nous utiliserons l’algorithme Random Forest présent dans ce logiciel afin de pouvoir construire notre modèle à partir des données qui nous ont été fournies par David Blachon. Nous obtiendrons donc un fichier .model que nous réutiliserons ensuite dans le code de l’application. Le logiciel WEKA nous permet, dans le cas de l’algorithme Random Forest, de sélectionner le pourcentage de données pour construire les arbres, l’attribut que l’on souhaite déterminer, ainsi qu’un pourcentage dédié à tester les performances de l’algorithme de classification (pourcentage de bonnes réponses). Pour de plus amples informations sur l’utilisation de WEKA pour la construction de notre modèle d’apprentissage, se référer à l’annexe 3. Par la suite, nous devrons comprendre le fonctionnement du code de l'algorithme Random Forest afin de le réimplanter dans l’application pour qu’il traite un lot de données entrantes selon l’apprentissage qu’il a subit en amont. 2. Les outils déjà développés Notre travail se base sur l’application URecord développée par David Blachon. Son rôle est d’enregistrer les données brutes issues des différents capteurs (audio, gyroscopique), d’en extraire les informations intéressantes (moyenne, variance, écart-type, transformée de Fourier via l’algorithme Fast Fourier Transformation). Afin de maximiser l’efficacité de ces traitements, l’application définie une fenêtre de lecture des données de deux secondes : la seconde la plus récente est traitée pendant que la plus éloignée est acquise, puis la fenêtre est décalée d’une seconde. 3. Implémentation de l'algorithme Random Forest, et rendu d'une décision Le rôle de Random Forest est donc de confronter ces paramètres, extraits de données nouvellement acquises, aux nombreux arbres de décisions créés lors de l’apprentissage. 6
  8. 8. La librairie “ Weka for Android ” utilise à l’origine des fichiers de format ARFF (développé par l’université de Waikato) qui renseigne les noms, attributs, et données de la base de données entrante. Dans un premier temps, il convient de générer un modèle de prédiction. Ainsi, grâce à l’interface graphique fournie avec Weka, nous avons pu rapidement créer un modèle. Ce dernier est exportable facilement en un fichier ​.model. Génération du fichier .model et matrice de confusion Il suffit ensuite d’importer le fichier ​.model​lors du lancement du service de reconnaissance. 7
  9. 9. Importation du modèle grâce à la fonction modelLoader La méthode ​modelLoader ​utilise le Helper ​SerializationHelper ​pour importer le fichier. Ainsi, le modèle est enregistré dans une variable statique nommée ​rf​: Nous avons ensuite créé une méthode ​predict ​qui renvoie la prédiction effectuée dans une chaîne de caractère. La fonction récupère les Instances précédemment créées dans la variable ​is et ne prédit que la dernière instance en utilisant le modèle contenue dans la variable ​rf​. 8
  10. 10. La fonction récupère les instances grâce à ​currentInstance​. Cette dernière va lire le fichier .arff​généré lors de la capture et retourne l’ensemble des instances contenues dans ce fichier. Il ne reste plus qu’à envoyer la prédiction contenue dans le service à l’activité. Pour cela, nous utilisons l’interface ​ResultReciever​. Ainsi, le service envoie un ​bundle ​contenant la prédiction. ​ResultReciever ​est assez pratique car elle permet aussi d’envoyer à l’activité un nombre entier, que l’on peut par exemple utiliser pour traiter des possibles erreurs. 9
  11. 11. La prédiction de l’activité se fait en temps réel; nous avons implémenté le code nécessaire pour pouvoir visualiser la chaîne de caractère retournée par le modèle directement sur l’activité en cours. Cela nous a permis de vérifier le bon fonctionnement de cette partie de l’application, simplement en marchant avec le téléphone dans la main, une fois l’enregistrement lancé. III.​​Tester notre application 1.​​Établissement de protocoles de test Dans cette partie du projet, nous nous sommes intéressés à la manière dont nous allions mettre en valeur nos résultats. En effet, une application se doit d’être testée pour en établir le bon fonctionnement. Dans notre cas, nous voulions tout d’abord un moyen de sauvegarder dans un « fichier mémoire » les différentes décisions prises par l’algorithme Random Forest, tout en ayant une base temporelle synchronisable avec ces enregistrements, pour valider les résultats obtenus. Pour cela, nous avons pu profiter des nombreuses possibilités qu’offre un smartphone Androïd. L’idée est d’établir un protocole d’enchaînement d’activités physiques, que devra suivre une personne testant l’application sur son smartphone. Cette personne devra apprendre par cœur le déroulement de l’exercice. Lors de la mise en place du test, un opérateur sera chargé d’envoyer toutes les deux minutes environ un SMS sur le smartphone du testeur. A la réception de ce SMS, le testeur saura alors qu’il devra changer d’activité physique, en suivant le protocole. Un autre protocole de test auquel nous avons pensé est le suivant: induire en erreur l’application. Nous allons tester sa réaction lorsque, par exemple, on tient le smartphone dans la main, alors que la position dans laquelle ont été faits les enregistrements n’était pas celle là. Nous allons également tester l’application avec des activités physiques qu’elle ne connaît pas (ie qui 10
  12. 12. n’ont pas été enregistrées pour la création du modèle) et observer son comportement: soit elle donnera une réponse complètement aléatoire, soit elle arrivera à trouver l’activité qui lui “ressemble le plus” par rapport aux données analysées (ce qui ne veut pas dire que le résultat sera logique pour autant !) Avec les différents outils d’Androïd, il est possible d’avoir accès à la date précise (à la nanoseconde près) de réception de ce SMS, et de la noter dans un fichier texte. Ainsi, cela nous permettra de synchroniser les bases de temps : celle du test et celle de l’enregistrement des données, puisque tout sera basé sur l’horloge du téléphone utilisé pour le test. Nous avons donc décidé de créer une application Androïd spécialement dédiée pour nos tests. L'avantage du langage Androïd est que le code peut être réutilisé très simplement dans une autre application ; l’intérêt est donc d’avoir un environnement pour tester notre application de tests, avant de l’incorporer à l’application finale. La partie suivant va vous présenter en détail l’application que nous avons créée : sa structure et son fonctionnement. 2.​​Notre Application de Test : L’application est divisée en trois : ❏ Une interface graphique avec trois boutons. Deux pour lancer et arrêter le service utilisé (nous allons y venir), et le dernier qui servira simplement à notifier dans les fichiers tests la date d’un changement d’activité physique par l’utilisateur. C’est une interface graphique de test. ❏ Un service pour faire tourner les tests. Il s’agit d’un processus pouvant tourner en arrière-plan : c’est-à-dire qu’on peut utiliser l’interface graphique de l’application, la quitter, etc, tant qu’on n’a pas fermé le service, et qu’il ne demande pas trop de ressources, il continuera d’effectuer la tâche qu’on lui a assigné. Ici, nous demandons à notre service de lire les SMS arrivant. S’il reconnaît le numéro de téléphone de l’opérateur, il va automatiquement générer une ligne de texte dans notre fichier texte de test, signifiant un changement d’activité physique et la date de ce changement. ❏ Différents outils permettant de manipuler les fichiers, les différents temps enregistrés, etcetera. Voici donc un résumé des ​classes et méthodes utilisées dans cette application de test. Les méthodes seront affichées en ​mauve​, les attributs en ​vert​. ​Les commentaires seront en ​orange​: public class MainActivity extends ActionBarActivity 11
  13. 13. Une Activité comportant 3 boutons: l'un lançant MyService , l'autre stoppant MyService, et le dernier permettant de notifier manuellement un changement d'activité physique dans le fichier de test. public class MyService extends Service public String AuthorizedPhone = "617096671"; ​Le numéro à repérer pour le SmsReceiver public SmsReceiver mSms = new SmsReceiver(AuthorizedPhone); public TestFile ftest = new TestFile(); public TimeMeasure timer = new TimeMeasure(); public String Directory = Environment.getExternalStorageDirectory().toString()+"/Dossier _Test"; ​​Zone mémoire où on écrira le fichier de test public class SmsReceiver extends BroadcastReceiver Outil Androïd qui va appeler la méthode onReceive lorsque le téléphone reçoit un SMS de AuthorizedPhone public String NameOfFile; public String SenderNum; public String AuthorizedPhone; public String message; public TestFile ftxt = new TestFile(); final SmsManager sms = SmsManager.getDefault(); ​Objet de gestion des SMS public SmsReceiver(String a); ​Constructeur public SmsReceiver (); ​Constructeur public void onReceive(Context context, Intent intent); public MyService(); ​Constructeur public void onCreate(); ​Appelée lorsqu’on instancie le MyService public int onStartCommand(Intent intent, int a, int b); ​Appelée au lancement du MyService public void onDestroy(); ​Appelée lorsqu’on stoppe le MyService public class TestFile Classe permettant de gérer le fichier texte de tests qu’on souhaite créer public TimeMeasure timer = new TimeMeasure(); public File ExtStorage; ​le dossier de la mémoire autorisée du téléphone public File TestDir; ​le dossier qui contiendra les fichiers texte public File testTxt; public TestFile(); ​Constructeur public void setFileName(String Name); ​Nomme le fichier grâce à l’horloge du téléphone 12
  14. 14. public void WriteInFile(String ToWrite); ​Ecrit le String “ToWrite” dans le fichier texte public void WriteInit(); public void WriteCurrent(); ​Ecrit le temps courrant dans le fichier texte public class TimeMeasure Classe permettant d’accéder à l’horloge du téléphone, et la “transformant” en String pour être traitable par la classe TestFile public long DateInitiale; public long DateFinale; public TimeMeasure(); ​Constructeur public String Reset(); ​Effectue: DateInitiale = horloge du téléphone public String currentTime(); ​Effectue DateFinale = horloge du téléphone public String ElapsedTime(); ​Rend un String correspondant au temps écoulé entre les Dates Cette application nous a donc permis de tester les classes développées ci-dessus. Une fois l'application testée, et validée, nous avons pu importer les fichiers .java directement dans l'application RecordMe. Il ne nous restait plus qu'à utiliser les méthodes développées dans ces classes dans le code de l'application RecordMe pour pouvoir tester cette dernière. 3. Implémentation dans l’application Les classes ​TimeMeasure ​et ​TestFile ​ont directement été importées dans le projet, sous forme de fichiers ​.java​, dans un package séparé. La classe ​MyReceiver ​a, elle, été rajoutée directement dans le code de la classe ActRecoService, pour pouvoir aisément instancier et enregistrer le BroadcastReceiver (pour les SMS) en début de service (dans la méthode onCreate). Nous avons pu utiliser la méthode ​WriteInFile​, pour écrire la dernière prédiction dans le fichier de test, dans le ​timerRunnable -> processRunnable ​utilisé pour programmer les décisions sur les fenêtre successives de 2 secondes. Cela nous a assuré de garder une trace des décisions rendues lors de l’enregistrement. L’objet ​timer2 ​(qui est un ​TimeMeasure​) nous a permis de garder également la date de la décision, comme nous le souhaitions. 13
  15. 15. IV. Gestion de projet 1.Gestion du groupe a. Organigramme des tâches . 14
  16. 16. b. Distribution des tâches Le projet s’articule autour de deux pôles : ❏ L’implémentation de l’algorithme Random Forest au sein de l’application RecordMe, par Anis, Julie et Alexis ❏ la mise au point et la réalisation de différents tests pour valider le fonctionnement de l’application, par Azza et Maxime La réalisation globale du projet est dirigée par Maxime, ainsi que la communication avec les tuteurs.   c. Organisation du travail L’organisation de notre travail sera basée essentiellement sur un partage en ligne des différents morceaux de code de l’application grâce à un Google Drive. Cette option est celle qui pour nous était la plus optimisée dans le cas de notre projet, car le Google Drive est facile d’accès, gratuit et amplement suffisant par rapport à l’utilisation en ressource mémoire que requiert l’application. Il a également permis de pouvoir rédiger les rapports et les présentations à plusieurs sur le même fichier ce qui a vraiment permis d’augmenter notre productivité. d. Charte de travail Voici les différentes règles sur lesquelles nous nous sommes mis d’accord, afin de mener à bien notre projet : Règles de vie en groupe: ❏ Prévenir en cas d’empêchement ou retard. ❏ Être présent à l’heure à l’endroit du rendez-vous. ❏ S’assurer que l’on a bien tout le nécessaire pour travailler correctement. Exemple: Fichiers sur clef, Programme compatible avec les ordinateurs... ❏ Respecter les autres membres du groupe (courtoisie, …). 15
  17. 17. 2. Analyse du Diagramme de Gantt Le Diagramme de Gantt du projet a été conçu pour nous donner un plan du travail à faire. Cependant nous avions conscience que la réalité du projet allait être différente. Ainsi, en fin de projet, nous avons tracé le Gantt effectif et nous avons comparé les deux Gantt. L’analyse que nous pouvons faire est que, globalement, nous avons respecté les durées des tâches. Par exemple, pour l’apprentissage de JAVA, Androïd, les délais étaient presque bons (à une semaine prés). La rédaction des comptes rendus de séances était faite à chaque séance grâce au DRIVE. De même, les rapports et les présentations étaient rédigées à temps. Par contre, le codage de l’application et les tests ont étés plus long que prévu comme nous l’avons expliqué dans la partie technique: en effet nous avons perdu du temps pour appréhender Weka et pour implémenter une application simple sur un Smartphone, ce qui a retardé les tests. 3. Analyse critique de la réalisation du projet a. Aspects techniques On a pu ajouter un module de reconnaissance d’activités physiques en intégrant à l’application le code d’un algorithme existant provenant de la librairie Weka. On a ensuite établi et réalisé un protocole de test pour l’application, afin d’évaluer les performances du module réalisé. Le projet peut être considéré comme réussi car nous avions parvenu à coder et tester une application qui pourra reconnaître avec une faible marge d’erreur trois à quatre activités physiques à déterminer, tout en ayant le smartphone sur soi, aux endroits où il est le plus souvent rangé (poche, sac, main, etc.). Néanmoins, comme le codage de l’application n’a pas pu avancer trop rapidement (contrairement à ce qu’on a prévu dans le diagramme de Gantt), l’équipe n’a pas pu réfléchir à différentes manières d’accélérer le fonctionnement de l’application et d’élargir la gamme de tests. b. Aspects gestions Concernant la gestion de projet, nous pensons qu’elle a été bonne, car nous avons exploité au mieux les outils d’organisation et de planification de projet. La répartition des rôles s’est avérée être un bon choix, car chacun a réalisé sa tâche sans contrainte, et cela nous a permis d’avancer bien plus vite qu’en se consacrant tous à une seule tâche à la fois. 16
  18. 18. En se basant sur le diagramme de Gantt, nous avons pu avoir une vision globale de notre avancée, ce qui nous a permis d’évaluer notre travail. Mais l’un de nos plus grands points forts a été la mise en commun des travaux, grâce notamment à un Google Drive qui a spécialement été mis en place pour le projet. Cela nous a beaucoup aidé en particulier pour la rédaction des rapports, et la préparation des soutenances. Le contact permanent avec nos tuteurs par mail, et nos nombreuses entrevues, surtout en début de projet, nous ont également aidé à réussir ce projet; cela nous a également donné un avis extérieur sur le travail que nous réalisions. 4. Apports personnels du projet a. Maxime de Corta : Étant redoublant cette année, j’ai choisi ce projet pour rester dans la continuité de celui que j’avais fait l’année dernière, et qui travaillait aussi autour de cette application. La programmation est depuis longtemps un domaine qui m’intéresse, j’ai donc trouvé particulièrement intéressant le fait de pouvoir élargir mes connaissances dans ce domaine, ainsi que de me familiariser encore plus avec la rigueur nécessaire à la réalisation d’un projet. b. Anis Belkacem : Ce projet m’a permis de me familiariser avec le langage JAVA, un langage que je trouve intéressant du fait de sa structure particulière. Mais la partie sur l’Apprentissage Automatique (Machine Learning) est bel est bien ce qui m’a le plus interpellé. J’ai pu, grâce à ce projet, découvrir une discipline dont je ne soupçonnais pas la complexité. En effet, c’est une matière qui m’a vite paru intéressante et enrichissante. c. Julie Roux : J’ai choisi ce projet car j’apprécie beaucoup la programmation, je désirais donc mener un projet concret de programmation. Ce projet m’a permis de découvrir le travail en équipe, ainsi que d’apprendre le langage JAVA. Le travail d’équipe est très intéressant car il permet de se compléter quand à nos compétences. Je ne connaissais pas le langage JAVA par exemple, et certains membres du groupe le connaissant mieux, cela a permis de solliciter leur aide pour mieux apprendre. 17
  19. 19. d. Azza Boutour : Ce projet fut vraiment très instructif autant sur le plan technique, avec l’apprentissage du langage Java et de l’architecture Androïd, que sur le plan humain, à travers les relations avec mes collègues de projet et mes tuteurs. En arrivant à Phelma Je n’avais alors aucun métier réellement en vue, je savais juste que je voulais travailler de manière libre et créative, et produire en même temps quelque chose de concret. Le développement des applications pour Smartphone est maintenant un domaine qui m'intéresse énormément. e. Alexis Rey : Travailler sur ce projet m’a permis de découvrir le langage Java, ainsi que l’environnement Android, de façon plus approfondie. De plus, les résultats de l’application ne sont pas directement visibles sur l’écran du smartphone : sa validation a donc été une vraie question. J’ai eu des difficultés à m’habituer au travail en groupe, mais cela a été une bonne expérience.   18
  20. 20. Annexes Annexe 1: Diagramme de GANTT Annexe 2:Critères de notes pour l’évaluation latérale finale Investissement /5 (I) Convivialité /5 (C) Ponctualité /5 (P) Efficacité /5 (E) Note du membre /20 = I + C + P +E Nous avons considéré que ces 4 critères évaluaient de manière complémentaire le bon comportement d’un membre. Investissement: 19
  21. 21. Alexis Rey : 5+4+5+4,5 -> 4,6 Julie Roux : 4,5+4,5+4,5+5 -> 4,6 Maxime de Corta : 5+5+5+5 -> 5 Anis Belkacem: 5+5+5+5 -> 5 Boutour Azza :5+4,5+4,5+4 -> 4,5 Convivialité: Alexis Rey : 4+4+5+4,5 -> 4,4 Julie Roux : 5+5+5+5 -> 5 Maxime de Corta : 5+5+5+5 -> 5 Anis Belkacem: 5+5+5+5 -> 5 Boutour Azza : 5+5+5+5 -> 5 Ponctualité: Alexis Rey : 4,5+5+5+4,5 -> 4,7 Julie Roux : 4.5+4+4.5+4.5 -> 4,38 Maxime de Corta : 4+4,5+4,5+5 -> 4,5 Anis Belkacem: 4,5+4,5+4+5 -> 4,5 Boutour Azza : 4,5+4,5+4+4 -> 4,25 Efficacité: Alexis Rey :4,5+4,5+5+5 -> 4,7 Julie Roux : 4.5+4,5+4+4 -> 4.25 Maxime de Corta : 5+5+5+5 -> 5 Anis Belkacem: 5+5+5+5 -> 5 Boutour Azza : 4,5+4+4,5+4,5 -> 4,37 Note finale: Alexis: 18,4 Julie: 18,14 Maxime: 19,5 Anis: 19,5 Azza: 18,12 Annexe 3: ​Weka 20
  22. 22. Weka est disponible en tant que logiciel et en tant qu’API (“librairie de fonctions”.) Grâce au jeu de donnée que Blachon nous fournira, nous pourrons créer un modèle avec le logiciel. En effet, le logiciel nous générera un fichier “.model” que l’on utilisera plus tard dans l’application pour pouvoir prédire les activités (marcher/courir/etc…) Évidement, nous utiliserons l’API quand il s’agira de coder la reconnaissance. Pré-requis : Installer Weka Logiciel Pour installer le logiciel, aller sur​​http://www.cs.waikato.ac.nz/ml/weka/downloading.html​. ● Choisir votre version de windows (le plus souvent x64, si ça ne marche pas, prenez le x86) ● Télécharger celui qui inclut ​Java VM 1.7 Exemple de création d’un .model à partir d’un jeu de donnée Weka propose des jeux de données de test bien utiles. Nous utiliserons ici le fichier “diabetes.arff”. Ce fichier est en fait un enregistrement de plusieurs paramètres (glycémie etc…) de patients. Chaque enregistrement correspond à un patient malade ou pas. Ainsi, nous allons créer un modèle pour pouvoir prévoir si un patient est malade ou pas. Présentation des fichiers .arff Les fichiers .arff sont des fichiers de données weka. C’est le même type de fichier que le jeu de donnée de Blachon. Ouvrons notre fichier “diabetes.arff.”​​http://thepixart.com/diabetes.arff Le fichier commence avec la structure de nos données. La première ligne “@relation pima_diabetes” n’est pas importante. Elle renseigne en fait le nom du jeu de données. On aurait pu tout autant mettre “@relation toto”. Les lignes suivantes “@attribute” représentent les attributs : par exemple ‘insu’ pour le taux d’insuline dans le sang. Donc logiquement, comme le taux d’insuline est un nombre, on précise ‘numeric’. L’attribut class, lui, nous informe si la personne est malade ou pas, du coup il est de la forme {tested_negative, tested_positive}. On aurait pu mettre aussi {pas_malade,malade} 21
  23. 23. Viennent ensuite les données juste après le “@data”. Ainsi, chaque ligne correspond à un patient. Les valeurs des attributs sont séparées par une virgule. Ainsi, le première personne a 6 de preg, 148 de plas, 0 d’insuline etc… et elle est donc malade (tested_positive.) Importation du fichier diabetes.arff sur Weka Pour cela, il faut déjà télécharger le fichier. Rdv sur ​http://thepixart.com/diabetes.arff puis enregistrez le fichier sur votre ordinateur. (Fichier > Enregistrer ou Ctrl + S) Ensuite, ouvrez weka. On obtient alors : Weka est très complet comme logiciel. Nous nous limiterons à ce qui nous intéresse. Ainsi, il faut cliquer sur explorer. Une fois sur l’explorer, importez votre fichier en cliquant sur “open file” en haut à droite et en sélectionnant votre fichier. Une fois ouvert, vous obtiendrez cela : 22
  24. 24. À gauche, la liste des attributs qu’on a vu dans le fichier .arff. Ici, c’est l’attribut preg qui est sélectionné. Ainsi, quand vu que c’est un attribut “numeric” comme indiqué dans le fichier .arff, Weka nous fournit quelques informations dessus à droite dans la box “Selected attribute”. En effet, nous avons les valeurs Miniminale et Maximale. Nous avons aussi le Mean (la moyenne) et le StdDev pour Standard Deviation (l’écart-type). Sur le graphique, on a la répartition des valeurs avec en rouge les tested_positive et en bleu les tested_negative. En effet, quand on s’intéresse à l’attribut “class”, on obtient bien cela. 23
  25. 25. Création du modèle en utilisant l’algorithme Random Forest Pour cela, nous il faut passer à l’onglet Classify tout en haut. Nous obtenons donc cela. 24
  26. 26. Il existe plusieurs algorithmes de classification. Pour avoir la liste des algorithmes disponibles cliquez sur choose, à côté de ZeroR. Nous choisirons Random Forest qui se trouve dans le dossier Trees. Random Forest possède quelques paramètres que l’on peut modifier tel que le nombre d’arbre (numTrees). Pour modifier la valeurs des arguments, il suffit de cliquer sur ​RandomForest. ​Une fenêtre apparaîtra. Ici, nous nous contenterons de laisser les paramètres par défaut. Nous avons ensuite accès aux option de tests dans la box “Test options.” Cela correspond aux tests qui nous aideront à donner une “accuracy” au modèle créé. C’est à dire de donner un pourcentage de fiabilité de notre modèle. Nous pouvons donner un autre fichier .arff de test mais nous nous contenterons ici d’utiliser la cross-validation avec 10 de Folds. Au dessous du bouton “More option”, Weka nous donne la possibilité de choisir l’attribut par rapport auquel nous voulons classer. Ici, nous choisirons évidemment l’attribut “Class.” On peut maintenant lancer la création du modèle. Pour cela, cliquez sur Start. On obtient alors : 25
  27. 27. De ce fait, dans la partie “Summary”, on obtient le pourcentage de bonnes réponses ce qui correspond à la fiabilité de notre modèle, ici 74,8%. Pour sauvegarder notre Modèle, il faut faire un clic droit sur notre modèle (à gauche <Result list>) et choisir Save model. Nous avons ainsi généré un fichier de classification .model, réutilisable par la suite. 26

×