Preparemos la Headless Raspberry PI (RPI) para Opencv e instalemos Opencv…
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.
- Preparando un sistema de visión artificial con Headless Raspberry Pi: Configuración inicial sin usar teclado ni pantalla
- Después de instalar la Raspberry Pi de una forma Headless , pues conectémonos remotamente y con interfaz gráfica y.
- Activando y probando la cámara en la Raspberry Pi(RPi)
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/