Mi Blog

Instalar OpenCV 3 + Python en MAC OSX

por Carlos Escura en 24 enero, 2016 Sin comentarios

Dado que en esta web basaremos todas las implementaciones de reconocimiento visual en OpenCV, este post está dedicado a intentar dar algo de luz en la tarea de instalar el propio OpenCV junto con su API para Python en un sistema operativo MAC OSX, pudiendo usar luego nuestro IDE favorito para Python o C++. En mi caso, me decanto en estos proyectos por Python con PyCharm.

Para empezar, vamos a hacer una lista de los requisitos a nivel de software necesarios para seguir esta guía.

  • Tener nuestro IDE preferido ya instalado, en mi caso PyCharm (Para Python)
  • Tener ya instalado Xcode (en el caso que queramos compilar códigos en C++, lo cual no se tratará en esta entrada)

Una vez preparados, empezamos con el proceso de instalación, no sin antes aclarar un par de estrategias que seguiremos y que podrían resultar un tanto confusas para los menos experimentados.

MAC OSX tiene ya implementado por defecto una versión de Python (en mi caso, con OSX Yosemite es la versión 2.7) y por lo tanto, al compilar y generar las librerías de OpenCV deberíamos ser capaces de interpretar código de esas librerías con la instalación existente de Python. Nada más lejos de la realidad, efectivamente, es posible hacerlo. No obstante, es una mala praxishacerlo de este modo y por lo tanto, en esta guía vamos a crear algo llamado “entornos virtuales” en los que poder instalar otra versión (que puede ser la misma que la existente) de algún software y librerías, en nuestro caso Python, para poder trabajar de forma completamente independiente al software que incorpora el sistema. Con este método, nos aseguramos trabajar de una forma “aislada” impidiendo dañar las librerías del sistema o poder actualizar tantas veces como queramos Python y sus librerías.

¡Comenzamos!

1. Instalación de Homebrew y Python

Homebrew es algo parecido al archiconocido “apt-get” de las distribuciones de linux, con el cual podemos instalar paquetes desde la línea de comandos. Algo que todo buen aficionado a MAC debería tener para trastear.

Ejecutamos como nuestro usuario (ojo, que para algo está el $, si no sabemos qué significa esto, deberíamos revisar los apuntes de bash)

$ cd ~
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Con la instalación completa de Homebrew, aquí os dejo los comandos más comunes que usaremos.

  • El primero se utiliza para instalar paquetes.
  • El segundo para desinstalarlos, y si añadimos el parámetro -f fuerza a desinstalar el paquete y sus archivos de configuración (algo parecido al “purge” del apt-get.
  • El comando “brew doctor” es posiblemente también otro de nuestros grandes aliados. Nos diagnosticará cualquier problema en la instalación que detecte (enlaces rotos, entradas duplicadas, falta de archivos, etc).
brew install <paquete>
brew uninstall <paquete>
brew uninstall -f <paquete>
brew doctor

El primer comando que ejecutaremos de Homebrew, será el que actualiza sus repositorios

$ brew update

Con los repos ya actualizados, lo primero que debemos hacer es instalar una nueva versión de Python (un nuevo binario y un nuevo “hogar” para todas sus librerías) que luego usaremos de forma aislada al del sistema.

$ brew install python 

Una vez instalada la nueva versión de Python, vamos a actualizar nuestro PATH para decirle al sistema que queremos usar esta nueva versión que se encuentra en /usr/local/bin/python

La mejor forma de hacerlo (de forma permanente) es editar nuestro archivo “~.bash_profile” (y si no existe, creándolo) añadiendo la siguiente línea:

# Usar Python de Homebrew
export PATH=/usr/local/bin:$PATH

Volvemos a cargar el profile con

$ source ~/.bash_profile

Y finalmente nos aseguramos que el binario de python que ejecutamos es el nuevo instalado por Homebrew y no el que viene por defecto en el sistema:

$ which python

El cual nos debería contestar con una ruta del tipo “/usr/local/bin/python/” y NO “/usr/bin/python

Este paso es vital para poder seguir con el proceso, ya que en caso de no utilizar el binario correcto, los parámetros que tendremos que usar en el compilador para generar los paquetes de OpenCV variarán considerablemente

2. Instalación de los entornos virtuales “virtualenv”

El siguiente paso es instalar “virtualenv” y “virtualenvwrapper“, que son dos programas encargados de crear entornos de trabajo virtuales en nuestro sistema, pudiendo instalar en python nuevas librerías de forma independiente al sistema, por ejemplo.

$ pip install virtualenv virtualenvwrapper

En siguiente paso es poder hacer referencia desde el terminal en el que estamos a los distintos entornos virtuales que vamos a crear, por lo tanto volvemos a editar el archivo “~/.bash_profile” y añadimos la siguiente línea:

# Virtualenv/VirtualenvWrapper
source /usr/local/bin/virtualenvwrapper.sh

Volvemos a cargar el profile con

$ source ~/.bash_profile

Ahora crearemos nuestro primer entorno virtual, que llamaremos “cv” aunque podemos llamarlo como más nos guste. Es sólo a modo de guía.

$ mkvirtualenv cv

No está de más explicar ahora un poco el uso de los entornos virtuales, para aquellos que no estén acostumbrados. Se trata de poder “virtualizar” distintos entornos de trabajo en base al entorno general, por lo tanto, deberíamos saber cómo poder volver al entorno “normal” o cómo regresar al entorno cv una vez cerremos el terminal. Como habréis comprobado, al crear el entorno cv, se crea en el terminal un prefijo “(cv)” indicándonos que estamos trabajando en dicho entorno. Si queremos recuperarlo en una nueva ventana del terminal, basta con usar el comando:

$ workon cv

3. Instalación de las librerías de Python necesarias y sus dependencias

Con todo el entorno preparado (y trabajando en el entorno “cv”) vamos a instalar todos los paquetes necesarios en Python para trabajar posteriormente con OpenCV:

$ pip install numpy
$ brew install cmake pkg-config
$ brew install jpeg libpng libtiff openexr
$ brew install eigen tbb

El primer paquete es una librería de Python destinada al manejo de matrices (que es como trataremos las imágenes en OpenCV) y el resto son librerías instaladas mediante Homebrew para poder manejar archivos jpg, png, etc.

Descarga de OpenCV

Para instalar OpenCV propiamente dicho, primero que nada descargaremos las versiones más recientes tanto del repositorio oficial, como el de las extensiones más utilizadas (para algunos proyectos nos resultará casi vital este último, por lo que recomiendo encarecidamente instalarlo, ya que incluye las librerías para SURF, SIFT, etc).

$ cd ~
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ git checkout 3.1.0

Los módulos adicionales:

$ cd ~
$ git clone https://github.com/Itseez/opencv_contrib
$ cd opencv_contrib
$ git checkout 3.1.0

Nota importante, en esta guía se hace referencia a la versión 3.1.0 en el checkout, pero habría que comprobar qué versión tenemos disponible en el momento de instalarlo y poder así apuntar a la última.

Compilación e instalación de OpenCV 3

Para preparar la compilación, crearemos un directorio llamado “build” en la carpeta de opencv donde volcaremos todos los archivos para ser compilados:

$ cd ~/opencv
$ mkdir build

Con las carpetas y archivos preparados, os recomiendo instalar ahora la versión gráfica de Cmake

Abrimos el programa y seleccionamos como source folder el directorio donde está opencv y como build el directorio que hemos creado antes para este fin: “build”

Seguidamente, pulsamos sobre el botón inferior de “Configure” para que haga un primer barrido entre los archivos y lea los archivos make (dejando por defecto los parámetros en la ventana que aparecerá).

 

Uso de Cmake Vueloartificial

Ahora es cuando entra en juego la parte más complicada, por llamarla de alguna forma de todo el proceso: configurar bien todos los parámetros de compilación.
En términos generales, debemos modificar los siguientes y dejarlos como se muestra aquí, teniendo especial atención a las referencias que cito al final:

PYTHON2_EXECUTABLE=/Users/NOMBREDEUSUARIO/.virtualenvs/cv/bin/python2.7
PYTHON2_PACKAGES_PATH=/Users/NOMBREDEUSUARIO/.virtualenvs/cv/lib/python2.7/site-packages
PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/bin
PYTHON2_INCLUDE_DIR=/usr/local/Frameworks/Python.framework/Headers
OPENCV_EXTRA_MODULES_PATH=/Users/NOMBREDEUSUARIO/opencv_contrib/modules
INSTALL_PYTHON_EXAMPLES=ON
INSTALL_C_EXAMPLES=ON

“cv” que es el nombre de nuestro espacio de trabajo virtual y podría ser diferente
“/User/NOMBREDEUSUARIO/….” que cambiará en cada uno de vosotros y se deberá ajustar a vuestro nombre de usuario.
“Python 2.7.11” Cuidado, las versiones podrían cambiar y ser por ejemplo Python 2.7.10 o 2.7.12 así que tendréis que comprobarlo en el momento de configurar el compilador

Nota opcional: Si queréis poder utilizar procesamiento multinúcleo en los programas de reconocimiento, recomiendo habilitar también el flag de WITH OPENMP”

Al acabar de configurar todos los parámetros, pulsamos sobre el botón “Generate” y si todo ha funcionado bien, no nos dará ningún error en forma de ventana emergente y estamos preparados para compilar e instalar:

$ make -j4

Nota: El parámetro -j4 le indica a make el número de procesadores lógicos que puede emplear. Como la compilación será algo costoso, podemos intentar aprovechar la máxima cantidad de procesadores que tengamos disponibles. En un MacbookPro por ejemplo, son cuatro.

Instalamos el código compilado:

$ make install 
Comprobar la instalación

Una vez instalado OpenCV en nuestro MAC, ya podemos comprobar que todo ha funcionado correctamente simplemente probando a importar en python la librería cv2.so

 $ python
>>> import cv2

Si el último comando en Python no nos devuelve ningún error, podemos estar tranquilos, puesto que ya tenemos instalado OpenCV en nuestro ordenador.

Configuración en Pycharm

El último paso y más sencillo es configurar Pycharm para usar nuestro OpenCV.
Para ello, basta con crear un nuevo proyecto y seleccionando en el desplegable de “Intérpretes” nuestro entorno “CV” con el que poder trabajar haciendo referencia a las librerías de OpenCV.

Interpretes Pycharm OpenCV vueloartidicial

Paciencia la primera vez que se utilice un proyecto con OpenCV en Pycharm, ya que tiene que importar toda la librería e indexarla para poder mostrar las opciones de autocompletado.

Carlos EscuraInstalar OpenCV 3 + Python en MAC OSX

Entradas relacionadas

Echa un vistazo a estos posts