Kinect2012
Sommaire
- 1 Liste du matériel
- 2 Présentation
- 2.1 Avancement du projet
- 2.1.1 Objectifs suggérés par les encadrants
- 2.1.2 Réalisations concrètes
- 2.1.3 Séances
- 2.1.3.1 Séance du 08/02/2012
- 2.1.3.2 Séance du 13/02/2012
- 2.1.3.3 Séance du 15/02/2012
- 2.1.3.4 Séance du 20/02/2012
- 2.1.3.5 Séance du 22/02/2012
- 2.1.3.6 Séance du 07/03/2012
- 2.1.3.7 Séance du 12/03/2012
- 2.1.3.8 Séance du 14/03/2012
- 2.1.3.9 Séance du 19/03/2012
- 2.1.3.10 Séance du 21/03/2012
- 2.1.3.11 Séance du 28/03/2012
- 2.1.3.12 Séance du 04/04/2012
- 2.1.3.13 Séance du 05/04/2012
- 2.1.3.14 Séance du 11/04/2012
- 2.1.3.15 Séance du 16/04/2012
- 2.1.4 Résultats
- 2.2 Rapport
- 2.1 Avancement du projet
Liste du matériel
Présent
- Kinect
A acheter
Présentation
Ce projet a pour objectif de mettre en place un système de choix d'appareil en espace commercial. Il s'agit, sur la base d'un système existant, d'améliorer le système de sélection des produits afin de le rendre plus ergonomique, de pouvoir le paramétrer plus simplement (par un vendeur), eventuellement d'augmenter le nombre de gestes reconnaissable. La situation d'usage pressentie est une catégorie de vente de produits difficilement déplacable par un client, pour des raisons de poids (par exemple un appareil de musculation) ou de taille (par exemple une tente).
Avancement du projet
Objectifs suggérés par les encadrants
- Objectif principal : Améliorer un dispositif de sélection d'articles par gestes
- Objectifs détaillés :
- Passer à la nouvelle version du SDK
- Enlever la calibration du squelette
- Interface pour un utilisateur lambda
Réalisations concrètes
Séances
Séance du 08/02/2012
- Récupération des sources stables de OpenNI,PrimeSense Sensor Module for OpenNI et NITE
- Installation des dépendances requises pour installer OpenNI, PrimesSense et NITE d'après les README
- Compilation des sources
- Essais de compilation de quelques samples en java pour reconnaitre une personne ou une main
- Erreurs dans la compilation => Manque de fichiers JAR ?
Séance du 13/02/2012
- Installation terminé, la Kinect fonctionne et est reconnue.
- Installation de SensorKinect à la place de PrimeSense Sensor qui n’était pas le driver associé à la kinect (avin2-SensorKinect-faf4994)
- Test des samplesfournis avec OpenNi
Séance du 15/02/2012
- Création d'un makefile pour compiler nos projet cpp
- Prise en main de Simpleread (profondeur, largeur, hauteur)
- Développement d'un petit soft "salut ça va" en fonction juste de la position en x,y,z qui marche entre 500 et 800 mm de profondeur
(en dirigeant la main en haut à gauche, le terminal affiche "Salut !", en dirigeant la main en haut à droite, le terminal affiche"ca va")
Séance du 20/02/2012
- Récupération du projet de l'an passé ainsi que le rapport rapport de l’an dernier
- Installation de librairie SDL
- Modification du Makefile afin de pouvoir compiler le projet sur un PC
- Test du programme => fonctionne mis à part petit problème de résolution sur l’image d’instruction
- Regarder les exemples de NITE => rien de concluant pour le moment
- Sur le projet de l’an dernier => pas forcément besoin de psy pose pour calibration mais calibration néanmoins nécéssaire.
Séance du 22/02/2012
- Résolution du problème d'affichage du programme de l’ancien projet, test du programme.
- Calibration automatique avec la nouvelle version de nite (doc, sans “psi” pose)
? comment intégrer Player-sample au projet ?
Séance du 07/03/2012
- Réinstallation compléte de OpenNi, Nite, KinectSensor, ainsi que leurs dépendances respectives et des librairies nécessaires à l'ancien projet car changement d'ordinateur...
- Problème pour lancer les Sample de OpenNi :
Open failed: Failed to set USB interface! Press any key to continue . . .
Résolution : rmmod gspca_kinect
- Création du Makefile pour déveloper avec Nite (Makefile à executer dans Sample Tests du dossier de Nite)
- Aucune idée sur comment aborder l'intégration de NITE au projet de l'an dernier...
Séance du 12/03/2012
- Fonction pour sauvegarder et charger des squelette vers / depuis un fichier trouvée et en attente de test faute de kinect accessible.
Séance du 14/03/2012
- Ajout de la fonction permettant de sauvegarder un squelette
- La fonction de chargement d’un fichier de squelette nous retourne une erreur :
Function was not implemented!
Séance du 19/03/2012
- Bloqué à Loadcalibrationdatatofile
- Confirmation de Laurent Grisoni, ces fonctions ne sont plus implémenter. Il faut installer une version de NITE antérieur pour pouvoir les utiliser.
Séance du 21/03/2012
- Installation de libmagick++-dev pour manipuler des images
- Création du programme permettant de prendre une image et un fichier texte en paramètre
l’image peut être un article du magasin tel qu’une tente, le texte correspond à la description de l’article précédemment cité.
Compilation et utilisation :
- gcc -o image image.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs`
- ./image
Impossible d'ouvrir le fichier ! Utilisation : ./image nomImage.xxx nomFichier.xxx
- ./image tente.JPG description_tente.txt
Séance du 28/03/2012
Réflexions quant à une réelle amélioration du projet :
- Pouvoir calibrer la position d'un objet dans un environnement 3D. Pour l'instant les objets sont définis statiquement dans un tableau du programme. Si on veut changer l'objet de place, il faut que le développeur entre dans les sources et recompose le projet.
- Faire une interface graphique simple en qt en partant un projet/exemple dans qt creator. Cette interface est surtout écrite en qml. Il s'agit d'une grille de rectangle contenant chacun une image. On pourrait ainsi faire un menu avec deux rectangle :
•un menu catalogue •un menu qui lance le projet de l'an passé
Dans le catalogue on aurait une liste de filtres : sport, randonné, camping etc et les images des objets à vendre par décathlon dans une grille de rectangle.
L'exemple dont je parle plus haut est navigable entièrement avec les flèches du clavier. Aussi, on pourrait simuler l'appui sur une touche directionnelle des qu'un mouvement spécifique est reconnu par nite.
Travail réalisé lors de la séance :
- Compréhension du placement des items et de comment le modifier dans le cadre du programme que nous voulons créer. (itemsset.cpp, itemsset.hpp)
- Révision du programme de création des images (presque terminé)
- Le vendeur pourra bientôt, depuis le programme principal de la Kinect, afficher ses 8 images/textes, qu'il aura au préalable placés dans un dossier spécifique. Le programme est appelé lors de de l'initialisation du tableau d'items
Séance du 04/04/2012
- Exemple pour utiliser la Kinect comme une souris trouvé
http://www.keyboardmods.com/2010/12/howto-use-kinect-as-mouse-in-linux.html Ce programme permet de simuler le déplacement d'une souris sous linux via la librairie ioinput
- Adaptation du code pour simuler les touches d’un clavier :
gestes reconnus :
- swipe left associé à la touche gauche
- swipe right associé à la touche droite
- swipe up associé à la touche haut
- swipe down associé à la touche bas
Problème : dès qu’un mouvement est reconnu, exemple swipe left, alors le curseur se ballade vers la gauche sans s’arrêter.
- Commencement de la programmation de l’interface à partir d’un exemple sur QTcreator en Qt Quick (focus), pour l’instant possibilité de mettre plusieurs noms rentrés a la main dans une liste, ainsi que différentes images nommées de la façon suivante: “<nom>+(index+1)+<.extension>”.
- En attente d’une solution pour associer une grille d’image différente pour chaque instance de cette liste.
Projet d’interface pouvant être lancé depuis n’importe quel ordinateur sur lequel QTCreator est installé.
Séance du 05/04/2012
- Problème d’appui long sur les touches résolu, mais touche entrée (push) et steady toujours pas reconnus.
Séance du 11/04/2012
- Le programme reconnait maintenant l’appui sur la touche entrée quand on fait le mouvement push.
- Tentative d’implémenter la combinaison de touche LEFTALT+TAB pour changer de fenêtre mais inefficace. Pourtant le mouvement Circle qui lui est associé est bien reconnu.
Séance du 16/04/2012
- Interface opérationnelle sous linux. Problème : reconnaissance des gestes hasardeuse …
- Le programme qui reconnaît les mouvements de la main est capable de lancer en tâche de fond l’interface graphique
- A faire :
- Lier les 2 projets ainsi que le programme utilisant la librairie imagemagick
- Surtout : Comment revenir du projet de l’an passé à celui de cet année : dessiner un cercle avec la main qui enverrait un signal pour tuer le processus ?
- Le context menu :
- Aide sur comment utiliser l’interface ?
- Lancer le projet de l’an passé (javascript?)
- Il faut étoffer aussi le catalogue car pour l’instant, il n’y a que 3 élement dans la liste => télécharger et classer des articles depuis le site de décathlon (faute de base de donnée en ligne)
Résultats
- Le programme principal:
- On le lance et il lance l'interface graphique créée avec QT dans un fork et il gère la Kinect dans le même temps.
- En faisant un cercle avec la main, on peut passer au programme créé lors du projet de l'an dernier, lorsque l'on fait ce mouvement, le programme principal tue le processus de l'interface et lance celui de l'ancien projet à l'aide d'un nouveau fork.
- De même, lorsque le projet de l'an dernier est lancé, un mouvement circulaire de la main permet de revenir à l'interface.
- Le programme de l'interface:
- On peut naviguer avec le clavier (Touches Haut,Bas,Droite,Gauche pour se déplacer et Tab pour valider) ou en faisant des mouvements avec la main reconnus par la Kinect et le programme(On pousse pour Tab(Push), on bouge la main dans la direction souhaitée pour se déplacer)
- Une aide sur l'utilisation peut être affichée si l'on va a gauche de la liste du catalogue.
- Le programme détecte lorsque l'utilisateur a fini un mouvement et est revenu dans sa position initiale en envoyant le signal de touche y pressée, autorise un autre mouvement et affiche le contour de l'objet selectionné en rouge lorsque c'est le cas.