OpenCV en Linux

OpenCV en Linux
opencv3

OpenCV (Open Source Computer Vision Library) es una biblioteca de código abierto que incluye varios cientos de algoritmos de visión por computador. Esta publicada bajo una licencia BSD, lo cual permite que sea usada libremente para propósitos comerciales y académicos. Es multiplataforma, existiendo versiones para Windows, GNU/Linux, Mac OSX, iOS y Android. Así como también, podemos encontrar interfaces para C, C++, Java y Python.

Posee una estructura modular, estando agrupadas la mayoría de funciones de la biblioteca en los siguientes módulos:

  • CORE: donde se defienen las estructuras de datos básicas que utilizan el resto de modulos.
  • IMGPROC: módulo de procesamiento de imágenes, donde encontraremos funciones para el filtrado lineal/no lineal, transformaciones afines, conversión del espacio de color, histogramas....
  • VIDEO: modulo de análisis de video que incluye algoritmos para la estimación del movimiento, extracción del fondo y seguimiento de objetos.
  • CALIB3D: Algoritmos básicos de visión multiple como calibración de camaras estereo, correspondencia o reconstrucción 3D.
  • FEATURES2D: detectores de características, descriptores y comparadores.
  • OBJDETECT: detección de objetos e instancias de las clases predefinidas, como por ejemplo: caras, ojos, gente, coches....
  • HighGUI: todo lo relacionado a la interfaz grafica de OpenCV y las funciones que permiten importar imágenes y video.
  • GPU: algoritmos acelerados por hardware para distintos modulos OpenCV.
  • y algunos otros modulos de ayuda.

Cabe decir que es una biblioteca con muchas posibilidades y con una amplia comunidad de desarrolladores. Por lo que, aunque es compleja utilizar, normalmente encontraremos soporte y ayuda para cualquier problema que podamos tener.

Vamos a ver como instalarla en Linux.

Instalación con apt-get

Si tenemos una versión actualizada de Ubuntu esta es la opción mas sencilla y rapida, ya que en las ultimas versiones de Ubuntu (a partir de la 12.04) o Debian podemos instalarla directamente desde apt-get.

Primero actualizamos: sudo apt-get update sudo apt-get upgrade y una vez estemos a la última podemos instalar la biblioteca en sí con: sudo apt-get install libopencv-dev Para poder usarla con Python necesitaremos instalar el siguiente paquete: sudo apt-get install python-opencv Por último, podemos bajarnos la documentación y algunos ejemplos de aplicaciones ya hechas con: sudo apt-get install opencv-doc Como veis no tiene más complicación. A partir de aquí podemos probar algunos de los ejemplos que encontraremos en la documentación de OpenCV.

Compilando e instalando las OpenCV

En el caso de que trabajemos con una versión de Ubuntu más antigua o con otro tipo de distribución Linux y no tengamos disponible el paquete, tendremos que compilar e instalar OpenCV nosotros mismos en nuestra máquina.

Herramientas

Antes de nada necesitamos una serie de herramientas imprescindibles:

  1. build-essential (GCC 4.4.x)
  2. cmake 2.6 o superior (CMake es una herramienta multiplataforma de automatización de código)
  3. pkg-config (para manejar los flags del compilador, usado en la configuración)

sudo apt-get install build-essential sudo apt-get install cmake sudo apt-get install pkg-config Si queremos usar las OpenCV con Python y trabajar de manera mas avanzada con las imagenes que procesemos, deberíamos también instalar los siguientes paquetes:

  1. libgtk2.0-dev (archivos de desarrollo para la biblioteca de interfaces de usuario GTK+. Este es el backend por defecto para highgui)
  2. python-dev (paquete de desarrollo para Python 2.6 o superior)
  3. python-numpy (Numpy)
  4. python-tk

Los instalaremos con: sudo apt-get install libgtk2.0-dev python-dev python-numpy Ahora vamos con los paquetes que se utilizan para leer y escribir imagenes o video en distintos formatos y mostrarlos en ventanas. No es necesario instalarlos, y de no hacerlo OpenCV usará las versiones por defecto que vienen con la biblioteca, pero en el caso de que algún modulo no funcione puede deberse a que no tiene el codec para leer el video o algún problema relacionado con la falta de alguno de estos paquetes. sudo apt-get install libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev

Código fuente

Una vez tengamos todo listo procedemos con la descarga del código de OpenCV. Podemos obtenerlo de la web oficial o directamente desde Sourceforge. Las ultimas versiones ahora también están en GitHub. Cogemos el que más rabia nos de:

GitHub:

git clone https://github.com/Itseez/opencv.git cd opencv ó Sourceforge: wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.5/opencv-2.4.5.tar.gz tar xzvf opencv-2.4.5.tar.gz cd opencv-2.4.5

Compilación

Ahora vamos a generar el makefile que define que partes de OpenCV necesitan ser compiladas. Ten en cuenta que la sintaxis de CMake es:cmake [<parametros opcionales>] <ruta al código fuente>; Creamos el directorio build y entramos: mkdir build cd build Ahora configurarmos todo con lo que vayamos a trabajar de esta biblioteca y generar el makefile: cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. Comprueba que esto no te da ningún error. En caso de que sí, retrocede e instala los paquetes extra y ejecuta cmake de nuevo. Ahora es momento de ir a por un café mientras compilamos OpenCV. Simplemente lanzamos make: make Por último, para instalar la biblioteca ejecutamos: sudo make install Este último paso no es necesrio si usamos CMake en nuestros proyectos. Si no quieres instalarla en /usr/local, puedes usarla desde donde la has compilado.

Configuración

Ahora vamos a configurar la ruta a OpenCV. Esto se especifica creando un archivo llamado "opencv.conf" en el directorio "/etc/ld.so.conf.d/". En este archivo añadiremos en una nueva linea /usr/local/lib. sudo gedit /etc/ld.so.conf.d/opencv.conf # y añadimos /usr/local/lib y configuramos la biblioteca ejecutando: sudo ldconfig -v Esto crea los enlaces y el cache necesarios para las bibliotecas más recientes que se encuentren en los directorios especificados en los archivos de /etc/ld.so.conf/(en este caso OpenCV) Otra opción es exportar la ruta a la variable de entorno LD_LIBRARY_PATH y enlazar dinamicamente con ldconfig export LD_LIBRARY_PATH=~/usr/local/lib/:$LD_LIBRARY_PATH sudo ldconfig y en el caso de que no hayamos instalado OpenCV en "/usr/local/lib", que se encuentre en por ejemplo "~/OpenCV-2.4.5/build" export LD_LIBRARY_PATH=~/opencv-2.4.5/build/:$LD_LIBRARY_PATH sudo ldconfig Como último paso nos queda establecer la variable de entorno PKG_CONFIG_PATH. Así que editamos "bash.bashrc": sudo gedit /etc/bash.bashrc y añadimos: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig Ahora cierra la consola y abre una nueva, reinicia el ordenador o haz logout y despues login de nuevo. De otra manera la configuración que acabamos de añadir en "bash.bashrc" no se cargará.

Probando

Vamos a probar algún ejemplo que viene con el código. Para ello, primero nos vamos al directorio donde hayamos descomprimido OpenCV. cd ~/opencv*/samples/c En este directorio encontramos varios ejemplos en C para las OpenCV. Para compilarlos todos usamos el script "build_all.sh". chmod +x build_all.sh ./build_all.sh Y probamos uno cualquiera como. ./facedetect lena.jpg El programa deberá mostrar la siguiente imagen:

Esto es un ejemplo de detección facial con la famosa imagen de Lena. Si tenemos cámara en el ordenador podemos llamar simplemente al programa sin pasarle ningún parametro y ver que hace: ./facedetect En el proximo post os hablaré de como instalarlas y configurarlas en Mac OSX. Los pasos a seguir son muy parecidos, de hecho el mismo código que usamos para linux nos vale para Mac. Un saludo