Una introducción a openCV, la biblioteca más conocida en visión artificial.

10 comments
OpenCV y yo nos conocimos hace algo más de dos años atrás. Había un proyecto que tenía que ver con la representación de objetos físicos arqueológicos en 3D para su catalogación y presentación en un sitio web que permitiría a los internautas tener la sensación de estar en un museo y "ver" estos objetos de una forma más cercana.

El proyecto quedó en eso, en proyecto. Los objetos arqueológicos son frágiles y delicados. No se permite tomar fotos puesto que el flash o la luz que emite la cámara daña los colores del objeto y por ende el objeto. Para ese entonces había hecho unas cuantas cosas sencillas con OpenCV y quedé fascinada. Hoy espero poder recrear el mismo ambiente de la primera vez que ví a OpenCV en acción. Para mi próxima entrada (de aquí a dos semanas) haremos uso de OpenCV en un mini-proyecto que prometo será interesante; esto según el lenguaje de programación que tenga más votos en los comentarios. 

Entre los lenguajes que pueden escoger tenemos:
  • C
  • C++
  • Java
  • Python
  • Ruby

Puedo defenderme bastante bien en todos los lenguajes antes mencionados, menos en python. De ser escogido, es casi seguro de que Snifer tenga que armar la siguiente entrada sobre OpenCV :)

Instalación:



Nuestra principal fuente de información es el sitio oficial de OpenCV.
En el sitio oficial, podemos escoger el paquete de openCV según nuestra plataforma:

En mi caso usaré Linux por comodidad. Si seguimos el enlace de la página oficial para la instalación en Linux, este nos llevará al sitio en sourceforge.net

Los pasos de instalación para Linux se encuentran aquí.

Nosotros seguiremos esas instrucciones, aunque ligeramente modificadas.



Requerimientos:

GCC 4.4.x or later
            viene por defecto en todo Linux, para verificar:

lizbeth@kandinsky:~$ gcc --version

Con un resultado similar al mío:





CMake 2.8.7 or higher

            También viene por defecto, verificamos con(adivinen...):

lizbeth@kandinsky:~$ cmake --version




Los siguientes paquetes muy probablemente no los tengan instalados,
           
build-essential. Este meta-paquete trae gcc, make, g++ (el compilador de c++), dpkg-dev entre otras cosas. Yo lo voy a instalar porque no tengo el compilador de c++ y porque probablemente haya algo de cuya existencia no sepa pero que finalmente lo necesite. Además este paso está en el sitio de instalación, así que mejor seguir lo indicado, por lo que ejecutaremos lo siguiente:

lizbeth@kandinsky:~$ sudo apt-get install build-essential
           
Git
GTK+2.x or higher, including headers (libgtk2.0-dev)
pkg-config
ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
Para instalar todo esto:            
lizbeth@kandinsky:~$ sudo apt-get install sudo apt-get install git libgtk2.0-dev \
pkg-config libavcodec-dev libavformat-dev libswscale-dev
                  
Y por último, aunque nos indican que es algo opcional, ejecutaremos la siguiente línea:
lizbeth@kandinsky:~$ sudo apt-get install python-dev python-numpy libtbb2 \
libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Con lo que instalaremos:
        Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
        [optional] libtbb2 libtbb-dev
        [optional] libdc1394 2.x
        [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev

Si en alguno de estos pasos les generar un error de que no encuentra los paquetes porque no hay la URL (ERROR 404) , un apt-get update lo soluciona.

 Y... tenemos todo para la instalación. Tal vez haga falta una tacita de café o algo para merendar porque el proceso de instalación demora y no sólo eso, utilizará el procesador a full :/ .
















Mi opencv-2.4.9.zip se encuentra en la carpeta Descargas y voy a extraerla en /opt. Si han podido seguir todos los pasos anteriores quiere decir que tienen experiencia con linux, aún así..... PROHIBIDO HACER UN chmod 777 a la carpeta opt!... o un chmod sin estar concientes de lo que están haciendo... arruinarán un sistema de permisos bien pensado -_- , si no les gusta este lugar para instalar pueden instalarlo en su directorio en home y ahi pueden darle los permisos que deseen.

Continuemos entonces. Extraigamos el .zip en /opt :
lizbeth@kandinsky:~$ sudo unzip Descargas/opencv-2.4.9.zip -d /opt/

Renombremos el archivo opencv-2.4.9 a simplemente opencv:
lizbeth@kandinsky:~$ sudo mv /opt/opencv-2.4.9/ /opt/opencv/

Ingresemos al directorio para crear la carpeta release:
lizbeth@kandinsky:~$ cd /opt/opencv
lizbeth@kandinsky:/opt/opencv$ sudo mkdir release

Ingresemos a la carpeta release:
lizbeth@kandinsky:/opt/opencv$ cd release

para crear los binarios y ejecutables según el makefile de opencv:

lizbeth@kandinsky:/opt/opencv/release$ sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D \
 CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D \ INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLE=ON ..


De tener openGL instalado, se debe indicar en este paso con el siguiente nombre de variable:  WITH_OPENGL=ON.


Después de ejecutar estas líneas, tendremos un resumen de lo que está configurado y de la cosas que no:




Y luego:
lizbeth@kandinsky:/opt/opencv/release$ sudo make -j4 

Este proceso demora bastante por lo que la merienda llega bien en este punto.












Finalmente :
lizbeth@kandinsky:/opt/opencv/release$ sudo make install
      












Probando lo instalado

Aquí viene la parte divertida ^-^

Por si no se dieron cuenta, en una parte de la instalación hemos compilado los ejemplos que trae openCV y se han creado archivos ejecutables en /opt/opencv/release/bin.


lizbeth@kandinsky:/opt/opencv/release$ cd bin; ls 



Y yo sólo voy a jugar con el primero que aparece en la lista:
opencv_createsamples
Los argumentos que recibe este programa pueden ser encontrados en:
http://man.cx/opencv_createsamples(1)

Así como también ejemplos de como usarlo. Yo lo voy a usar con mi avatar de twitter el cual copié estratégicamente en: ~/Pictures/RizelTane.jpg

lizbeth@kandinsky:/opt/opencv/release/bin$ sudo ./opencv_createsamples -img \
~/Pictures/RizelTane.jpg -num 10 -bg negatives.dat -vec samples_out.vec -show -w 200 -h 200 

He aquí parte del resultado. Vá cambiando al presionar una tecla.
Tienen para buen rato el ir probando los ejemplos. Con estas imágenes me despido. Saludos :)  

10 comentarios