====== Sujets de projets 2018 automne ====== =====RC1. Outil de visualisation et d’interprétation de consommation électrique personnelle ===== ^ Domaines | data mining, visualisation, web | ^ Librairies (proposées) | scikit-learn, bootstrap | ^ Langages (proposé) | Python, javascript, html/css… | ^ Responsable du sujet | Rémy Cazabet | ^ Informations à voir | - | | || Les compteurs électriques intelligents (Linky) permettent de suivre notre consommation électrique demi-heure par demi-heure. Vous développerez des outils de data mining et de visualisation web pour permettre à chacun de comprendre (et idéalement de réduire...) sa consommation électrique. Un projet précédent a accompli les premières étapes (script de récupération des données...), mais n'a pas mis en place d'outils de data mining ni de visualisation avancé. Ce sera donc votre objectif. =====RC2. Plateforme d’exploration de l’activité de recherche à Lyon ===== ^ Domaines | data mining, visualisation, scientometrie | ^ Librairies (proposées) | scikit-learn, bootstrap | ^ Langages (proposé) | Python, javascript, html/css… | ^ Responsable du sujet | Rémy Cazabet | ^ Informations à voir | [[https://hal-udl.archives-ouvertes.fr | Portail de l'université de Lyon]] || | || Les informations des publications scientifiques des chercheurs de Lyon sont accessibles en ligne via un site web qui offre une API. Vous développerez une application (web ou non) utilisant des outils de fouille de données (Clustering, analyse de réseaux, traitement automatique du language ...) pour permettre d'exploiter ces données. Par example, l'application permettra de détecter automatiquement les sujets "à la mode" (Deep learning...), de visualiser des graphes thématiques, des collaborations entre laboratoires, etc. =====RC3. Implémentation d’un outil de visualisation de l’évolution de réseaux dynamiques en langages web ===== ^ Domaines | Graphes, visualisation | ^ Librairies (proposées) | d3, networkx, bootstrap | ^ Langages (proposé) | Python, javascript, html/css… | ^ Responsable du sujet | Rémy Cazabet | ^ Informations à voir | [[http://studprojects.cazabetremy.fr/series/GoT.html | Projet du semestre precedent]] || | || L'analyse de réseaux dynamiques est un de mes sujets (data mining) de recherche principaux. Il n'existe pas à l'heure actuelle de bons outils pour visualiser des données formant de tels réseaux. Vous développerez une interface web pour répondre à ce problème. Au cours des semestres précédents, des premières versions ont été faites, mais elles se sont plus concentré sur l'aspect site web que sur l'aspect visualisation du réseau. Vous vous concentrerez sur la réalisation d'une visualisation permettant de "naviguer dans le temps", c'est à dire de prendre en compte de manière fluide la possibilité de visualiser l'évolution du réseau en marche avant, marche arrière, accéléré ... Le projet est particulièrement intéressant pour ceux qui souhaitent découvrir/se perfectionner en javascript, en particulier création d'application web, d'animations interactives, etc. (voir bibliotheque [[https://d3js.org|D3]] que vous utiliserz probablement. =====RC4. Kaggle Challenge ===== ^ Domaines | Machine Learning ("Intelligence Artificielle") | ^ Librairies (proposées) | sciki-learn, autres | ^ Langages (proposé) | Python, autre | ^ Responsable du sujet | Rémy Cazabet | ^ Informations à voir | [[https://www.kaggle.com/competitions | Challenges Kaggle en cours]] || | || [[https://www.kaggle.com/competitions | Kaggle]] est le site web le plus connu de challenges en machine learning. En 2 mots: des entreprises proposent des challenges auxquels n'importe qui peut tenter de proposer une solution. La meilleure solution gagne. Mais là où Kaggle est particulièrement intéressant, c'est qu'il propose des tutoriels pour résoudre certains problèmes classiques, en utilisant différentes méthodes. Votre objectif: 1) Suivre un/des tutoriels pour résoudre un problème tout fait, 2)Choisir un challenge en cours et appliquer ce que vous avez appris 3)Être riche et célèbre. =====RC5. Restaurants à Lyon ===== ^ Domaines | Visualisation, exploitation de données | ^ Librairies (proposées) | mapbox, leaflet, d3 | ^ Langages (proposé) | javascript, html/css, language back-end (python?...)| ^ Responsable du sujet | Rémy Cazabet | ^ Informations à voir | [[http://studprojects.cazabetremy.fr/mapLyonpr2018/ | Projet semestre précédent]] || | || Le but de ce projet est de créer une carte interactive des restaurants/bars (et/ou autres lieux) de Lyon, avec pour objectif de faire un vrai site utile. Attention ! Ce projet est réservé à une équipe motivée, car il est INDISPENSABLE de faire mieux que le travail précédent, qui est déjà le résultat de 2 projets successifs. Il est donc quasiment obligatoire de réutiliser une partie du travail déjà effectué (tous les codes sont disponibles). Plusieurs éléments sont à travailler: amélioration de l'interface. Ajout de données de sources différentes (actuellement: Google maps et un peu Yelp), solution pour supprimer les temps de chargement, ajout de quelques fonctionnalitées de "fouille de données" (exploitation des commentaires, notes, textes descriptifs, ...). =====SA1. Résolution d’un Puzzle ===== ^ Domaines | IA | ^ Librairies (proposées) | | ^ Langages (proposé) | Java… | ^ Responsable du sujet | Samir AKNINE | ^ Présentation du sujet | [[https://perso.liris.cnrs.fr/samir.aknine/LP/ | Sujet complet]] | L’objectif de ce projet est d’implémenter une méthode de résolution d’un Puzzle de taille n*n. Nous implémenterons, dans un premier temps, un algorithme simple pour une résolution naïve et on l’affinera ensuite. =====SA2. Partage dynamique d’énergie verte entre des ilots autonomes et des véhicules connectés ===== ^ Domaines | IA | ^ Librairies (proposées) | | ^ Langages (proposé) | Java… | ^ Responsable du sujet | Samir AKNINE | ^ Présentation du sujet | [[https://perso.liris.cnrs.fr/samir.aknine/LP/ | Sujet complet]] | L’objectif de ce projet est d’implémenter une méthode de résolution qui permet à des véhicules connecter de se recharger auprès de bornes intelligentes et de contrôler dynamiquement les interactions entre les véhicules autonomes et les bornes. =====SA3. Un Système de négociation automatique ===== ^ Domaines | IA | ^ Librairies (proposées) | | ^ Langages (proposé) | Java… | ^ Responsable du sujet | Samir AKNINE | ^ Présentation du sujet | [[https://perso.liris.cnrs.fr/samir.aknine/LP/ | Sujet complet]] | On s’intéresse à la modélisation d’un système de négociation automatique intelligent. On se propose de prendre comme exemple l’organisation de voyage. Pour ce faire, on considère un ensemble d’entités composant ce système qu’on appellera des fournisseurs et des négociants. Les fournisseurs sont chargés de récupérer les informations sur les services, les préférences et les contraintes des fournisseurs de services. Par exemple, une compagnie aérienne ou un utilisateur peut soumettre un ensemble de billets d’avions ou de trains à un fournisseur pour les mettre en vente. Les négociants représentent quant-à-eux aussi bien des organismes que des personnes qui recherchent des services ou des biens à acquérir. Pour cela, ils doivent, de la même façon, recueillir les informations nécessaires pour mener leurs négociations auprès des fournisseurs de ces services. ===== AM1. Reconnaissance de caractères ou de notes de musique sur une image et lecture du texte ===== ^ Domaines | Images et machine learning (IA)/Deep learning | ^ Techniques | Détection de caractères, classification, lecture. | ^ Langages | C++ ou Python (surement plus simple pour le deep learning) | ^ Responsable du sujet || | | Alexandre Meyer | ^ Informations à voir || | [[ https://www.pyimagesearch.com/2017/07/17/credit-card-ocr-with-opencv-and-python/ | Credit card OCR with OpenCV and Python ]]; [[ https://github.com/fchollet/keras | Keras, surcouche des plateformes de deep learning classique (Tensorflow, CNTK, Theano]]; [[https://pypi.org/project/pyTTS/3.0/|synthèse de sons]] || Les outils de vision et de synthèse de son deviennent assez rependus et simple d'utilisations pour être capable de coder des applications qui semblaient encore impressionnantes il y a quelques années. Le travail portera sur 3 points et peut donc se réaliser à 3 développeurs bien synchronisés. * La détection de texte/notes de musique peut se faire avec OpenCV ou DLib (C++ ou python) * La classification pour reconnaitre une lettre spécifique peut se faire avec un algorithme de deep learning en utilisant les framework classiques comme Keras/TensorFLow (plutôt python). * La lecture sonore du texte doit pouvoir se réaliser avec différentes librairies comme pyTTS. Une recherche autour de ce point sera nécessaire. =====AM2. Développement d'un jeu vidéo complet avec Unity ===== ^ Domaines | Image | ^ Techniques | Toutes les facettes d'un jeu vidéo | ^ Langages | C#/Unity | ^ Responsable du sujet || | | Alexandre Meyer | ^ Informations à voir [[ https://openclassrooms.com/fr/courses/1946836-realisez-votre-premier-jeu-video-avec-unity | Tuto unity ]] || | || Unity est un framework devenu hyper classique pour le développement de jeux vidéo. Ce sujet se propose de vous faire développer un jeu vidéo complet en allant si possible jusqu'à la publication sur l'Android store. Après une prise en main d'Unity, nous vous proposons de par exemple de redévelopper soit un jeu similaire à tuxracer mais en multi joueur sur le même écran coupé en deux sous partie, soit tout autre jeu que vous proposerez (en restant raisonnable sur la faisabilité). TuxRacer est un jeu OpenSource développé en C++ dont les ressources sont disponibles (terrain, modèle 3D, musique, etc.). ===== AM3. Unity et Apprentissage Machine ===== ^ Domaines | IA et un peu Image | ^ Techniques | Apprentissage par renforcement | ^ Langages | C#/Unity | ^ Responsable du sujet || | | Alexandre Meyer | ^ Informations à voir [[ https://unity3d.com/fr/machine-learning | Unity et Apprentissage Machine ]] || | || Unity est un framework devenu hyper classique pour le développement de jeux vidéo. Ce sujet se propose de vous faire explorer les outils mise à disposition des développeurs Unity pour qu'une "IA" apprenne à jouer à un jeu. C'est un sujet assez exploratoire et demandant une bonne capacité à aller se documenter seul sur les différents algorithmes qu'il sera possible de mettre en place. Vous viserez un mini jeu déjà développé et dans un 1er temps vous mettrez en place une IA très basique, voir même jouant au hasard en ne gardant que les meilleurs actions. ===== AMRC4. Edition et visualisation de traces GPS sur le web ===== ^ Domaines | Web et visualisation | ^ Techniques | | ^ Langages | | ^ Responsable du sujet || | | Alexandre Meyer, Remy Caazbet | ^ Informations à voir [[https://www.visugpx.com/editgpx/|VisuGPX]] || | || L'objectif de ce projet est de concevoir un site web proposant le chargement, la visualisation et l'édition de trace GPS au format GPX. Souvent les traces GPS sont erronés (perte de signal, GPS peu précis, etc.). Nous attacherons une part importante aux outils d'éditions de la trace. De nombreux sites proposent l'éditions de traces GPS mais leur mode d'édition est souvent limité et ne respecte pas certaines données comme les temps ou les altitudes. Nous voudrions avoir * une visualisation de la trace sur le carte avec choix du fond de carte; * une visualisation du dénivelé de la trace avec la possibilité de sélectionner les points également sur cette zone ; * un mode de sélection des points efficaces, visuellement propre afin ensuite de n'appliquer les traitements que sur les points sélectionnés; * rééchantillonnage des points sélectionnés (plus ou moins de points); * annulation possible d'une opération; * insertion/Suppression de points ou groupe de points; * déplacement de groupes de points; * chargement, sauvegarde; * des outils qui garantissent un respect des temps et des altitude de passage à chaque point. * import/export de traces provenant de Strava ([[https://developers.strava.com/docs/reference/#api-Routes-getRouteAsGPX|API Strava]]) Une deuxième partie du sujet pourra porter sur la visualisation de grande quantité de traces GPS, comme par exemple [[https://www.strava.com/heatmap#7.00/-120.90000/38.36000/hot/all|la visualisation mondiale des traces des sportifs]]. =====AM5. Animation de visages pilotée par une capture de mouvement ===== ^ Domaines | Synthèse d'images | ^ Techniques et langages | OpenGL / C++ ou webGL ou C#/Unity | ^ Responsable du sujet || | | Alexandre Meyer | ^ Informations à voir || | || Les deux grandes familles de techniques pour déformer un maillage sont le mélange de formes (blendshape) ou le skinning. A priori, dans ce sujet nous nous orienterons vers la technique de blendshape. La technique de blendshape consiste à mélanger des maillages 3D de visages afin d'obtenir des expressions différentes. Par exemple, à partir de 4 maillages représentants différents expression (joie, colère, peur, surprise) le blendshape créera un nouveau maillage en faisant la moyenne pondérée des 4 visages de références. Cette technique poura être mise en oeuvre en C++ en partant du code que vous avez utilisé en L2 "Introduction à l'informatique graphique" ou en utilisant le framework de jeu vidéo Unity (au choix par groupe). Le pilotage de l'animation du visage se fera en capturant les mouvements de points caractéristiques d'un visage filmé avec une webcam en utilisant DLib (python ou C++). ===== FR1. Classification par arbre de décision et forêt aléatoire ===== ^Domaine | Classification, Machine Learning | ^Langage (proposé) | C++, java | ^Responsable du sujet || | | Fabien Rico | ^Informations à voir || | [[http://eric.univ-lyon2.fr/%7Ericco/cours/supports_data_mining.html | Ensembles de cours datamining (cf *Arbre de décision* et *Random Forest*)]] || La classification automatique est un domaine où on cherche à apprendre à reconnaitre la classe d'individus à partir d'exemples. Une technique parmi les plus efficaces est basée sur la construction d'un grand nombre d'arbres de décision (ce qu'on appelle forêts aléatoires). En effet, l'expérience montre que si on construit suffisamment de classifieurs différents entre eux mais efficaces, le fait de décider en fonction de la majorité des classifieurs permet d'obtenir résultat très bon. Le but de votre projet est d'implémenter un algorithme classique de construction d'une forêt. Pour cela il faut : - implémenter la construction d'un arbre de décision à partir d'un jeu de données d'exemples; - implémenter un système permettant de générer un grand nombre d'arbres de décision; - mettre en place un système de test permettant de mesurer la qualité de vos algorithmes. Votre logiciel devra être capable à partir d'un fichier d'exemple dans un format simple (CSV) de construire un modèle. Puis à partir d'un modèle et d'un fichier de test dans le même format de trouver les classes des objets. == Améliorations== Les améliorations possibles de votre travail pourront porter sur les différentes optimisations ou adaptations de l'algorithme à des cas spécifiques, sur l'amélioration du temps de calcul et du coût mémoire de votre programme. Vous pourrez aussi ajouter des prétraitements pour résoudre les cas ou les données sont lacunaires ou ajouter une interface graphique au programme. ===== FR2. Site de travail colaboratif ===== ^ Domaine | administration système | ^ Technologie | Docker | ^ Responsable du sujet | Fabien Rico | ^ Information à voir || | https://owncloud.org/ || | https://rocket.chat/ || | https://fr.wordpress.org/ || Le but de ce travail est de créer un script d'installation d'un site de travail collaboratif. Ce site est basé sur plusieurs composant * [[https://owncloud.org/|owncloud]] qui permettra le partage de documents; * [[https://rocket.chat/|rocketchat]] qui permettra les discussions en lignes. * [[https://fr.wordpress.org/|wordpress]] (ou autre chose) qui permettra de créer un site web classique; Ces composants devront de plus s'appuyer sur un système d'authentification unique (ldap?). Pour simplifier l'installation automatique de l'ensemble, vous devrez utiliser des conteneurs //docker//. Le résultat de votre travail doit être une archive et un script dont l'exécution permettra d'installer l'ensemble des composant et de les faire communiquer. ==Amélioration== Il y a un grand nombre de composants annexes pouvant être ajouter : webmail, forge, système d'authentification CAS/OpenIDConnect ... Il est aussi possible d'ajouter des modules utiles au composants proposé : conférence vidéo pour rocketchat, édition de documents pour owncloud ... ===== FR3. Mise en place de cluster de calcul parallèle ===== ^ Domaine | administration système| ^ Techniques | Docker, machines virtuelles | ^ Responsable du sujet || | | Fabien Rico | ^ Information à voir || | https://www.docker.com/ || | http://spark.apache.org/ || Pour gérer de grands volumes de données, plusieurs //framework// ont été développés. //Spark// est l'un d'entre eux, il permet de définir des programmes dont les calculs seront facilement et efficacement distribués sur un cluster. Mais ces cluster doivent être créés. Vous devez créer un système capable de mettre en place un cluster spark et de lui soumettre des tâches de calcul. Le système que vous allez développer pourra utiliser un outil comme //docker-machine// pour créer des machines virtuelles dans une plateforme de //cloud computing// (celle du département), puis les conteneurs //dockers// pour lancer les différentes parties du cluster de calcul. Enfin, il soumettront les tâches au cluster pour obtenir leurs résultats. ===Amélioration=== * utilisation d'une plateformes de //cloud computing// publique (AWS, Azure, ...) * utilisation d'autres //frameworks// (hadoop) * interface web de gestion ===== FR4. Mise en place d'un site web ===== ^ Domaine | web | ^ Langage | php | ^ Responsable du sujet | Fabien Rico | ^ Information à voir || | http://laravel.com/ || | http://symfony.com/ || Le but de ce sujet est de mettre en place un site web avec une partie visible (front) et une partie d'administration (backend). Le sujet du site est encore indéterminé (et des idées sont les bienvenues). Il devra comporter une part de programmation importante (ne pas uniquement installer un CMS). Il devra comporter un système de gestion des utilisateurs, des droits, de modification du front... ==Amélioration== Selon la difficulté technique de certaines parties du site : * authentification web basée sur openid connect, ou CAS; * lien avec les réseaux sociaux ===== FR5. Reconstitution d'un plan à partir de photos aériennes ===== ^Domaine | Image | ^ Bibliothèque | opencv | ^Responsable du sujet || | | Fabien Rico | | | Alexandre Meyer | ^Informations à voir || | || A partir de photographie aériennes prises par un drone, vous devez reconstituer l'image planes de la totalité de la zone survolée. Pour cela, il faut trouver des points d’intérêts dans les images voisines et appliquer une déformation pour les faire coïncider. == Améliorations== Les améliorations de ce travail porterons sur l'interface de ce logiciel qui permettra de manière plus ou moins automatique de corriger ou détecter les erreurs ou de manipuler les paramètres de l'algorithme.