archive:sujets21pr

Sujets, 2020/2021 Printemps

Domaines Optimization, CSP, graphes
Langages conseillés Prolog/Python/Java/Bash
Librairies conseillés Choco/Gecode/NetworkX
Responsable du sujet Rafael Tubino
E-mail rafael.ramos-tubino (at) univ-lyon1.fr

Le but de ce projet est de réaliser une applcation capable d’optimiser le associations des plantes dans une parcelle de potager.

En se basant sur les bonnes et mauvaises combinaison de legumes, il va falloir établir un score et trouver ainsi les dispositions les plus indiquées. En plus de l'objectif principal, nous allons nous intéresser à la conception d’une interface graphique, la création des parcelles par l'utilisateur (disposition des carrés), édition des associations de plantes et visualisation des parcelles.

Pour la réalisation de ce projet, on fera l’ulitisation d’un langage logique (prolog), ou d’un solveur (ex: Choco (Java), Gecode (C++), python-constraint(python)).

Domaines Big Data, Data Science
Langages conseillés Python, Bash
Technologies utilisées NetworkX, Neo4j
Responsable du sujet Rafael Tubino
E-mail rafael.ramos-tubino (at) univ-lyon1.fr

En étudiant les données de la blockchain de Bitcoin nous nous trouvons face à une énorme quantité d'information nécessitant d'être traîté. La préparation de ces données pour qu'elles soient utilisées lors des études est une tache très longue et parfois complexe à faire.

Ce projet vise la création d'une application capable de croiser/filtrer certaines des ces informations, en générant des données prêtes à être analysées/utilisées. Les langages utilisés seront Python et/ou Bash et le traitement se fera à partir des fichiers JSON et CSV.

Domaines Modélisation géométrique
Langages/Logiciel OpenSCAD, Cura
Responsable du sujet Rafael Tubino
E-mail rafael.ramos-tubino (at) univ-lyon1.fr

OpenSCAD permet la modélisation paramétrique de modèles 2D/3D. Très utilisé pour la génération de modèles pour l'impression 3D car sa nature permet la customisation des modèles à des différents besoins. Plusieurs modèles réalisés avec OpenSCAD peuvent être trouvés sur Thingiverse [1].

Contrairement à d'autres logiciels de CAO, la modélisation sur OpenSCAD se fait à l'aide d'un langage de programmation. Le but de ce projet est de implementer une bibliothèque permettant la réalisation d'objets complexes. Les choix des détails de la bibliothèque seront faits avec l'étudiant pour pouvoir mieux adapter le projet à son goût.

[1] https://www.thingiverse.com/tag:openscad

Techniques Manipulation d'images (matrices), interface graphique
Responsable du sujet Matthieu Moy
Informations à voir Sujet et consignes détaillés

La photo numérique ouvre beaucoup de possibilités en terme de post-traitement d'image. Nous nous intéresserons ici à la gestion du contraste, avec plusieurs familles de traitements :

  • La base : ajustement du contraste global. Il s'agit simplement d'appliquer une fonction affine à chaque pixel. Le réglage de la balance des blancs est similaire, en appliquant simplement un coefficient multiplicateur différent sur chaque canal (rouge, vert, bleu).
  • Gestion des ombres et lumières : rehausser les parties sombres de l'image, assombrir les parties surexposées.
  • Gestion du contraste local : faire ressortir les détails (les contours par exemple) sans modifier le contraste global

Le sujet est très libre, et pourra explorer plusieurs (mais pas forcément toutes) des pistes suivantes :

  • Développement des algorithmes en C++ (ou éventuellement C).
  • Prototypage/développement d'une solution en utilisant Python et les bibliothèques skimage, NumPy et SciPy.
  • Optimisations de performances (éviter de refaire plusieurs fois le même calcul, optimiser l'ordre de parcours des matrices pour limiter les défauts de cache), parallélisation.
  • Interface graphique pour rendre le résultat agréable à utiliser par un utilisateur non-informaticien.
  • Utilisation d'une bibliothèque pour lire des images au format RAW qui offrent plus de possibilités de retouches.
Techniques Génie logiciel, gestion de version
Responsable du sujet Matthieu Moy (Co-encadrement possible avec Gabriel Radanne)
Informations à voir Sujet et consignes détaillés

Le but du projet est de participer à un projet « de la vraie vie » (un logiciel activement développé, ayant déjà un bon nombre d'utilisateurs, …). Un bon moyen d'atteindre cet objectif est de contribuer à un logiciel libre.

Contribuer à un logiciel libre est en particulier un bon moyen d'aborder sur des cas réels les questions comme :

  • La revue de code par des tiers,
  • L'utilisation poussée d'un gestionnaire de versions,
  • L'application stricte de styles de codage,
  • Les tests automatisés,
  • L'utilisation des mailing-lists comme outil de communication et d'entre-aide.

Un effet de bord intéressant est qu'avoir du code à soi dans un projet libre permet de briller en société ;-) (plus sérieusement : c'est un vrai point important sur un CV).

Voir le sujet détaillé pour plus d'informations.

Pour simplifier la gestion des sujets, indiquez dans votre choix à quel logiciel vous voulez contribuer :

  • MM2 Contribution à un logiciel libre : Firefox
  • MM3 Contribution à un logiciel libre : MechanicalSoup
  • MM4 Contribution à un logiciel libre : Forge logicielle Tuleap
  • MM5 Contribution à un logiciel libre : Git
  • MM6 Contribution à un logiciel libre : autre
Techniques calcul sur des entiers de taille quelconque (C++, Python ou autre), authentification, signature
Responsable du sujet Matthieu Moy

Les algorithmes de chiffrement asymétrique sont devenus très importants dans le domaine informatique. RSA est l'un des plus connus et se base sur l'utilisation de grand nombres premiers. L’intérêt de ces algorithmes est qu'ils permettent un échange d'informations chiffrées entre des entités qui ne partagent aucun secret au départ.

En effet, les algorithmes symétriques sont bien plus robustes (pour une même taille de clef), mais ils nécessitent avant de commencer d'échanger un secret entre les acteurs. Pour un serveur public dont le nombre de clients est très important, il n'est pas possible de mettre en place un canal pour échanger ce secret autrement qu'en utilisant le réseau internet. On utilise donc les algorithmes a clef publique pour sécuriser les premiers échanges et mettre en place une session sécurisée.

Vous devez implémenter l'algorithme RSA, c'est à dire :

  1. générer la clef;
  2. chiffrer avec la clef publique et déchiffrer avec la clef secrète;
  3. chiffrer avec la clef secrète et déchiffrer avec la clef publique (pour signer).

Attention, l'algorithme RSA en lui-même est relativement simple, mais implémenté naïvement il n'est pas sûr (par exemple, l'utilisation de nonce, nombre aléatoire, pour compléter le message à chiffrer est indispensable pour empêcher les attaques par force brute).

Améliorations

Comme amélioration vous pourrez :

  • implémenter d'autres algorithmes de chiffrement (par exemple un algorithme de chiffrement symétrique comme AES);
  • créer un petit logiciel de connexion à distance sécurisé.
Domaines Data Science, Machine Learning, data visualization…
Librairies (proposées) scikit-learn, seaborn, bokeh, etc.
Langages (proposé) Python, javascript, etc.
Responsable du sujet Rémy Cazabet

L'objectif de ce projet est de développer une interface (python, site web…) pour la recommendation de contenus (films, musique ou autre). Concretement, il vous faut un jeu de données qui associe (via des likes, des notes, des étoiles, des vues…) des utilisateurs à des contenus, ou d'autres informations riches. Ces données peuvent être utilisées pour apprendre quels médias peuvent plaire à quelles personnes. Mon idée première est de créer une carte auto-organisée à l'aide de machine learning (Exemple), puis de montrer à l'utilisateurs les “régions” qu'il aime sur cette carte, à partir d'une liste de media qu'il aime. Il existe de nombreux jeux de données pour les musiques, et pour les films, mais certainement sur d'autres sujets également. D'autres techniques de recommendation peuvent être utilisées (deep learning, etc.), me contacter pour préciser.

Domaines Machine Learning, python, developpement logiciel,…
Librairies (proposées) cdlib, networkx, scikit-learn, seaborn, etc.
Langages (proposé) Python
Responsable du sujet Rémy Cazabet
Informations à voir http://cazabetremy.fr/Teaching/LIFPROJET.html

La librairie python CDlib (Community Detection library) est une librairie spécialisée dans le problème de la détection de communautés dans les graphes, un problème équivalent à celui du clustering mais pour des données de type graphe. Il s’agit de la principale librairie du domaine, avec plus de 100 téléchargements individuels par mois. Je suis l’un des 3 principaux contributeurs de cette librairie. Le sujet de ce POM consiste à contribuer à la librairie, par exemple en y ajoutant de nouveaux algorithmes, en corrigeant des bugs, en améliorant le code ou la documentation, etc. Il y a 2 aspects: 1)Aspect “machine learning”, puisqu’il faudra se plonger dans domaine du machine learning, le clustering de graphe, 2)Un aspect développement logiciel, puisqu’il faudra comprendre le fonctionnement d’une librairie python, de la génération automatique de documentation, et coder avec un niveau de qualité suffisant pour intégrer du code à une librairie utilisée par des centaines de personnes.

Références: -Code de la librairie: https://github.com/GiulioRossetti/cdlib -Documentation: https://cdlib.readthedocs.io/en/latest/ -Liste d’améliorations possible identifiées: https://github.com/GiulioRossetti/cdlib/projects/2

Domaines Machine Learning (“Intelligence Artificielle”)
Librairies (proposées) scikit-learn, keras, tensor-flow…
Langages (proposé) Python, autre
Responsable du sujet Rémy Cazabet
Informations à voir Challenges Kaggle en cours

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. Vous pouvez consulter quelques projets précédents sur ma page http://cazabetremy.fr/Teaching/StudentsProduction.html.

Domaines Dataviz, data science, génie logiciel, logiciel libre
Librairies https://tnetwork.readthedocs.io, https://docs.bokeh.org, matplotlib,…
Langages (proposé) python, javascript
Responsable du sujet Rémy Cazabet
Informations à voir https://tnetwork.readthedocs.io,https://github.com/TiphaineV/streamfig/blob/master/all_examples.pdf

tnetwork https://tnetwork.readthedocs.io est une librairie python permettant de manipuler des graphes dynamiques. Cette librairie orientée recherche a été développé par des membres de l'équipe DM2L du LIRIS, en particulier moi-même. L'objectif de ce projet sera de créer un outil de visualization de graphes dynamiques en s'inspirant du formalisme graphique utilisé ici : https://github.com/TiphaineV/streamfig/blob/master/all_examples.pdf. Cependant, de manière à pouvoir visualiser des gaphes de grande taille, la visualisation sera interactive : cliquer sur un nœud doit pouvoir réorganiser le graphe pour montrer les contacts avec ses voisins, on doit pouvoir zoomer une partie du graphe, etc.

Domaines Big Data, Data Science, Génie logiciel, complexité
Langages (proposé) python, C++, autre
Responsable du sujet Rémy Cazabet

Dans le domaine de l'analyse de données (Data Science), nous sommes souvent confrontés à de très gros fichiers de données, pouvant peser des centaines de Mo, contenant des données dans un format simple, de type csv. Le problème est que ce type de fichier ne peut pas être ouvert avec des application de type tableurs ou même des éditeurs de texte. L'objectif sera de développer une application légère mais puissante optimisée pour charger de tels fichiers. Il s'agira d'utiliser des astuces, par example, ne charger d'abord que les premières lignes, les analyser, puis charger à la volée ce que l'utilisateur souhaite afficher. Dans l'idéal, l'application devrait également permettre de faire des transformations simples (ajouter une colonne, changer le caractère séparateur, etc.) avec une interface ergonomique. L'application de regex serait un objectif plus avancé.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce projet est de proposer une modélisation distribuée d’un jeu stratégique. Nous prendrons comme exemple le tactical RPG. Nous considérerons des personnages qui évoluent sur un environnement dynamique. Les personnages appartiennent à plusieurs groupes. Les personnages peuvent se déplacer en même temps selon des règles préétablies. Nous implémenterons une méthode de résolution distribuée avec des entités autonomes dotée de comportements intelligents. Nous commencerons par définir des stratégies de résolution simples dans lesquelles les personnages effectuent des déplacements uniquement sur la base de leur perception. Dans une deuxième étape, nous définirons des stratégies de résolution plus fines permettant aux personnages de construire des stratégies de jeu collectives en interagissant avec leur voisinage. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Les récentes évolutions technologiques des dernières années ont permis d’améliorer le niveau d’équipement des véhicules rendus de plus en plus connectés, voire autonomes, ce qui permet de proposer de nouvelles réponses aux problèmes du trafic urbain. Les véhicules sont, à présent, capables de communiquer et de se coordonner. Avec notre projet, nous proposons une approche de régulation du trafic s’appuyant sur des méthodes distribuées pour améliorer les conditions de mobilité des véhicules.

Dans le cadre ce travail, nous implémenterons la méthode de régulation que nous avons définie à l’échelle de l’intersection tirant parti des capacités de communication des véhicules, et dans laquelle les véhicules autonomes négocient leur droit de passage dans chaque intersection. Cette négociation s’effectue en utilisant des mécanismes prédéfinis en s’appuyant sur les données de mobilité de chaque véhicule et en permettant ainsi de prendre en compte différents critères pour la prise de décision locale, comme l’état général du trafic, la localisation d’éventuelles congestions, ou encore la circulation des bus, les trajets programmés par les véhicules, etc. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Nous allons développer un système automatique pour le partage efficace de tâches entre des drones autonomes capables de collaborer pour l’exploration d’un territoire. Le système doit prendre en compte les contraintes de navigation des drones, les contraintes environnementales, etc. L’objectif de la coordination entre les drones est de minimiser les coûts d’exploration en termes d’énergie par exemple. Nous considérerons une résolution distribuée et nous testerons ainsi différentes méthodes.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Plusieurs projets urbains innovants d’ilots autonomes tels que le projet du groupe Bouygues-construction pour la gestion intelligente de l’énergie traitent du problème du partage dynamique de l’énergie avec son réseau de communication énergétique et un système de stockage par des batteries de nouvelle génération directement installées dans les bâtiments. Ce projet vise à équiper les foyers avec de nouveaux dispositifs intelligents pour éprouver des solutions originales pour les futurs réseaux de distribution. Il cible l’ouverture des réseaux et l’exploitation automatique des îlots. L’évolution actuelle de ces ilots est renforcée grâce au développement de nouvelles batteries de stockage à fort potentiel et à faibles coûts, et au transfert intelligent de l’énergie entre les ilots avec un câblage interne indépendamment des systèmes de distribution classiques. Ce transfert permet d’envisager une adaptation de la consommation de manière locale, i.e., à l’échelle d’un quartier, en réduisant les coûts et les pertes du transport de l’énergie.

Pour accompagner le développement de ce projet, une solution pour la gestion du surplus d’énergie s’est inscrite en direction des véhicules autonomes solution de stockage et d’usage intelligent de l’énergie renouvelable. Ce modèle de fonctionnement requière l’installation de bornes de rechargement communicantes au niveau des ilots autonomes permettant aux résidents et aux non-résidents de l’ilot d’accéder au surplus d’énergie produite dans ces ilots moyennant une participation financière mais avec un coup d’achat de cette énergie relativement inférieur à celui appliqué par les fournisseurs standards. La gestion de l’énergie doit ainsi être reformulée comme un problème de planification où l’énergie fournie est considérée comme une ressource partagée et intermittente dont l’usage doit être régulé et optimisé par ce nouveau système intelligent. L’objectif de ce projet est ainsi d’implémenter une méthode de résolution qui permet aux véhicules de se recharger auprès des bornes intelligentes et de contrôler dynamiquement les interactions entre les véhicules autonomes et les bornes. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

La conduite en peloton est un mode de conduite collaborative où les véhicules forment des groupes ou le premier véhicule, dit le véhicule meneur, est piloté par un conducteur humain ou un programme ; les autres véhicules suivent de manière automatique leur prédécesseur sachant que chaque conducteur peut garder le contrôle de son véhicule. Les véhicules sont directement interconnectés par un réseau sans-fil et échangent des informations en temps réel sur un réseau ad hoc dédié. Cette formation présente de nombreux avantages, notamment de sécurité puisque la signalisation du meneur est automatiquement retransmise aux autres véhicules. Par exemple, si un des véhicules du peloton effectue un freinage d’urgence alors tous ceux qui le suivent freineront instantanément, ainsi le risque de carambolage est réduit. La communication inter véhicules peut alors être utilisée pour pallier au problème de stabilité des pelotons, et leur permet un certain niveau d’organisation interne.

Le rôle de l’étudiant est de formaliser et d’implémenter un ensemble de comportements nécessaires à un véhicule autonome pour qu’il puisse former des pelotons pendant son trajet sans devoir modifier son itinéraire.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce projet est de proposer une méthode distribuée pour l’affectation des places de stationnement à des véhicules intelligents. Le rôle de l’étudiant est de formaliser et d’implémenter l’ensemble des comportements nécessaires aux véhicules pour interagir avec les parkings et négocier le tarif de stationnement qui est décidé dynamiquement en tenant compte d’un ensemble d’information, telles que la durée du stationnement, le profil de l’usager, le taux d’occupation du parking, le créneau horaire, etc.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Dans le cadre de ce projet, nous étudierons la consommation énergétique d’un véhicule électrique intelligent. Nous examinerons un ensemble de méthodes pour planifier dynamiquement la trajectoire du véhicule en tenant compte à la fois de la consommation prédite, des contraintes de mobilité des véhicules, de l’occupation des voies, etc. Chaque véhicule est modélisé dans le système par un agent intelligent. Nous définirons les comportements des véhicules et proposeront le modèle d’interaction pour supporter les interactions entre les véhicules et l’infrastructure.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Le football est un jeu stratégique complexe dans lequel se mêlent les stratégies individuelles des joueurs et les stratégies collectives des groupes. Dans ce projet, nous proposerons une modélisation distribuée de ce jeu. Nous implémenterons l’environnement du jeu avec l’ensemble des personnages. Nous proposerons des comportements de jeu simples pour les joueurs. Nous implémenterons et testerons les algorithmes correspondants.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Ce projet est une variante du projet SA8 qui porte sur le jeu du football. En plus de la modélisation distribuée du jeu à proposer, nous nous intéresserons particulièrement au problème de la formation des groupes de joueurs sur le terrain. Nous définirons les critères de formation de ces groupes et les algorithmes correspondants ensuite nous les testerons.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce projet est de proposer une modélisation distribuée d’un jeu stratégique. Nous prendrons comme exemple une variante du jeu de dames. Dans ce jeu, les pièces peuvent se coordonner et communiquer pour mettre en œuvre des stratégies collectives. Elles peuvent effectuer différents mouvements parallèles selon des règles prédéfinies et exhiber différents comportements (tels que des attaques de groupes simultanées). Nous testerons différentes règles de jeu et implémenterons les stratégies collectives.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Nous utiliserons des modèles de négociation automatique pour la mise en place de sites marchands intelligents. Chaque site dit “vendeur” propose plusieurs items ou produits avec des indications sur les propriétés des items (ex. prix min,…). Un utilisateur peut spécifier, à un site dit “acheteur”, l’item qu’il recherche, ses propriétés ainsi que les contraintes et les préférences associées à cet item. Le site acheteur se chargera alors de mener les négociations automatiques avec les sites vendeurs proposant cet item. Le travail demandé consiste à modéliser les différents comportements de négociation automatique pour la vente et l’achat des items. Nous définirons les protocoles d’interactions et de négociation correspondants. Nous implémenterons et testerons l'ensemble des mécanismes à proposer.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce travail est de proposer un planner automatique pour la livraison intelligente de marchandise. Nous allons considérer un ensemble de véhicules de livraison chacun ayant des propriétés spécifiques (ex. poids maximum à transporter, niveau d’autonomie, …). Chaque véhicule possède une liste de tâches à accomplir dans la journée. Il doit planifier l’ordre d’exécution de ses tâches de manière dynamique et parer à tout événement pouvons se produire dans son environnement (ex. blocage ponctuel d’une voie). Nous proposerons une modélisation distribuée dans laquelle chaque véhicule possède des connaissances de son environnement et peut interagir avec les autres véhicules et l’infrastructure. Il décide individuellement de ses actions et peut adapter ses comportements de manière dynamique. Nous implémenterons et testerons un ensemble de mécanismes pour garantir cette interaction et adaptation aux événements imprévus.

Domaines Image Processing / Deep Learning(IA) / Interaction
Techniques et langages Python / PyQt
Responsable du sujet Alexandre Meyer
Niveau de difficulté intermédiaire

L'objectif de ce projet est d'explorer les possibilités qu'offre les réseaux de neurones à traiter des images. Il y a deux grandes pistes qui peuvent être explorées. D'abord la classification d'images qui cherche à reconnaitre un objets à partir de sa photo, c'est à dire à lui donner un label : le nom de la personne, le type d'objet, un caractère pour la reconnaissance d'écriture, des informations sur des images satallitaires ou médicales, etc. Le deuxième aspect est l'édition ou la génération de nouvelles images. Un réseau peut apprendre à modifier, voir à générer une nouvelle image après avoir “appris” sur une base d'images du même type.

Par exemple, les auto-encoders sont une classe d'algorithme basée sur les réseaux de neurones profonds qui transforment un jeu de données (des images pour nous) en une représentation latente (cachée) que l'on nomme un code. Ils sont composés d'un encodeur qui produit le code et d'un décodeur qui repasse du code à la données d'origine (l'image). Une piste pour ce sujet serait de construire cet auto-encoder sur une classe d'images puis d'offrir à l'utilisateur des curseurs pour éditer le code tout en lui montrant l'image décodé. En allant plus loin, il est également envisageable d'explorer les GAN (Generative Adversarial Network) pour produire une nouvelle image … Le domaine est vaste.

GANs vs. Autoencoders: Comparison of Deep Generative Models GAN — Some cool applications of GANs.

Domaines Animation/Interaction/Jeu vidéo
Techniques et langages C# / Unity
Responsable du sujet Alexandre Meyer
Difficulté Raisonnable / Intermédiaire

Les approches classiques d'animations d'un personnage virtuel dans un jeu vidéo sont en utilisant des clips d'animations. Ces clips peuvent être produit par un animateur, provenir de capture de mouvements ou être généré procéduralement. En pratique, les 3 approches sont souvent mélangées. L'idée de ce sujet est d'explorer la famille de techniques de génération procédurale. A partie de données comme la longueur du pas, l'algorithme pourra produire les positions de pieds sur le sol, ainsi qu'une trajectoire de vol entre chaque contact. En phase avec la trajectoire des pieds il est possible de produire une trajectoire du bassin. Le reste du corps pourra être déduit par de la cinématique inverse.

Unity semble être une bonne plateforme pour ceci car il propose un certains nombres d'outils intégrés : un algorithme de ray-casting pour trouver l'interection entre un rayon et la surface du sol (point de contact du pied), un algorithme de cinématique inverse pour générer la position du corps en fonction des positions des pieds, etc.

Il est possible de travailler uniquement sur l'animation ou d'inclure ces mouvements dans un jeu vidéo : jeu de sport, jeu de combat, voir “plateformer” ou exploration d'un monde. L'équipe du projet peut se partager entre les dévelopeurs du jeu qui déplaceront un personnage non animé dans un 1er temps et incluront l'animation procédurale au fur et à mesure.

Domaines Image Processing
Techniques et langages Python ou C++/OpenGL ou C#/Unity
Responsable du sujet Alexandre Meyer
Difficulté Sujet progressif

L'objectif de ce projet est de développé un algorithme capable de transférer le mouvement d'un visage d'une personne filmé vers une autre personne. La capture de l'animation du visage source se fera en détectant les points caractéristiques d'un visage filmé avec une webcam en utilisant DLib (python ou C++).

Un premier prototype se fera en générant une nouvelle position de marqueurs de visage puis en réalisant un warping (déformation) de l'image du visage cible. Une interpolation par RBF (ou autre) semble une solution réalisable.

Ce warping pourra s'etendre dans 2 directions - vers la déformation d'un maillage 3D, probablement en utilsant Gkit (le code de LIFGRAPHIQUE en L2); - vers une éformation 2D plus réaliste en utilisant les réseaux de neurones (GAN).

Domaine Algorithme évolutionniste, simulation physqiue, méta heuristiques, optimisation, moteur physique
Langage C++ ou python avec BulletPhysics; Ou C# avec Unity; etc.
Responsable du sujet Fabien Rico et Alexandre Meyer
Information à voir
http://jvf.free.fr/550_Articles_LinuxMag/GLMF_076_034_041.pdf
https://www.youtube.com/watch?v=JBgG_VSP7f8
https://www.youtube.com/watch?v=m4E9sj9vH1I

Les algorithmes évolutionnistes ou génétiques sont des méta-heuristique d'optimisation c'est à dire des méthodes globales pour résoudre des problèmes de toutes sorte qu'il faut adapté à un problème particulier. Comme leur nom l'indique, ils sont basés sur le concepts d'évolution. On génère une famille aléatoire d'individu dont on conserve les plus performant, que l'on mélange pour générer une nouvelle famille …

Une idée classique de ce choix de projet est d'appliquer ces algorithmes évolutionnistes à un problème de génération de forme de créatures en cherchant à ce que ces créatures réalisent une tâche le mieux possible : par exemple la locomotion. Vous prendrez en main un moteur physique. L'algorithme évolutioniste proposera une série de créatures avec des morphologies différentes encodées par une séquence de “gènes” (un code). La simulation physique donnera une distance de déplacement que l'algo cherchera à maximiser.

L'implémetation peut se faire en C++ ou en python avec le moteur BulletPhysics; mais également en C# avec Unity.

Domaine Langage de programmation
Langage OCaml
Responsable du sujet Gabriel Radanne

Ce projet à pour but d'apprendre OCaml en pratiquant, via l'implémentation d'un projet complet!

OCaml est un langage fonctionnel statiquement typé. Il est utilisé pour des taches variées, de la construction de compilateurs jusqu'à la finance, en passant par la programmation Web ou les systèmes d'exploitation. OCaml est connu pour sa fiabilité et son expressivité, et est utilisé par de nombreuses entreprises (Facebook, Docker, Janestreet, …). Dans ce projet, vous apprendrez le langage OCaml en implémentant une application concrète choisi parmi la liste ci-dessous. Ce projet est ouvert aux étudiants ne sachant pas encore programmer en OCaml, l'apprentissage étant le but premier.

Je propose 4 projets, correspondant à des domaines variés. Les propositions des étudiants sont également bienvenues.

  • Un générateur de labyrinthe (Algorithmique, Graphique OU Web)
  • Un émulateur pour les jeux CHIP-8 (Système, Langages)
  • Un clone de `grep` en OCaml (Langages, Ligne de commande)
  • Un wiki en ocaml (Web)
  • Autre, à discuter
Domaine data-science, web
Langage Javascript
Responsable du sujet Gabriel Radanne

Dans ce projet, vous réaliserez une visualisation de données dans le navigateur avec la bibliothèque D3.js.

D3.js est une bibliothèque très connue qui permet de visualiser des données sous des formes très variées: cartographie, graphes, hierarchies, etc. Le but de ce projet est de vous initier à la collecte et la visualisation de données, et à l'utilisation de D3.js, via la construction d'une visualisation concrète sur le sujet de votre choix. Une première phase du projet est de collecter et de mettre en forme les données. Une deuxième étape est de programmer une visualisation interactive en javascript.

Le sujet de la visualisation est à discuter, voici quelques idées:

  • Performance des joueurs de foot de Ligue 1 au fil du temps
  • Trajectoire et position des satellites en orbite autour de la terre (via celestrak)
  • Un graphe de similarité pour les artistes musicaux (via Last.fm)
Domaine web, interface graphique
Langage Javascript
Responsable du sujet Gabriel Radanne

Ce projet à pour but d'implémenter un jeu de plateau multijoueurs entièrement du côté client.

Dans ce projet, on réalisera un jeu de plateau avec 2 joueurs ou plus, entièrement du coté du client avec Javascript. Le but est d'apprendre a faire des applications riches et interactives complètes, qui ne nécessite qu'un serveur minimal. L'interface utilisateur sera faite en Javascript via un framework de votre choix tel React.js ou Angular. Les communications entre joueurs se feront en P2P, sans passer par un serveur central, via la technologie WebRTC.

Voici quelques exemples de jeux qui peuvent être implémenté:

  • Othello, Blokus, …
  • Pictionnary, Codenames, …
  • Tron
  • Le jeu de plateau de votre choix (à discuter)
Domaines Informatique graphique, modélisation géométrique
Librairie CGAL
Langage C++
Responsable du sujet Guillaume Damiand
Informations à voir https://www.cgal.org/

L'objectif de ce projet est de générer une ville numérique de manière automatique. Contrairement à la plupart des représentations qui décrivent uniquement la surface extérieure des objets, on cherchera ici à décrire également les intérieurs (à un certain niveau de détail qu'il faudra fixer). On va par exemple représenter un bâtiments par des murs étant des volumes, des planchers, des toits, des portes et des fenêtres. On cherchera également à garantir la cohérence de la scène: les murs doivent se toucher (et pas s'inter-pénetrer), les bâtiments doivent être posés sur le sol… Pour décrire la ville, on utilisera la structure de données des “Linear cell complexes” [1] de CGAL [2], une importante bibliothèque C++ de géométrie algorithmique. Il faudra comprendre la structure de données, puis définir des opérations pour créer les briques de base et enfin combiner ces briques pour modéliser la ville.

[1] https://doc.cgal.org/latest/Linear_cell_complex/index.html [2] https://github.com/CGAL/cgal

Domaines Informatique graphique, Visualisation 3D
Librairies CGAL, Qt, SDL
Langage C++
Responsable du sujet Guillaume Damiand
Informations à voir https://www.cgal.org/

CGAL est une importante bibliothèque C++ de géométrie algorithme, distribuée en OpenSource [1]. Elle contient de très nombreux packages implémentant diverses structures de données et algorithmes. Les objets manipulés sont souvent des objets graphiques en 2D et 3D. Pour ces objets, des viewers existent permettant de les visualiser. Ce viewer se base sur Qt coté IHM et QGlViewer pour les aspects OpenGL. L'objectif de ce projet est d'améliorer ces viewers pour être plus génériques. L'objectif est triple: * permettre aux utilisateurs de facilement paramétrer l'affichage en fonction de leur besoins: changer la couleur des objets, afficher seulement certaines parties… * changer le mécanisme utilisé dans les viewers pour pouvoir combiner l'affichage de différents objets au sein d'une même scène * développer d'autres viewers en utilisant par exemple SDL ou Ogre, ou d'autres propositions En cas de succès, on pourra envisager de proposer le code développé pour intégration à CGAL.

[1] https://github.com/CGAL/cgal

Domaines Informatique graphique, modélisation géométrique
Librairie CGAL
Langage C++
Responsable du sujet Guillaume Damiand
Informations à voir https://www.cgal.org/

Dans ce projet, on va chercher à reconstruire un modèle numérique de la ville de Lyon à partir de nuages de points disponibles en open-data sur le site du Grand Lyon [1]. On utilisera pour cela la bibliothèque CGAL [2], une importante bibliothèque C++ de géométrie algorithmique. Cette bibliothèque possède de nombreuses structure de données et algorithmes pouvant nous aider à résoudre notre problématique. On pourra par exemple utiliser le package Polygonal Surface Reconstruction [3] qui reconstruit une surface polygonale à partir d'un nuage de points pour reconstruire progressivement les bâtiments, et les insérer itérativement dans le modèle global. D'autres solutions sont possibles et devrons être comparées. Le modèle final sera représenté par la structure de données des “Linear cell complexes” [4].

[1] https://data.grandlyon.com/jeux-de-donnees/nuage-points-lidar-2018-metropole-lyon-format-laz/donnees [2] https://github.com/CGAL/cgal [3] https://doc.cgal.org/latest/Linear_cell_complex/index.html [4] https://doc.cgal.org/latest/Linear_cell_complex/index.html

  • archive/sujets21pr.txt
  • Dernière modification: 2021/08/30 12:11
  • de remy