Preparemos la Headless Raspberry PI (RPI) para Opencv e instalemos Opencv…

Jose Cuartas
9 min readNov 22, 2020

Es una instalación larga, prepara café y ojalá café de origen colombiano. Recuerde que es una instalación en modo Headless y los siguientes tutoriales lo traen a este punto.

Parte 1— Primer paso, adecuemos y creemos los directorios

Creamos los directorios o carpetas donde ubicaremos los archivos para la instalación de OpenCV.

$ pwd
$ mkdir instalacion
$ mkdir instalacion/opencv

Parte 2 — Incrementar la memoria swap en la Raspberry Pi(RPi)

En la compilación de Opencv(versión 4 en adelante), la memoria RAM de un 1GB se llena y el espacio de intercambio o SWAP es insuficiente para la compilación en la RPi, ya que el espacio asignado es de solo 100MB de SWAP, por tal motivo, se incrementa la cantidad de memoria SWAP, de la siguiente manera:

$ sudo nano /etc/dphys-swapfile

Una vez realizado el aumento de memoria, haber guardado los cambios y cerrado el fichero. Para que finalmente se haga efectivo el aumento de memoria SWAP se tienen 2 soluciones. La primera es reiniciar el sistema(reboot) y la segunda es ejecutar los siguientes comandos:

$ sudo dphys-swapfile setup
$ sudo dphys-swapfile swapon

Para comprobar que se aumento la memoria SWAP, se ejecuta el siguiente comando.

$ cat /proc/meminfo | grep Swap

Parte 3 — Instalemos y activemos lo principal para no perder la comunicación en la compilación de OpenCV.

Instalamos Screen un gestor de sesiones, el cual evita que la sesiones se pierdan cuando se pierde la conexión con el RPi con clientes como el SSH:

$ sudo apt-get install screen

Se crea una sesión, para la instalación de OpenCV, en este caso es la sesión opencv.

$ screen -list
$ screen -S opencv

Revisamos la nueva sesión

$ screen -list

En procedimientos tan largos en tiempo, como la compilación de opencv con make, donde no se utilizan los servicios de la red inalámbrica mientras se compila OpenCv, puede presentar desconexiones de la sesión SSH, para evitar esta desconexión, ya que la tarjeta inalámbrica de RPi puede entra en modo de ahorro de energía , se ejecuta los siguientes comandos.

$ sudo iw dev wlan0 get power_save 
$ sudo iw dev wlan0 set power_save off
$ sudo iw dev wlan0 get power_save

En caso de reiniciar, el sistema power_save automáticamente regresa a modo ahorro de energía (on), si lo que desea es volver permanente el power_save en consumo constante de energía(off )y mantener siempre activo el hardware de red inalámbrica, se debe activar por un script de shell que se ejecuta cuando se inicia el sistema. Recuerde que al desactivar el modo de ahorro de energía , aumenta el consumo de la misma.

Parte 4 — Instalando dependencias

Instalamos el software para compilar .

$ sudo apt-get -y install build-essential pkg-config cmake
  • build-essential : Se trata de un paquete que contiene una lista informativa de los paquetes que se consideran esenciales para la creación de paquetes Debian.
  • pkg-config: es un software que provee una interfaz unificada para llamar bibliotecas instaladas cuando se está compilando un programa a partir del código fuente.
  • cmake: es una herramienta software para la compilación.
$ sudo apt-get -y install git
  • git: Para conectarse a los repositorios.

Parte 5— Instalando librerías para video y audio

Instalamdo lo referente a las imagenes y video .

$ sudo apt-get -y install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
  • libjpeg: es una biblioteca gratuita con funciones para manejar el formato de datos de imagen JPEG. Se puede instalar también libjpeg8-dev.
  • Libtiff: es una biblioteca para leer y escribir archivos de formato de archivo de imagen etiquetada. El conjunto también contiene herramientas de línea de comandos para procesar TIFF.
  • Libpng : es una biblioteca de código para leer o crear imágenes en formato PNG.
  • JasPer: Un software que es una herramienta para procesar y codificar imágenes, nos permite La importación y la detección automática del formato de imagen, eliminando la necesidad de identificar explícitamente el formato de los datos de entrada codificados
$ sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
  • libavcodec : es una biblioteca de códecs gratuita y de código abierto para codificar y decodificar datos de video y audio.
  • libavformat : proporciona un marco genérico para multiplexar y desmultiplexar (muxing y demultiplexing) datos de audio, video y subtítulos. Como ejemplo es combinar el audio con el video.
  • libswscale :La biblioteca realiza operaciones optimizadas para escalar imágenes , conversión de formato de píxel y entre otras.
  • libv4l : Es una colección de librerías que adiciona una capa abstracta para la trasmisión de video en tiempo real(video4linux2).
$ sudo apt-get -y install libxvidcore-dev libx264-dev$ sudo apt-get -y install libgtk2.0-dev libgtk-3-dev
  • libxvidcore-dev : es la biblioteca de funciones que componen las capacidades de codificación / decodificación de XviD.
  • libx264-dev: librería open source para codificar video en demanda en el formato H. 264/MPEG-4 AVC.
  • libgtk: Biblioteca de interfaz gráfica de usuario.
$ sudo apt-get install libatlas-base-dev gfortran
  • gfortran: es un compilador para Fortran 95.
  • libatlas-base-dev: es una biblioteca para generación y optimización automática de software numérico. Enfocada en operaciones de algebra lineal

Parte 6— Conectando Python con OpenCV

Instalaremos software de Python que con los “ bindings generators” nos permitirá enlazar el software de Python con las librerías OpenCV( todos los algoritmos se implementan en C ++).

$ sudo apt-get install python3-dev
$ sudo apt-get install python3-pip
$ sudo pip3 install numpy

Parte 7— Bajando los instaladores del Opencv a la Rasberry Pi(RPi).

Primero nos ubicamos en el lugar donde se localizarán los repositorios en la RPi

Clonamos el repositorio Opencv localmente

$ sudo git clone https://github.com/opencv/opencv.git

Si por algún problema no funciona, podemos obtenerlo de:

https://github.com/opencv/opencv/archive/3.4.5.zip
Recuerde descomprimirlo con el comando unzip.

Terminado de bajar del repositorio GIT y con la copia local, lo hacemos como master, pero nos ubicamos en la carpeta.

$ git checkout master

Clonamos el repositorio opencv_extra localmente, antes debemos ubicarnos en la carpeta instalación.

$ sudo git clone https://github.com/opencv/opencv_extra.git

Si por algún problema no funciona opencv_extra, podemos obtenerlo de:

https://github.com/opencv/opencv_contrib/archive/3.4.5.zip
Recuerde descomprimirlo con el comando unzip.

Terminado de bajar del repositorio GIT y con la copia local, lo hacemos como master, antes de realizar esto, recuerde ubicarse en la carpeta.

$ git checkout master

Parte 8— Compilando el OpenCV en la Rasberry Pi(RPi).

Revisar bien la ruta donde están los extra modules, creamos el directorio build y nos ubicamos en el para empezar la compilación.

cd ~/instalacion/opencv/ 
mkdir build
cd build

Preparamos la compilación.

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/instalacion/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

Si quedo bien nos sale algo así, en caso contrario recuerda remover el directorio build y empezar de nuevo.

averiguamos cuantos núcleos o cores tenemos, usamos todo ese potencial para compilar, en este caso los núcleos son 4.

$ nproc
$ make -j4

Revisamos que todo termino bien

Ejecutamos el ultimo comando.

$ sudo make install

👍 Felicitaciones si no se generan errores, un gran salto!.

Parte 9— Lo dejamos como al principio

Salimos de la sesión de screen antes creada, presionando las siguientes teclas y salimos como lo enseña la imagen.

Ctrl-Alt-d

Se crean todos los vínculos entre las librerías y actualizamos el sistema.

$ sudo ldconfig
$ sudo apt-get update

Ajustamos al estado anterior la memoria swap.

$ sudo nano /etc/dphys-swapfile

Cambiamos valores

Reiniciamos la memoria de intercambio swap, para que tome los cambios.

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

Revisamos que los cambios en SWAP queden OK

$ cat /proc/meminfo | grep Swap

Reiniciamos.

$ sudo reboot

Parte 10 — Probamos y wala-la-la

Volvemos a ingresar y probamos que la instalación de Opencv quedó OK

$ python3
>>> import cv2
>>> cv2.__version__
>>> quit()

………………disfruta!!👌

Es recomendable que realices un respaldo de la memoria SD de la RPi en este punto👌

Como respaldar(backup) y restaurar la SD de la Raspberry Pi(RPi)

TIPS

Si por algún motivo se presenta un error al hacer el make, por lo cual debemos volver a compilar el make, recuerde remover la carpeta build antes de realizar .

$ rm -rf opencv/build

Aunque con el reinicio, el sistema de ahorro de energía (power_save) se activa por defecto , este se puede activar manualmente en caso de necesitarlo antes de un reinicio.

$ sudo iw dev wlan0 set power_save on

Muchas veces pasa esto

En caso de desconexión por cierre del cliente ssh o un error de ssh , es posible recuperar la sesión que se tenía, si esta fue creada antes por el gestor de sesiones (screen), en este caso se generó una sesión opencv, por esa sesión previa, simplemente nos conectamos con el cliente ssh y digitamos el siguiente comando

$ screen -r opencv

Quedarse sin memoria de intercambio y sin memoria RAM nos puede generar problemas, como en este caso de la figura, donde la RPi se colgó y generó 2 errores .

Para resolver este inconveniente, se debe hacer la modificación y aumentar SWAP, no olvide que al terminar el procedimiento debemos volver al estado normal la swap.

$ sudo nano /etc/dphys-swapfile

Cuando procedemos a instalar sin dar permisos, es decir el comando sin sudo.

Se presenta el siguiente error

Por lo tanto digitamos con sudo que tiene los permisos de usuario.

$ sudo make install

Se desea obtener una versión de OpenCV específica, en la siguiente URL la podemos encontrar, descarge e instale.

https://opencv.org/releases/

--

--

Jose Cuartas
Jose Cuartas

Written by Jose Cuartas

Ingeniero y aprendiz pa toda la vida

No responses yet