Archives de catégorie : Kinect

Faire fonctionner une Kinect sur Ubuntu (à partir de 12.10) avec OpenNI et SensorKinect

Addendum 03/06/2014

Je viens d’apprendre que OpenNI venait d’être fermé le 23/04/2014 dernier après l’acquisition de PrimeSense par Apple. Bien que je trouve particulièrement honteux de la part d’Apple de mettre la main sur des technologies libres et de les enlever de la main des bidouilleurs et des chercheurs qui en faisaient usage, les codes sources sont toujours disponibles sur les dépôts github que je donne dans cet article. La question est : pour combien de temps ?

Je vous recommande donc de les sauvegarder rapidement, car il n’est pas impossible que ces dépôts soient fermés de force dans peu de temps. Le code source est libre mais plusieurs composants ne le sont pas, ce qui empêche n’importe qui de les distribuer comme il le souhaite.

Dans le cadre de mes recherches, je suis amené à effectuer des acquisitions avec divers capteurs, tels que des caméras, des stéréoscopes, et également Kinect. Comme mon environnement de travail est Ubuntu, cet article va parler de l’installation de tout le nécessaire pour le fonctionnement de Kinect sous cette distribution.

Pourquoi cet article ?

Parce qu’au long du parcours nécessaire pour parvenir à faire fonctionner ce capteur sous Linux, je suis tombé sur un bon nombre d’articles sur des blogs et des wikis, assez souvent relativement anciens. Or, les librairies ont rapidement évolué ces derniers mois (nous sommes en Janvier 2014 quand j’écris ces lignes) et bien souvent, les tutoriels ne sont plus à jour. C’est pourquoi j’ai choisi d’en faire un à mon tour, qui sera plus à jour que les autres car un jour ou l’autre, je devrai installer Kinect sur un autre ordinateur et je n’aurai plus à chercher comment faire.

En plus, si ça peut servir à d’autres personnes, tant mieux !

De quoi a-t-on besoin ?

Kinect sous Linux nécessite au minimum 2 librairies pour fonctionner :

  • OpenNI : cette librairie contient un certain nombre d’applications qui permettent de traiter les flux provenant de la Kinect. Elle doit iêtre installée en premier. A l’heure où j’écris, la version est 1.5.7.10.
  • SensorKinect : il s’agit du pilote, qui permet à l’ordinateur de dialoguer avec la Kinect à travers le port USB. A l’heure où j’écris, la version est 5.1.2.1.

Également, pour certaines applications, le middleware NiTE qui permet notamment de localiser des membres du corps, visages, squelettes 3D, etc. Comme je n’en ai pas eu besoin, je ne traiterai pas l’installation de ce soft dans cet article (je le mettrai cependant à jour si je décide de l’installer).

Dépendances

Avant de commencer, il est nécessaire d’installer certaines librairies des dépôts Ubuntu.

1
sudo apt-get install build-essential g++  python libusb-1.0-0-dev freeglut3-dev openjdk-6-jdk doxygen graphviz git-core

Cette commande couvre l’ensemble des dépendances pour OpenNI et SensorKinect (SensorKinect n’a en fait surtout besoin que de freeglut3-dev et de libusb-1.0-0-dev).

Télécharger les librairies

Commençons par créer un répertoire Kinect/ dans notre home.

1
2
mkdir ~/Kinect 
cd ~/Kinect

C’est dans ce répertoire que nous allons télécharger les codes sources nécessaires.

Cloner le dépôt git d’OpenNI

Nous allons utiliser le dépôt git d’OpenNI afin d’avoir une version la plus à jour possible. Une fois le dépôt cloné, nous switchons sur la branche unstable, car cette version est nécessaire pour la compilation du driver ensuite.

1
2
git clone https://github.com/OpenNI/OpenNI.git
git checkout unstable

Cloner le dépôt git de SensorKinect

Nous allons faire exactement la même chose, avec cependant quelques remarques préalables.

Si vous avez déjà lu quelques tutoriels, vous aurez remarqué que le dépôt git officiel est celui de l’utilisateur avin2 (https://github.com/avin2/SensorKinect.git). Cependant, j’ai rencontré de grosses difficultés pour compiler ce driver sous Ubuntu, même en utilisant la branche unstable. Du coup, j’ai pu trouver un autre dépôt qui fournit une version compilable, qui est celle de l’utilisateur ph4m. Allons-y.

git clone https://github.com/ph4m/SensorKinect.git
git checkout unstable

Compiler les librairies

Nous allons maintenant compiler OpenNI et SensorKinect, dans cet ordre.

Compiler OpenNI

cd ~/Kinect/OpenNI/Platform/Linux/CreateRedist/
chmod a+x RedistMaker
sudo ./RedistMaker

Le script RedistMaker compile et prépare le package d’OpenNI. Cette opération prend évidemment quelques minutes. Si la compilation échoue, remontez le terminal et vérifiez que la cause n’est pas une dépendance non satisfaite par exemple.

Normalement, si tout s’est bien déroulé, un dossier OpenNI/Platform/Linux/CreateRedist/Final/ sera créé. S’il n’existe pas et/ou ne contient pas une archive tarball, c’est que la compilation a échoué.

Un dossier OpenNI/Platform/Linux/Redist/ a également été créé. Il contient la librairie compilée que nous allons maintenant installer.

cd ../Redist/OpenNI-Bin-Dev-Linux-x**-v1.5.7.10/
chmod a+x install.sh
sudo ./install.sh

Suite à l’exécution de ce script, la librairie OpenNI est installée. Passons à SensorKinect.

Compiler SensorKinect

On procède quasiment de la même manière pour le pilote :

cd ~/Kinect/SensorKinect-unstable/Platform/Linux/CreateRedist/
chmod a+x RedistMaker 
sudo ./RedistMaker

Un peu d’attente en attendant la compilation… Pareil que pour OpenNI, vérifiez bien que la compilation se déroule sans souci. Une fois que c’est terminé, on installe :

cd ../Redist/Sensor-Bin-Linux-x**-v5.1.2.1/
sudo ./install.sh

C’est terminé pour la compilation.

Tester

Commencez par brancher la Kinect sur un port USB. Pour tester, nous allons essayer un programme sample de OpenNI.

cd ~/Kinect/OpenNI/Platform/Linux/Bin/x**-Release/
./NiViewer

Normalement, vous devriez voir les 2 flux d’images (profondeur/RGB) de la Kinect. A partir de là, vous pouvez faire tout ce que vous voulez, votre Kinect est opérationnelle.

Erreurs possibles

Si, en revanche, vous avez une erreur « Failed to set USB interface« , alors il reste une petite étape.

En fait, SensorKinect installe un module nommé « gspca_kinect » dans le kernel. Ce module permet à Ubuntu d’utiliser la Kinect comme une caméra standard afin de l’utiliser avec une application « classique ». Aussi, ce module est en conflit avec OpenNI lorsqu’il essaie d’accéder à la Kinect (source : https://groups.google.com/forum/#!topic/openni-dev/LZpcyCfh9UE)

Donc, il suffit de supprimer ce module :

sudo modprobe -r gspca_kinect

Pour régler le problème même après le redémarrage de l’ordinateur, vous pouvez aussi le blacklister. Personnellement, je n’ai pas eu à le faire.

sudo sh -c 'echo "blacklist gspca_kinect" &gt; /etc/modprobe.d/blacklist-<wbr />kinect.conf'