Directives d'installation pour OpenNI et OpenCV sur Linux ### Design III : Intégration ### Version Hiver 2014 ### Marc-André Gardner ### 0) Prérequis généraux Assurez-vous d'avoir au moins 12 Go d'espace libre et de ne pas être sur une machine virtualisée, configuration qui pose problème avec la Kinect. Sachez aussi que les téléchargements requis totalisent plus de 1 Go, et que la durée de la compilation est importante (particulièrement pour OpenCV). 1a) Installer les prérequis sous Fedora (testé sur Fedora 19 et 20) Dans un terminal, exécutez les commandes suivantes : sudo yum groupinstall "Development tools" sudo yum install libusb1-devel freeglut-devel cmake java-1.7.0-openjdk-devel clutter-gtk-devel gcc-c++ wget sudo yum install gstreamer-devel gtk2-devel libv4l-devel ant Si vous voulez utiliser le wrapper Python, exécutez également : sudo yum install python-devel numpy 1b) Installer les prérequis sous Ubuntu (testé sur 12.04 et 13.10) Dans un terminal, exécutez les commandes suivantes : sudo apt-get install build-essential libusb-1.0-0-dev freeglut3-dev libghc-gtk-dev sudo apt-get install git openjdk-7-jdk cmake doxygen ant sudo apt-get install libavcodec53 libavformat53 libavutil51 libswscale2 sudo apt-get install libswscale-dev libavcodec-dev libavformat-dev libavutil-dev Si vous voulez utiliser le wrapper Python, exécutez également : sudo apt-get install python-dev python-numpy 1c) Installer les prérequis sous ArchLinux Dans un terminal, exécuter les commandes suivantes : pacman -S cmake libusbx freeglut git doxygen jdk7-openjdk python2-numpy apache-ant 2) Télécharger et compiler OpenNI Dans un terminal, exécutez les commandes suivantes (les commentaires en rouge ne sont pas à copier) : cd git clone -b unstable https://github.com/OpenNI/OpenNI.git OpenNI_install cd OpenNI_install/Platform/Linux/CreateRedist ./RedistMaker # Sur ArchLinux, il faut d'abord modifier « python » pour « python2 » dans ce fichier cd ../Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.8.5 # Le chemin variera selon votre architecture, x86 ou x64 sudo ./install.sh cd git clone -b unstable https://github.com/ph4m/SensorKinect.git KinectDriver cd KinectDriver/Platform/Linux/CreateRedist ./RedistMaker # Peut prendre un certain temps cd ../Redist/Sensor-Bin-Linux-x64-v5.1.2.1 # Le chemin variera selon votre architecture, x86 ou x64 sudo ./install.sh 3) Compilation et installation de OpenCV Dans un terminal, exécutez les commandes suivantes (les commentaires en rouge ne sont pas à copier) : cd wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.8/opencv-2.4.8.zip unzip opencv-2.4.8.zip cd opencv-2.4.8/ mkdir build && cd build cmake .. -DWITH_OPENNI=ON #Vous pouvez vous assurer que la configuration est correcte en vérifiant si les lignes # OpenNI : YES (ver 1.5.8, build 5) # et OpenNI PrimeSensor Modules : YES # (/usr/lib/libXnCore.so) # sont présentes # Si vous souhaitez utiliser Python, vous pouvez également vous assurer que la # configuration est correcte en observant si les lignes suivantes sont présentes (peut légèrement différer) # -- Python: # -- Interpreter: /usr/bin/python2 (ver 2.7.5) # -- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.5+) # -- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.7.1) # Si vous voulez utiliser Java, exécutez la ligne suivante (le chemin peut être légèrement différent selon votre conf) export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ make -j 2 # Ajustez le chiffre selon le nombre de cœurs de votre ordinateur et patientez, ce sera long! sudo make install Attention! Désinstallez toutes les installations présentes de OpenCV avant de procéder à l'installation d'une nouvelle, en particulier celles installées à partir des dépôts de votre distribution (apt-get ou yum). Note : Il est fortement recommandé de redémarrer après l'installation, avant tout test, afin de permettre aux permissions Udev d'être propagées sur le système. Note : Des exemples introductifs sont présents (pour C, C++ et Python) dans le dossier opencv2.4.8/samples Note : Selon votre configuration, il se peut que vous obteniez des erreurs du genre : error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory Cette erreur est due au fait que les librairies sont installées dans /usr/local/lib, qui n'est pas reconnu par défaut par le linker. Dans ce cas, la solution recommandée est d'ajouter le chemin des librairies à la compilation. Par exemple, la commande compilation suivante : g++ houghcircles.cpp -o testcv -lopencv_core -lopencv_imgproc -lopencv_highgui devient : g++ houghcircles.cpp -o testcv -lopencv_core -lopencv_imgproc -lopencv_highgui -Wl,-rpath=/usr/local/lib Il est également possible de modifier la variable d'environnement LD_LIBRARY_PATH, par exemple en ajoutant la commande suivante à la fin du fichier ~/.bashrc : export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 4) Informations pour l'installation sur MacOS X Bien que nous ne supportions pas officiellement l'installation sur MacOS X, il a été rapporté que celleci était fonctionnelle. Il faut toutefois compiler OpenCV en utilisant LLVM-GCC42 Techniquement, la plupart des étapes énoncées ci-dessus restent les mêmes, sauf lorsque des chemins spécifiques sont utilisés (par exemple OpenNI_install/Platform/Linux/CreateRedist deviendrait OpenNI_install/Platform/MacOS/CreateRedist ou OpenNI_install/Platform/Darwin/CreateRedist ). Dans tous les cas, les README de OpenNI et de OpenCV contiennent plus de détails sur la procédure d'installation. 5) Quelques problèmes potentiels et leurs solutions Erreur de type « Failed to create depth generator : Failed to set USB interface » Assurez-vous que les modules noyau gspca_main et gspca_kinect ne sont pas chargés. Cela peut être vérifié très simplement en utilisant, dans un terminal, la commande : lsmod | grep gspca Si cette commande ne produit rien, c'est que la configuration est correcte. Sinon, il faut retirer ces modules (utilisez la commande rmmod) et, pour rendre la modification permanente, mettre le module sur une liste noire de modules à ne jamais charger. Cette procédure dépend de la distribution utilisée, mais est généralement très simple. Par exemple pour Ubuntu, voir la page : http://doc.ubuntu-fr.org/tutoriel/tout_savoir_sur_les_modules_linux#empecher_le_chargement_d_un_module Erreurs de permissions (permission denied...) Vérifiez que le fichier nommé /etc/udev/rules.d/55-primesense-usb.rules existe. Dans le cas contraire, refaites l'installation de OpenNI (l'étape sudo ./install.sh) ou ajoutez le manuellement, et redémarrez l'ordinateur. Image RGB déformée, ou avec seulement une ligne sur deux Ajoutez un court temps d'attente après l'initialisation. Par ailleurs, il peut être bon d'explicitement ignorer la première image renvoyée par la Kinect. Normalement, le problème n'est pas persistant dans le temps. Erreur d'importation avec Python (No module named cv2) Assurez-vous que les fichiers cv2.so et cv.py sont situés dans un dossier contenu dans la variable PYTHONPATH. Par exemple, ceux-ci sont souvent installés dans /usr/local/lib/python2.7/site-packages et, dans ce cas, on peut l'ajouter temporairement en préfixant la commande python, par exemple : PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages python monfichier.py Si cela est bien le problème, alors on peut rendre la modification permanente en l'ajoutant à la fin du fichier ~/.bashrc. Sinon, vérifiez l'installation de OpenCV, en vous assurant en particulier de la présence des lignes relatives à Python et numpy dans la sortie de Cmake (voir étape 3). Problème Python avec certaines constantes (Module objet has no attribute...) Assurez-vous d'utiliser une version d'OpenCV postérieure à la 2.4.3 (donc au minimum la 2.4.4), qui corrige ce problème qui a été remonté aux développeurs suite au cours de l'année passée. Problème lors de l'initialisation de la Kinect (Failed to enumerate production tree : Can't create any node of the requested type!) N'utilisez pas de système virtualisé pour gérer la Kinect, qui s'accommode bien mal des délais supplémentaires induits par la virtualisation sur le bus USB. Si ce n'est pas le cas, assurez-vous que la Kinect est bien reconnue (à l'aide de la commande lsusb, qui devrait lister les 3 périphériques composant la Kinect), et, le cas échéant, rebranchez la Kinect afin de recommencer son initialisation.