jueves, 1 de diciembre de 2016

Kinect v2 en Linux con CUDA 7.5


  • Descargar los fuentes

$ git clone https://github.com/OpenKinect/libfreenect2.git
$ cd libfreenect2


  • Herramientas para compilar

$ sudo apt-get install build-essential cmake pkg-config

Dependencias

$ sudo apt-get install libusb-1.0-0-dev
$ sudo apt-get install libturbojpeg libjpeg-turbo8-dev
$ sudo apt-get install libglfw3-dev

Problema: OpenCL con beignet-dev elimina opencl de nvidia-opencl-dev => no instalar, instalar el de nvidia

Para generar la documentación es necesario tener también:

$ sudo apt-get install doxygen

de lo contrario se marcará el error:
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
al configurar con cmake.

  • Habilitar driver de nvidia

$ sudo apt-get install nvidia-cuda-toolkit

  • Descargar el .deb para Ubuntu 15.04 de la página oficial y extraer el .deb con los ejemplos (samples), sale un data.tar.gz, extraerlos de ahí e instalar ejemplos

[No recuerdo para qué utilizé la linea siguiente, pero en instalaciones siguientes no la he necesitado]
$ grep -rl "CUDA_PATH ?= /usr/local/cuda" ./ | xargs sed -i 's:CUDA_PATH ?= /usr/local/cuda:CUDA_PATH ?= /usr:g'


$ sudo apt-get install libva-dev libjpeg-dev
$ sudo apt-get install libopenni2-dev

No logreé que funcionara el código para OpenNI.

Build


  • Modificar en CMakeLists:

CUDA_INCLUDE_DIRECTORIES(
      "${MY_DIR}/include/"
      "[path_to]/CudaSamples/NVIDIA_CUDA-7.5_Samples/common/inc"    #"${CUDA_TOOLKIT_ROOT_DIR}/samples/common/inc"
      "${NVCUDASAMPLES_ROOT}/common/inc"
    )

$ mkdir compile
$ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/Programacion/libfreenect2/build/freenect2 -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES"
$ make
$ make install
$ make doc

Copiar las reglas de udev:

sudo cp platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

Probar con los demos, como Protonect, sí funciona.

OpenCV

$ sudo apt install libav-tools

$ cmake -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON3_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python3.5m -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/blackzafiro/.local/lib/python3.5/site-packages/numpy/core/include -DINSTALL_PYTHON_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=/home/blackzafiro/Descargas/Programacion/opencv/opencv-3.1.0/build ..

OpenCV 3.1.0

Compilar versión estable

Cada vez que compilo OpenCV, configurarlo es todo un triunfo.  Pero uso muchas dependencias, por lo que mejor anoto aquí lo usual:

Aunque existe una página con el procedimiento y es útil pasar por ahí primero, aquí dejo mi acordeón.

Dependencias

libgtk-3-dev        ?
libgtk2.0-dev
libqt4-dev

libvtk6-dev
libopenni-dev

libav-tools
libavcodec-dev
libavformat-dev
libswscale-dev

libjpeg-dev
libpng-dev
libtiff-dev
libjasper-dev

libdc1394-22        # Caḿaras IEEE
libdc1394-22-dev

libtbb2             # Paralelismo
libtbb-dev

libgtkglext1-dev

python3-dev
python3-numpy
python-dev
python-numpy

nvidia-cuda-dev
nvidia-cuda-gdb
nvidia-cuda-toolkit

Configurar y compilar

Editar el archivo cmake/FindCUDA.cmake:

Cambiar la línea 711:

711 PATHS "/usr/lib/nvidia-current" "/usr/lib/nvidia-361"

de modo que la segunda dirección se la del driver de nvidia, donde se encuentra el archivo libnvcuvid.so.  Dara algunas advertencias, pero funciona como debe.

En la línea 799 insertar:

799 if(CUDA_VERSION VERSION_GREATER "7.0")

800   find_cuda_helper_libs(nvcuvid)

801 endif()
Otra opción es indicar el directorio de este archivo a cmake, como se indica a continuación.

$ mkdir compile
$ mkdir build
$ cd compile
$ cmake -DCMAKE_INSTALL_PREFIX=</home/...> -DWITH_OPENGL=ON -DWITH_QT=ON -DWITH_VTK=ON -DWITH_OPENNI=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m -DINSTALL_PYTHON_EXAMPLES=ON -DCUDA_cublas_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libcublas.so -DWITH_CUBLAS=ON -DWITH_NVCUVID=ON -DCUDA_nvcuvid_LIBRARY:FILEPATH=/usr/lib/nvidia-367/libnvcuvid.so ..

ó

$ cmake -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DCMAKE_INSTALL_PREFIX:PATH= -DWITH_IPP=ON -DWITH_CUBLAS=1 -DWITH_OPENGL=ON -DWITH_NVCUVID=ON ..
$ make -j 3
$ make install

Aparecerá una advertencia por haber agregado '/usr/lib/nvidia-367'.

Ojo: Qt y Vtk no se llevan, aunque puse ambas opciones arriba, elegir sólo una.

Con ffmpeg local

Para utilizar ffmpeg compilado localmente, antes de  realizar los pasos siguientes:
$ export LD_LIBRARY_PATH=/home/.../ffmpeg.../build/lib
$ export PKG_CONFIG_PATH=/home/.../lib/pkgconfig:$PKG_CONFIG_PATH
$ export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/home/.../build/lib