Scan 3D

De Wiki d'activités IMA
Révision datée du 28 novembre 2012 à 14:27 par Dgloria (discussion | contributions) (Etat de l'art)

Introduction

Dans le cadre de la cinquième année nous avons pour consigne de réaliser un projet en rapport avec notre formation. Nous avons choisi de travailler sur le projet du Scan 3D car nous sommes tous les deux intéressé par l'utilisation des capacités de la Kinect.

Ce projet est un projet industriel en lien avec la société Oxylane. Au sein de cette dernière, beaucoup de prototypes ont été réalisés sans passer préalablement par une phase de conception 3D. Ce sont des prototypes uniques, des objets difficilement duplicables. De plus en plus de concepteurs, de designers et de chercheurs aimeraient pouvoir continuer à travailler sur ces objets physiques dans le monde virtuel. Oxylane cherche donc un moyen de scanner ces objets sans passer par des équipements très coûteux.

Présentation du projet

Ce projet consiste donc de réaliser un prototype de scanner 3D en utilisant la Kinect, permettant de transformer des objets réels en forme 3D. Les besoins les plus forts concernent actuellement les casques de vélo et les chaussures.

Cependant avant de se lancer directement dans le scan 3D, nous devons tout d'abord étudier ce qu'il est possible de faire actuellement avec la Kinect. De nombreux documents sont là pour nous aider ainsi qu'une base de logiciel permettant le scan 3D : Kinect Fusion (KinFu).

Etat de l'art

De nos jours, la volonté de reconstruire la géométrie à l'aide de capteurs actifs, de caméras passives ou d'images en ligne sont des points très étudiés dans la recherche en informatique graphique et vision. L'utilisation de caméra à infrarouges est très étendue et de nombreuses sociétés créent leur propre caméra utilisant cette technologie (Microsoft avec la Kinect, Asus avec son Asus Xtion, ou encore Leap de Leap Motion). Alors que les caméras de profondeur ne sont pas totalement nouvelles, Kinect a fait de ces capteurs, des capteurs accessibles à tous. La qualité de la détection de profondeur, étant donné la nature à faible coût et en temps réel de l'appareil, est convaincante et a en fait le capteur instantanément populaire auprès des chercheurs et des amateurs. La Kinect de Microsoft est donc l'une des plus populaires et des plus abordables.


Microsoft a eu la volonté d'améliorer les compétences de sa Kinect et il s'est attardé sur la possibilité, avec KinectFusion, de créer rapidement et en temps réel une reconstruction 3D d'une scène d'intérieur. Pour ce faire, la caméra Kinect utilise une technique structurée lumière [8] pour générer des cartes de profondeur en temps réel contenant des mesures de distances discrètes de la scène physique. Ces données peuvent être projetées comme un ensemble de points discrets 3D (ou nuage de points). Même si les données de profondeur Kinect sont convaincantes, en particulier par rapport aux autres appareils de profondeur disponibles dans le commerce, il existe toujours du bruit. Les mesures de profondeur fluctuent souvent et les cartes de profondeur contiennent de nombreux «trous» où la lecture n'a pas été obtenue.

Installations, Découverte de Kinect Fusion

Lors des 4 premières séances de projets que nous avons pu faire, nous nous sommes intéressé à l'installation et à l'utilisation des OpenSources de Kinect Fusion. Voici les différents outils que nous avons eu besoin d'installer pour faire fonctionner la Kinect et l'Open Source sur un Linux.

Installation de OpenNi, Nite, SensorKinect

  • Installer OpenNi Unstable
    • Pré-requis
       Obligatoires :
               1) GCC 4.x
                 apt-get install g++
               2) Python 2.6+/3.x
                apt-get install python
               3) LibUSB 1.0.x
                apt-get install libusb-1.0-0-dev
               4) FreeGLUT3
                apt-get install freeglut3-dev
               5) JDK 6.0
                apt-get install openjdk-6-jdk
       Optionel (Pour la documentation):
               1) Doxygen
                 apt-get install doxygen
               2) GraphViz
                  apt-get install graphviz
    • Installation
       cd ~/OpenNi/Platform/Linux/CreateRedist
       chmod +x RedistMaker
       ./RedistMaker
       cd ~/OpenNi/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.4.0
       su
       ./install.sh
  • Installation de SensorKinect :
       cd ~/SensorKinect/Platform/Linux/CreateRedist
       chmod +x RedistMaker
       ./RedistMaker
       cd ~/SensorKinect/Platform/Linux/Redist/Sensor-Bin-Linux-x64-v5.1.2.1
       ./install.sh

Installation de la PCL Expérimentale

Obligatoire :

  • cmake
apt-get install cmake
  • Boost ≥ 1.46
apt-get install libboost-all-dev
  • Eigen ≥ 3.0
apt-get install libeigen3-dev
  • FLANN ≥ 1.7.1
apt-get install libflann-dev
  • VTK ≥ 5.6
apt-get install libvtk5-dev


Installation

cd ~Pcl/trunk
mkdir build && cd build && cmake ..
make
make install

Utilisation de KinFu LargeScale

  • d'après le tutoriel :

http://pointclouds.org/documentation/tutorials/using_kinfu_large_scale.php

  • ./bin/pcl_kinfu_largeScale -r -et
  • ./bin/pcl_kinfu_largeScale_mesh_output world.pcd
  • Fusionner les mesh générés avec MeshLab et l'exporter dans KinFuSnapshots
  • ./bin/pcl_kinfu_largeScale_texture_output KinFuSnapshots/merged_mesh.ply

Utilisation de KinFu App

Nous nous sommes ensuite attardé sur cette partie de KinFu et nous nous sommes rendu-compte qu'elle permet de scanner un objet en 3 dimensions et d'en faire facilement le tour. Nous récupérons ensuite le scan dans un fichier .ply exploitable par le logiciel MeshLab. Voici les commandes que nous devons taper pour le faire fonctionner :

  • cd ~/trunk/build/bin
  • ./kinfu_app
  • Une fois le programme lancé, on peut observer dans la fenêtre View3D from ray tracing le mesh 3D en cours de la Kinect
  • Appuyer succéssivement sur A dans la fenêtre Scene Cloud Viewer pour ajouter le mesh en cours au mesh que l'on souhaite exporter.
  • Appuyer sur 7 pour exporter le mesh de la fenêtre Scene Cloud Viewer dans un fichier PLY


Plusieurs options sont disponibles dans kinfu_app, notamment l'option -volume_size <size_in_meters> qui permet de réduire le champ de vision de la kinect en profondeur

Réunion du 12 novembre avec Oxylane

Nous avons rencontré lors de cette réunion le responsable du service innovation de Oxylane. Nous lui avons montré nos avancements dans les tests de Kinect Fusion et nous nous sommes mis d'accord sur les trois points d'études suivants :

  • Etude des limites du programme Kinect Fusion (avantages, inconvénients, ajouts de fonctionnalités possibles).

Etudier le principe de fonctionnement de l'Open Source KinFu de Kinect Fusion et se rendre compte de ce qu'il est possible de faire ou de ne pas faire avec le programme (textures, couleurs ...)

  • Tests avec la Kinect de bureau pour améliorer la précision.

Pouvoir donner une idée de que l'on peut faire et ce que l'on peut améliorer avec une Kinect de bureau plutôt que la Kinect Xbox.

  • Tests pour la création d'un scénario complet de scan d'un casque de vélo.

Ce test permettrait de mettre l'accent sur les points bloquants lors d'un scan d'un objet quelconque (éventualité d'isoler l'objet de son environnement par exemple). Ce test nous permettra aussi de prendre du recul sur les outils disponibles et sur la réalité des compétences qu'ont besoin d'avoir ceux qui voudraient utiliser une kinect pour faire du scan 3D.

Réalisations

Etude appronfondie du fonctionnment de Kinect Fusion

Une fois les différents premiers tests effectués, nous avons voulu savoir comment fonctionner KinFu. Pour cela, nous avons tout d'abord cherché sur Internet quelques recherches et nous sommes tombés sur ce site expliquant de manière globale le fonctionnement de Kinect Fusion : [http://www.tumblr.com/tagged/kinfu ]

Afin de détecter la profondeur des objets présents dans la scène, Kinect Fusion utilise la caméra infra-rouge de la kinect. Un projecteur infrarouge projette une lumière invisible sur la scène. Il a été spécialement conçu pour projeter les points à la manière d'un laser de telle sorte que les points ne se dilatent pas avec la distance. Cette lumière est lu par la caméra infrarouge. Une fois que ce schéma est lu par la caméra infrarouge, le programme Kinect Fusion recherche des corrélations. Si il en trouve,le processeur dans le kinect est alors en mesure d'utiliser cette information pour trianguler la position 3D des points.