En este tutorial, aprenderás a instalar con pip OpenCV en Ubuntu, macOS y la Raspberry Pi.
En anteriores tutoriales de instalación de OpenCV he recomendado compilar desde el código fuente; sin embargo, en el último año se ha hecho posible instalar OpenCV a través de pip, el propio gestor de paquetes de Python.
Aunque la instalación desde el código fuente te dará el mayor control sobre la configuración de OpenCV, también es la más difícil y la que más tiempo consume.
Si estás buscando la forma más rápida posible de instalar OpenCV en tu sistema, quieres usar pip para instalar OpenCV (pero hay algunas cosas que pueden hacerte tropezar en el camino, así que asegúrate de leer el resto de esta guía).
Actualización del 21 de noviembre de 2009: Se ha publicado una actualización de esta entrada del blog debido a problemas de compatibilidad con OpenCV en la Raspberry Pi 4 que ejecuta BusterOS usando este método de instalación pip. Asegúrate de encontrar las actualizaciones a través de ctrl + f
mientras buscas «2019-11-21 Update».
Para aprender a instalar con pip OpenCV en tu sistema, solo tienes que seguir leyendo.
¿Buscas el código fuente de este post?
Ir a la sección de descargas
pip install opencv
En el resto de este tutorial, describiré brevemente los paquetes de OpenCV que puedes instalar a través de pip, el gestor de paquetes de Python.
A partir de ahí, demostraré cómo instalar con pip OpenCV en Ubuntu, macOS y la Raspberry Pi.
Por último, revisaré algunos problemas comunes que puedes encontrar al usar pip para instalar OpenCV.
Me gustaría señalar una advertencia importante a este método de instalación de OpenCV antes de comenzar.
Las versiones alojadas en PyPi/PiWheels de OpenCV que estamos discutiendo hoy no incluyen algoritmos «no libres» como SIFT, SURF y otros algoritmos patentados. Este es un gran método para instalar OpenCV si necesita un entorno rápido en el que no necesitará ejecutar programas que contengan los algoritmos no libres – si ese no es el caso, tendrá que completar una compilación completa de OpenCV.
Los dos paquetes pip de OpenCV: opencv-python y opencv-contrib-python
Antes de empezar quiero recordaros que los métodos que vengo hoy aquí son paquetes no oficiales de OpenCV preconstruidos que se pueden instalar vía pip – no son paquetes oficiales de OpenCV liberados por OpenCV.org.
El hecho de que no sean paquetes oficiales no significa que debas sentirte incómodo usándolos, pero es importante que entiendas que no están avalados ni soportados directamente por el equipo oficial de OpenCV.org.
Dicho esto, hay cuatro paquetes de OpenCV que son instalables mediante pip en el repositorio PyPI:
- opencv-python: Este repositorio contiene sólo los módulos principales de la librería OpenCV. Si eres lector de PyImageSearch no te conviene instalar este paquete.
- opencv-contrib-python: El repositorio opencv-contrib-python contiene tanto los módulos principales junto con los módulos contrib – esta es la biblioteca que recomiendo instalar ya que incluye toda la funcionalidad de OpenCV.
- opencv-python-headless: Igual que opencv-python pero sin la funcionalidad de la GUI. Útil para sistemas sin cabeza.
- opencv-contrib-python-headless: Igual que opencv-contrib-python pero sin funcionalidad GUI. Útil para sistemas sin cabeza.
- Instalar en tu sistema
site-packages
- Instalar en el
site-packages
de un entorno virtual (preferido)
De nuevo, en la gran mayoría de las situaciones querrás instalar opencv-contrib-python
en tu sistema.
NO querrás instalar tanto opencv-python
como opencv-contrib-python
– elige UNO de ellos.
Cómo instalar OpenCV en Ubuntu con pip
Tienes dos opciones para instalar OpenCV en Ubuntu con pip:
Primero, instala pip
Si no tienes pip, tendrás que obtenerlo primero:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Opción A: Instalar OpenCV en tu sistema Ubuntu con pip
No recomendaría este método a menos que tengas un caso de uso particular en el que no quieras entornos Python aislados e independientes.
Instalemos con pip opencv-contrib-python en nuestro sistema:
$ sudo pip install opencv-contrib-python
¡En cuestión de segundos, OpenCV está listo para funcionar en los paquetes de sitio de tu sistema!
Opción B: Instalar OpenCV en Ubuntu en un entorno virtual con pip
Los entornos virtuales de Python tienen grandes beneficios.
El principal beneficio es que puedes desarrollar múltiples proyectos en tu sistema con paquetes aislados (muchos con dependencias de versiones) sin tener que enturbiar las aguas de tu sistema. También eres libre de añadir y eliminar entornos virtuales sobre la marcha.
Por decirlo de forma sencilla: Los entornos virtuales de Python son una de las mejores prácticas para el desarrollo de Python. Lo más probable es que debas subirte al carro.
Mis herramientas de elección son virtualenv
y virtualenvwrapper
pero podrías elegir una alternativa como venv o Anaconda (conda para abreviar).
Aquí se explica cómo instalar virtualenv
y virtualenvwrapper
, ambos vivirán en tu sistema site-packages
y gestionarán los paquetes de sitios del entorno virtual de cada proyecto:
$ pip install virtualenv virtualenvwrapper
Antes de que podamos continuar, primero necesitas añadir algunas líneas a tu ~/.bashrc
perfil. Abre el archivo usando nano
vim
, o emacs
y añade estas líneas al final:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Guarda el archivo. A continuación, «fuente» en su terminal:
$ source ~/.bashrc
Verás una salida de terminal que configura virtualenvwrapper. Ahora tienes acceso a nuevos comandos de terminal:
- Crear un entorno con
mkvirtualenv
. - Activar un entorno (o cambiar a uno diferente) con
workon
. - Desactivar un entorno con
deactivate
. - Eliminar un entorno con
rmvirtualenv
. - ¡Asegúrate de leer la documentación!
Creemos un entorno virtual de Python 3 para OpenCV llamado cv:
$ mkvirtualenv cv -p python3
Y ahora con una varita mágica (pip), puedes instalar con pip OpenCV en cuestión de segundos en tu nuevo entorno:
$ pip install opencv-contrib-python
Cómo instalar con pip OpenCV en macOS
MacOS es similar a Ubuntu para instalar con pip OpenCV.
De nuevo, tienes dos opciones para instalar OpenCV en macOS con pip:
- Instalar en tu sistema
site-packages
- Instalar en el
site-packages
de un entorno virtual (preferido)
Instalar pip
Si no tienes pip, tendrás que obtenerlo primero:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Opción A: Instalar OpenCV en tu sistema macOS con pip
No hagas esto.
¿Por qué? De hecho te recomiendo que vayas a la Opción B y utilices un entorno virtual.
Bien, pues si insistes en instalar en tu sistema macOS, entonces es tan fácil como instalar OpenCV con pip a través de:
$ sudo pip install opencv-contrib-python
En cuestión de segundos, OpenCV está listo para ir en los paquetes de sitio de tu sistema.
Opción B: Instalar OpenCV en macOS en un entorno virtual con pip
Al igual que la gestión de paquetes es una brisa con pip….
…gestionar los proyectos y sus dependencias es pan comido con los entornos virtuales.
Deberías usar entornos virtuales de Python si te tomas en serio el desarrollo de visión por ordenador (o cualquier desarrollo en realidad).
No me importa qué sistema utilices (ya sea virtualenv
venv
, o conda
/Anaconda), simplemente aprende a utilizar uno y quédate con él.
Aquí se explica cómo instalar virtualenv y virtualenvwrapper, ambos vivirán en los paquetes de sitio del sistema y gestionarán los paquetes de sitio del entorno virtual de cada proyecto:
$ pip install virtualenv virtualenvwrapper
A partir de ahí, tienes que añadir las siguientes líneas a tu ~/.bash_profile
(fíjate que para macOS el nombre del archivo es .bash_profile
y para Ubuntu es .bashrc
.
Abre el archivo usando nano
vim
, o emacs
nano
viene en la mayoría de los sistemas):
$ nano ~/.bash_profile
…y añade estas líneas al final:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Guarda el archivo – si estás usando nano
los atajos de teclado aparecen en la parte inferior de la ventana.
Entonces, «búscalo» en tu terminal:
$ source ~/.bash_profile
Verás unas pocas líneas de salida de terminal indicando que virtualenvwrapper está configurado. Ahora tienes acceso a nuevos comandos de terminal:
-
mkvirtualenv
: Crea un nuevo entorno virtual. -
workon
: Activa/cambia a un entorno virtual. Recuerda que puedes tener tantos entornos como quieras. -
deactivate
: Salta de un entorno virtual y estarás trabajando con tu sistema. -
rmvirtualenv
: Borra un entorno virtual. - ¡Asegúrate de leer la documentación!
Creemos un entorno virtual de Python 3 para OpenCV llamado cv:
$ mkvirtualenv cv -p python3
Y ahora, usando pip, y con un parpadeo, puedes instalar con pip OpenCV en macOS en cuestión de segundos en tu nuevo entorno:
$ pip install opencv-contrib-python
Cómo instalar con pip OpenCV en Raspberry Pi
Al principio de este post mencioné que una de las desventajas de instalar OpenCV es que no tienes ningún control sobre la compilación en sí – los binarios están precompilados para ti, lo que si bien es bueno, también significa que no puedes incluir ninguna optimización adicional.
Para la Raspberry Pi, estamos de enhorabuena.
Dave Jones (creador del módulo de Python picamera
) y Ben Nuttall de la comunidad Raspberry Pi dirigen piwheels.org, un repositorio de paquetes de Python que proporciona ruedas ARM (es decir, paquetes binarios precompilados) para la Raspberry Pi.
Usando PiWheels podrás instalar con pip OpenCV en cuestión de segundos (lo mismo ocurre con otras librerías de Python que pueden tardar mucho en compilar, incluyendo NumPy, SciPy, scikit-learn, etc.).
¿Entonces cómo se le indica al comando pip que use PiWheels?
La respuesta corta es «¡Nada!»
Si estás usando Raspbian Stretch estarás encantado de saber que el comando pip comprobará PiWheels para un binario precompilado antes de comprobar PyPI, permitiendo a tu Pi ahorrar un montón de ciclos de CPU (y a ti un montón de tiempo de instalación).
Además, cuando Ben y Dave montaron el binario de OpenCV para PiWheels me preguntaron qué instrucciones debían utilizar – les recomendé mi instalación optimizada de OpenCV para la Raspberry Pi – ¡que es exactamente las instrucciones que siguieron!
Si terminas usando pip para instalar OpenCV en tu Raspberry Pi, ten por seguro que estás usando la versión optimizada.
Comencemos a aprender cómo instalar pip OpenCV en nuestra Raspberry Pi.
Instala los prerrequisitos en tu Raspberry Pi
La Raspberry Pi requiere que instales algunos paquetes del sistema antes de empezar:
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-100$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5$ sudo apt-get install libatlas-base-dev$ sudo apt-get install libjasper-dev
Instala pip en tu Raspberry Pi
El gestor de paquetes de Python, «pip», se puede obtener a través de wget:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Ahora tienes dos opciones:
- Instalar OpenCV en tu Python global
site-packages
en tu Raspberry Pi - Instalar OpenCV en un entorno virtual en tu Raspberry Pi
Opción A: Instalar OpenCV en tu sistema Raspberry Pi con pip
No recomendaría esta opción si quieres poder utilizar diferentes versiones de OpenCV en entornos aislados.
Pero mucha gente despliega sus Raspberry Pis para un solo propósito/proyecto y no necesita entornos virtuales.
Dicho esto, es todo un lío para limpiar si luego cambias de opinión y quieres usar entornos virtuales, así que recomendaría saltarse esta opción y seguir la opción B.
Para instalar con pip OpenCV en tu sistema Raspberry Pi, asegúrate de usar sudo así:
$ sudo pip install opencv-contrib-python==4.1.0.25
2019-11-21 Actualización: Los lectores han informado de que algunas versiones de OpenCV 4 como se instalan a través de pip no funcionan correctamente en la Raspberry Pi. Puedes encontrarte con un error "undefined symbol: __atomic_fetch_add8"
para libatomic
cuando import cv2
de Python si no utilizas la versión específica de OpenCV mencionada en el bloque de código anterior.
En cuestión de segundos, OpenCV está listo para ir en el sitio-paquetes de su Raspberry Pi junto con cualquier otro paquete que pueda tener instalado.
Opción B: Instalar OpenCV en un entorno virtual con pip en tu Raspberry Pi
Los entornos virtuales son definitivamente el camino a seguir si tu Raspberry Pi tiene múltiples propósitos (o si eres como yo y pruebas la compatibilidad del código entre varias versiones de software para las entradas del blog todo el tiempo ?).
Aquí tienes cómo instalar virtualenv y virtualenvwrapper, las herramientas que uso para conseguirlo:
$ pip install virtualenv virtualenvwrapper
Entonces necesitas añadir las siguientes líneas a tu ~/.bashrc
. Abre el archivo usando nano
vim
, o emacs
y añade estas líneas al final:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Guarda el archivo. A continuación, «súbelo» en tu terminal:
$ source ~/.bashrc
La salida de la terminal se imprimirá indicando que virtualenvwrapper está listo. Asegúrese de inspeccionarla en busca de errores.
Ahora tiene acceso a nuevos comandos de terminal:
- Crear un entorno con
mkvirtualenv
. - Activar un entorno (o cambiar a otro) con
workon
. - Desactivar un entorno con
deactivate
. - Eliminar un entorno con
rmvirtualenv
. - ¡Asegúrate de leer la documentación!
Para crear un entorno virtual de Python 3 que albergará OpenCV y otros paquetes que instales, sólo tienes que utilizar mkvirtualenv y el siguiente comando:
$ mkvirtualenv cv -p python3
Ahora tienes un entorno virtual llamado cv
. Puedes activarlo en cualquier momento a través de:
$ workon cv
Y ahora con un tirón de orejas, puedes pip instalar OpenCV en cv
:
$ pip install opencv-contrib-python==4.1.0.25
2019-11-21 Actualización: Los lectores han informado de que algunas versiones de OpenCV 4 como se instalan a través de pip no funcionan correctamente en la Raspberry Pi. Puedes encontrarte con un error "undefined symbol: __atomic_fetch_add8"
para libatomic
cuando import cv2
de Python si no utilizas la versión específica de OpenCV mencionada en el bloque de código anterior.
¡Eso es todo lo que hay que hacer con PiWheels!
Apuesto a que estás usando la PiCamera como tu sensor de imágenes. Puedes instalar el módulo de Python usando el siguiente comando (sólo ten en cuenta las comillas):
$ pip install "picamera"
Probando nuestra instalación pip de OpenCV
¿Sabías que la versión 3.3+ de OpenCV tiene un módulo DNN que puede ejecutar modelos de Deep Learning?
Puede que te sorprenda, pero tu versión de OpenCV ya puede hacerlo de forma inmediata, sin apenas software adicional.
Vamos a realizar la detección de objetos en vídeo con un detector de disparo único de MobileNet.
Aquí tienes lo que necesitas instalar primero (suponiendo un cv
entorno virtual):
$ workon cv$ pip install imutils$ pip install "picamera" # if you're using a Raspberry Pi
Ahora vuelve a comprobar que tienes todo el software listo abriendo un shell de Python:
$ workon cv$ pythonPython 3.6.3 (default, Oct 4 2017, 06:09:15) on darwinType "help", "copyright", "credits" or "license" for more information.>>> import cv2>>> cv2.__version__'4.0.1'>>> import imutils>>>
La Raspberry Pi mostrará una versión diferente de Python 3, lo cual es de esperar.
Ahora es el momento de descargar el código.
Asegúrate de utilizar la sección «Descargas» de esta entrada del blog para descargar el código fuente + la red neuronal MobileNet SSD preentrenada.
Desde ahí, ejecuta el siguiente comando:
$ python real_time_object_detection.py \--prototxt MobileNetSSD_deploy.prototxt.txt \--model MobileNetSSD_deploy.caffemodel loading model... starting video stream... elapsed time: 55.07 approx. FPS: 6.54
Estoy usando un Macbook Pro. Un framerate de 6 FPS está bastante bien usando una CPU en un portátil.
Las Raspberry Pis tienen recursos limitados, por lo tanto podemos aprovechar algunos trucos para crear la ilusión de mayores FPS. Si estás en la Raspberry Pi, ejecuta el siguiente comando:
$ python pi_object_detection.py \--prototxt MobileNetSSD_deploy.prototxt.txt \--model MobileNetSSD_deploy.caffemodel loading model... starting process... starting video stream... elapsed time: 48.55 approx. FPS: 27.83
Aquí he creado la ilusión de 27 FPS rápidos en la Raspberry Pi mientras la red neuronal en segundo plano sólo es capaz de procesar 0.9 FPS.
¿Cómo es esto posible?
Hilos y colas.
Es un poco avanzado, pero si lees la entrada original del blog (para la Raspberry Pi), entenderás el proceso. Además, podrás impresionar a tus amigos y familiares.
Qué hay que tener en cuenta al usar pip para instalar OpenCV
Para empezar, no todas las distribuciones de Python tendrán una versión de OpenCV instalable con pip.
Las versiones más nuevas de Python y los sistemas operativos más nuevos (y no digamos, las versiones más antiguas que han llegado al final de su vida útil) pueden no tener una versión de OpenCV lista para funcionar en el repositorio de PyPI ya que la comunidad de código abierto no ha tenido la oportunidad de liberar dicha versión todavía.
En esas situaciones puedes:
- Esperar hasta que se suban los binarios para tu combinación de Python y SO.
- O lo que sería mi recomendación – compilar desde el código fuente (Ubuntu, macOS, RPi).
En segundo lugar, algunos lectores, incluyendo usuarios de Anaconda, han reportado problemas al usar funciones de la GUI como cv2.imshow
y cv2.waitKey
.
En estos escenarios, OpenCV dará un error diciendo que no fue compilado con soporte GTK o QT.
En pocas palabras:
- Podrás usar todas las demás funciones de OpenCV pero no podrás usar ninguna de las funciones GUI, en particular, las del módulo highgui.
- La solución aquí es compilar desde el código fuente (Ubuntu, macOS, RPi).
En tercer lugar, sé que los lectores han reportado problemas al ejecutar import cv2
en sus terminales, Jupyter Notebooks, o shells de Python – esto no es un problema con la instalación pip de OpenCV.
En la mayoría, pero no en todas las situaciones, el error no está relacionado con su instalación real de OpenCV.
En cambio, es más probable que sea un problema con su comprensión de alguna combinación de:
- Los comandos que se ejecutaron y cómo utilizarlos correctamente.
- Pensar que un comando se ejecutó correctamente pero en su lugar dio lugar a un error.
- No poder acceder a su entorno virtual de Python (si está utilizando uno).
Desea comprobar dos veces sus comandos, repetir los pasos y examinar su salida de cerca antes de informar de un problema al importar los cv2
bindings.
Por último, la versión de OpenCV que se instalará a través de pip no incluye algoritmos «no libres» como SIFT, SURF y otros algoritmos patentados. Si no necesitas usar algoritmos patentados, entonces eres oro. Si no, te recomiendo que compiles OpenCV desde el código fuente a través de uno de mis tutoriales de instalación para tu sistema.
Resumen
En el tutorial de hoy, has aprendido a instalar OpenCV con pip en tu sistema operativo.
Específicamente, cubrimos cómo instalar OpenCV a través de pip en Ubuntu, macOS y Raspberry Pi.
Aunque instalar OpenCV a través de pip puede ser el método más fácil para empezar, ten en cuenta que puedes encontrarte con otros problemas.
Si te encuentras con errores o problemas al usar tu instalación de OpenCV mediante pip, asegúrate de consultar la sección «Qué tener en cuenta al usar pip para instalar OpenCV» de esta entrada de blog.
¡Espero que hayas disfrutado del tutorial de hoy!
Para recibir notificaciones cuando se publiquen futuras entradas de blog aquí en el blog de PyImageSearch, asegúrate de introducir tu dirección de correo electrónico en el siguiente formulario.