OpenCv y Raspberry Pi

Hoy en día podemos ver como cada vez más y más aplicaciones aparecen que pueden identificar objetos o situaciones de forma que puedan ayudarnos. Esto es debido a la visión artificial que permite a un computador a partir de imágenes obtener un resultando o conclusión. Además el uso de sistemas de Visión artificial se ha disparado en el último año gracias en parte a los mini computadores como la Raspberry Pi. Por ello vamos a mostrar este artículo donde explicaremos como utilizar un Framework para visión Artificial OpenCV.

OpenCV, es un FrameWork para procesamiento de Imágenes y Visión por Computador. El cual es libre y esta disponible para muchas plataformas. Otro aspecto interesante que tiene es que aunque esta escrito en C++, tiene diferentes interfaces(Bindings) para otros lenguajes de computación como puede ser Python, Java e incluso para Sistemas móviles como puede ser el caso de Android.

En este caso, vamos a mostrar como instalar este FrameWork en una Raspberry Pi. Sin embargo, para este tutorial, hemos utilizado una Raspberry Pi 2; pero es recomendable tener una Raspberry Pi 3 para sacar provecho del procesador de 64 bits.

En este tutorial, vamos a mostrar como compilar e instalar OpenCV para la Raspberry Pi y su utilización con el lenguaje Python.

Para este tutorial, utilizaremos una Distribución Raspbian pero que perfectamente funcionaria con una distribución Debian.

Si estamos utilizando una distribución Raspbian, es mejor eliminar los paquetes que no vamos a utilizar como puede ser Wolfram o LibreOffice para así tener más espacio para nuestros desarrollos.

 

$ sudo apt-get purge wolfram

Una vez hecho esto, veremos que hemos ganado unos 700MB de espacio. Podemos hacer lo mismo para otros paquetes como puede ser libreOffice.

Con ya espacio libre, instalaremos las dependencias; pero antes actualizaremos nuestro sistema.

 

$sudo apt-get update
$sudo apt-get upgrade

Una vez el sistema actualizado pasaremos a instalar las dependencias. Primero instalaremos las dependencias para poder construir nuestra librería.

 

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

Tras instalar las dependencias para compilar las librerías, instalaremos el resto de dependencias.

Dependencias de manejo de imágenes

$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Dependencias de manejo de Ficheros y de video.

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev

Dependencias para la interfaz gráfica

$ sudo apt-get install libgtk2.0-dev

Y por último para mejorar el rendimiento de las operaciones matemáticas (matrices) instalaremos las siguientes dependencias.

$ sudo apt-get install libatlas-base-dev gfortran

Para poder utilizar la interfaz python de OpenCV, instalaremos las cabeceras de python; dependiendo de nuestra versión de python. Aquí dejaremos las dos versiones.

$ sudo apt-get install python2.7-dev python3-dev

Tras tener todas las dependencias y librerías instaladas, vamos a pasar a descargarnos el código fuente. del repositorio de GitHub.

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.2.0.zip
$ unzip opencv.zip

Ahora que tenemos el código fuente, tenemos que descargarnos la librería opencv_contrib para poder tener todas las funcionalidades de OpenCV. También lo descargaremos de Github.

$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
$ unzip opencv_contrib.zip

Una vez descargado el código fuente, vamos a pasar a generar las librerías. Pero para una mejor utilización de estas, vamos a instalar virtualenv y virtualenvwrapper; que nos permitirán crear entornos virtuales para solo utilizar las librerías que necesito en mis proyectos.

En primer lugar, instalaremos pip que es el gestor de paquetes para python.

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py

con pip, ya podemos instalar cualquier paquete Python como puede ser numpy o pyserial. Tras tener pip, vamos a proceder a instalar virtualenv y virtualenwrapper.

$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip

Con virtualenv instalado y virtualenvwrapper puesto, vamos a actualizar nuestro fichero .profile para que automáticamente tengamos los entornos disponibles.

$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
$ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
$ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile

No hay que olvidar que hay que actualizar nuestro perfil.

$ source .profile

Ya estamos listos para crear nuestro entorno. para ello vamos a usar la orden mkvirtualenv.

En nuestro caso tenemos que tener en cuenta si; la versión de python es 2.7 o 3.x.

Para Python 2.7:

$ mkvirtualenv cv -p python2

Para Python 3.x.

$ mkvirtualenv cv -p python3

para activar nuestro entorno virtual, vamos a utilizar la orden workon.

$ workon cv

Tras esto observaremos que tenemos en nuestro prompt (cv); que muestra el entorno virtual que estamos.

(cv) user@localdomain$_

A partir de este momento, vamos a realizar las operaciones dentro del entorno virtual cv.

$ pip install numpy

Esta operación tardará un poco ya que tiene que compilar e instalar numpy para que pueda ser usando por Opencv.

Tras todas estas operaciones, ya estamos preparados para compilar Opencv. para lo cual, entraremos desde nuestra carpeta de usuario.

$ cd ~/opencv-3.2.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D BUILD_EXAMPLES=ON ..

Tras esta operación, veremos una serie de configuraciones; y comprobaremos que toda la configuración esta bien. Incluyendo las dependencias y las cabeceras de python. Otra parte importante, es que tenemos que ver que es correcta la versión de python que utilizaremos.

Tras tener todo listo, vamos a pasar a la compilación.

$ make -j4

En este comando es importante el j4. Que quiere decir que utilizaremos los 4 núcleos. En esta parte tendremos que tener mucha paciencia ya que depende de varios factores tardara más o menos. El primero es que en una Raspberry Pi 2 con 4 núcleos a 900Mhz(sin overclockear) tardará 2 Horas. Otra parte importante es que tendrá mucho consumo y por lo que es necesario un adaptador de 5V a 2A mínimo. Sin embargo, recomendamos una Raspberry Pi 3. Que tiene 4 núcleos a 1,2Ghz además de que el procesador es de 64 bits, por lo que el tiempo se reduce a 1h 20 minutos.




Sin embargo, a veces por condiciones de carrera, u otros aspectos, no siempre podremos compilar con 4 núcleos Opencv, por lo tanto si ocurren varios errores recomendamos compilar con 1 solo núcleo; aunque el tiempo se cuadriplica.

Si hay errores primero limpiar y volver a ejecutar:

$ make clean
$ make

Tras la compilación, instalaremos la librería.

$ make install
$ ldconfig

Tras la instalación de todos los paquetes y teniendo lista la librería, vamos a enlazarlas con nuestro entorno virtual.

Tras la instalación de OpenCV aparecerán las librerías en /usr/local/lib/python3.4/site-packages/ para python3 o /usr/local/lib/python2.7/site-packages/ para python2. Lo primero que haremos será renombrarlo ya que la librería estará con el nombre de cv2.cpython-3.4m.so por lo que la recobraremos.

$ sudo mv cv2.cpython-34m.so cv2.so

Por último, añadiremos enlaces simbólicos para nuestro entorno virtual.

cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so

Estos últimos comandos son para Python3; para Python2, los realizaríamos así.

cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

Con esto ya tenemos instalado OpenCv, Ahora mismo podemos probar que efectivamente funciona con el siguiente script Python:

import cv2
cv2.__version__

Si nos devuelve la versión, quiere decir que tenemos todo listo y que opencv esta correctamente instalado.

Si queremos ver los ejemplos de Python, los encontraremos dentro de la carpeta opencv/samples/python.

Esperemos que os haya servido este tutorial, y que podáis realizar proyectos con Opencv. En Booleanbite, mostraremos otros tutoriales sobre como utilizar la cámara de la Raspberry Pi, para obtener imágenes o procesar imágenes.

Os dejamos una imagen de como sería una imagen en HSV (que veremos en próximos tutoriales que es y para que sirve).

Os recomendamos la página de PyImageSearch con información sobre OpenCv y creación de proyectos de visión por computador.

Be the first to comment on "OpenCv y Raspberry Pi"

Deja un comentario.

Tu dirección de correo no será publicada.


*


*